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
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 |
- |