git.fiddlerwoaroof.com
Browse code

feat: save default region, disable open webconsole until auth

Ed Langley authored on 29/06/2020 19:34:08
Showing 2 changed files
... ...
@@ -3,6 +3,7 @@
3 3
 (capi:define-interface mfa-tool ()
4 4
   ((assumed-credentials :accessor assumed-credentials :initform (make-hash-table :test 'equal))
5 5
    (%default-account :initarg :default-account :reader default-account)
6
+   (%default-region :initarg :default-region :reader default-region)
6 7
    (%signin-url :accessor signin-url))
7 8
   (:panes
8 9
    (output-pane capi:collector-pane :reader output
... ...
@@ -37,12 +38,16 @@
37 38
    (region-selector capi:option-pane
38 39
                     :reader region-selector
39 40
                     ;; :external-max-width '(character 35)
40
-                    :items (list "us-east-1" "us-east-2"
41
-                                 "us-west-1" "us-west-2"
42
-                                 "ca-central-1"
43
-                                 "eu-central-1"
44
-                                 "eu-west-1" "eu-west-2"))
41
+                    :selection-callback 'region-selected
42
+                    :callback-type :data
43
+                    :selected-item (or %default-region :|us-east-1|)
44
+                    :items (list :|us-east-1| :|us-east-2|
45
+                                 :|us-west-1| :|us-west-2|
46
+                                 :|ca-central-1|
47
+                                 :|eu-central-1|
48
+                                 :|eu-west-1| :|eu-west-2|))
45 49
    (open-console-button capi:push-button
50
+                        :enabled nil
46 51
                         :selection-callback 'execute-action
47 52
                         :callback-type :data-interface
48 53
                         :data :|Open Web Console|)
... ...
@@ -111,7 +116,7 @@
111 116
                   :best-width 1280
112 117
                   :best-height 800)))
113 118
 
114
-(defun interface (&rest args &key default-account)
119
+(defun interface (&rest args &key default-account default-region)
115 120
   (declare (ignore default-account))
116 121
   (let ((interface (apply 'make-instance 'mfa-tool args)))
117 122
     (setf (capi:pane-initial-focus interface)
... ...
@@ -200,8 +205,10 @@
200 205
         *accounts* (reprocess-accounts (load-accounts accounts))
201 206
         aws:*session* (mfa-tool.credential-provider:make-aws-session))
202 207
   (ubiquitous:restore :cj.mfa-tool)
203
-  (interface :default-account
204
-             (ubiquitous:value :default-account)))
208
+  (interface
209
+   :default-account (ubiquitous:value :default-account)
210
+   :default-region (or (ubiquitous:value :default-region)
211
+                       :|us-east-1|)))
205 212
 
206 213
 (defun start-in-repl
207 214
     (&optional (accounts (asdf:system-relative-pathname :aws-access "assets/accounts"
... ...
@@ -4,6 +4,9 @@
4 4
   (setf (ubiquitous:value :default-account)
5 5
         (cdr account)))
6 6
 
7
+(defun region-selected (region)
8
+  (setf (ubiquitous:value :default-region)
9
+        region))
7 10
 (defparameter *developer-p* (equal "elangley" (uiop/os:getenv "USER")))
8 11
 
9 12
 (defgeneric assumed-credentials (store))
... ...
@@ -90,6 +93,8 @@
90 93
                   (session-token creds))))
91 94
       (capi:set-button-panel-enabled-items (slot-value interface 'action-buttons)
92 95
                                            :set t)
96
+      (setf (capi:button-enabled (slot-value interface 'open-console-button))
97
+            t)
93 98
       (setf (credentials-for-account interface account) (session-credentials creds)
94 99
             (signin-url interface) (url-from-signin-token signin-token)))))
95 100
 
... ...
@@ -118,14 +123,13 @@
118 123
   (let ((accounts (gethash "Accounts" accounts))
119 124
         (result ()))
120 125
     (mapc (lambda (account)
121
-            (push (cons (format nil "~a: ~a (~a)" 
126
+            (push (cons (format nil "~a: ~a (~a)"
122 127
                                 (gethash "Name" account)
123 128
                                 (gethash "Id" account)
124 129
                                 (gethash "Type" account))
125 130
                         (gethash "Id" account))
126 131
                   result))
127 132
           accounts)
128
-    (coerce (sort result 'string-lessp 
133
+    (coerce (sort result 'string-lessp
129 134
                   :key 'car)
130 135
             'list)))
131
-