Skip to content

Commit 1a0a2c8

Browse files
authored
Keycard "refactoring" fixing many issues and UI/UX (#22214)
1 parent 374b65c commit 1a0a2c8

File tree

31 files changed

+879
-652
lines changed

31 files changed

+879
-652
lines changed
183 KB
Loading
329 KB
Loading

src/keycard/keycard.cljs

+7
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,13 @@
145145
(then on-success)
146146
(catch on-failure))))
147147

148+
(defn generate-mnemonic
149+
[{:keys [words on-success on-failure]}]
150+
(.. status-keycard
151+
(generateMnemonic words)
152+
(then on-success)
153+
(catch on-failure)))
154+
148155
(defn generate-and-load-key
149156
[{:keys [mnemonic pin on-success on-failure]}]
150157
(.. status-keycard

src/status_im/common/resources.cljs

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
:keycard-migration-succeeded (js/require "../resources/images/ui2/keycard-migration-succeeded.png")
3636
:keycard-not-same (js/require "../resources/images/ui2/keycard-not-same.png")
3737
:keycard-not-empty (js/require "../resources/images/ui2/keycard-not-empty.png")
38+
:keycard-profile-already-added (js/require
39+
"../resources/images/ui2/keycard-profile-already-added.png")
3840
:keycard-reset-positive (js/require "../resources/images/ui2/keycard-reset-positive.png")
3941
:keycard-reset-negative (js/require "../resources/images/ui2/keycard-reset-negative.png")
4042
:keycard-unblock (js/require "../resources/images/ui2/keycard-unblock.png")

src/status_im/contexts/keycard/authorise/view.cljs

+6-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
(:require [quo.core :as quo]
33
[react-native.core :as rn]
44
[status-im.common.events-helper :as events-helper]
5+
[status-im.common.resources :as resources]
56
[status-im.common.standard-authentication.core :as standard-auth]
67
[utils.i18n :as i18n]
78
[utils.re-frame :as rf]))
@@ -22,8 +23,12 @@
2223
:context-tag {:full-name profile-name
2324
:profile-picture profile-picture
2425
:customization-color customization-color}}]
25-
[rn/view {:style {:flex 1 :padding-horizontal 20 :justify-content :space-between}}
26+
[rn/view {:style {:flex 1 :padding-horizontal 20}}
2627
[quo/text (i18n/label :t/migrate-key-pair-authorise)]
28+
[rn/image
29+
{:resize-mode :contain
30+
:style {:flex 1 :width (- (:width (rn/get-window)) 40)}
31+
:source (resources/get-image :keycard-migration)}]
2732
[standard-auth/slide-auth
2833
{:size :size-48
2934
:container-style {}

src/status_im/contexts/keycard/backup/events.cljs

+44-106
Original file line numberDiff line numberDiff line change
@@ -4,134 +4,72 @@
44

55
(rf/reg-event-fx :keycard/backup.generate-and-load-key
66
(fn [{:keys [db]}]
7-
(let [{:keys [masked-phrase pin]} (get-in db [:keycard :backup])]
7+
(let [{:keys [masked-phrase masked-pin]} (get-in db [:keycard :backup])]
88
{:fx [[:effects.keycard/generate-and-load-key
99
{:mnemonic (security/safe-unmask-data masked-phrase)
10-
:pin pin
10+
:pin (security/safe-unmask-data masked-pin)
1111
:on-success (fn []
1212
(rf/dispatch [:keycard/disconnect])
1313
(rf/dispatch [:navigate-back])
1414
(rf/dispatch [:open-modal :screen/keycard.backup.success]))
1515
:on-failure #(rf/dispatch [:keycard/on-action-with-pin-error %])}]]})))
1616

17-
(defn- ready-to-add-not-empty
18-
[error]
19-
(rf/dispatch [:navigate-back])
20-
(if (= error :keycard/error.not-keycard)
21-
(rf/dispatch [:keycard/on-application-info-error error])
22-
(do
23-
(rf/dispatch [:keycard/disconnect])
24-
(rf/dispatch [:open-modal :screen/keycard.backup.not-empty
25-
{:on-press #(rf/dispatch [:keycard/backup.ready-to-add-connect])}]))))
26-
17+
;; STEP 2: connect and load keys
2718
(rf/reg-event-fx :keycard/backup.ready-to-add-connect
28-
(fn [_]
19+
(fn [{:keys [db]}]
2920
{:fx [[:dispatch
3021
[:keycard/connect
31-
{:theme :dark
32-
:on-error
33-
(fn [error]
34-
(if (= error :keycard/error.keycard-empty)
35-
(rf/dispatch [:keycard/backup.generate-and-load-key])
36-
(ready-to-add-not-empty error)))}]]]}))
22+
{:theme :dark
23+
:instance-uid (get-in db [:keycard :backup :instance-uid])
24+
:on-success #(rf/dispatch [:keycard/backup.generate-and-load-key])}]]]}))
3725

38-
(defn- scan-empty-card-not-empty
39-
[error]
40-
(rf/dispatch [:navigate-back])
41-
(if (= error :keycard/error.not-keycard)
42-
(rf/dispatch [:keycard/on-application-info-error error])
43-
(do
44-
(rf/dispatch [:keycard/disconnect])
45-
(rf/dispatch [:open-modal :screen/keycard.backup.not-empty
46-
{:on-press #(rf/dispatch [:keycard/backup.scan-empty-card])}]))))
47-
48-
(rf/reg-event-fx :keycard/backup.scan-empty-card
49-
(fn [_]
50-
{:fx [[:dispatch
51-
[:keycard/connect
52-
{:theme :dark
53-
:on-error
54-
(fn [error]
55-
(if (= error :keycard/error.keycard-empty)
56-
(do
57-
(rf/dispatch [:keycard/disconnect])
58-
(rf/dispatch [:keycard/backup.create-or-enter-pin]))
59-
(scan-empty-card-not-empty error)))}]]]}))
26+
(rf/reg-event-fx :keycard/backup.phrase-entered
27+
(fn [{:keys [db]} [{:keys [phrase]}]]
28+
{:db (assoc-in db [:keycard :backup :masked-phrase] phrase)
29+
:fx [[:dispatch [:navigate-back]]
30+
[:dispatch
31+
[:open-modal :screen/keycard.backup.ready-to-add
32+
{:on-press #(rf/dispatch [:keycard/backup.ready-to-add-connect])}]]]}))
6033

61-
(rf/reg-event-fx :keycard/backup.save-pin
62-
(fn [{:keys [db]} [pin]]
63-
{:db (assoc-in db [:keycard :backup :pin] pin)}))
34+
(rf/reg-event-fx :keycard/backup.save-instance-uid-and-pin
35+
(fn [{:keys [db]} [masked-pin]]
36+
{:db (-> db
37+
(assoc-in [:keycard :backup :masked-pin] masked-pin)
38+
(assoc-in [:keycard :backup :instance-uid]
39+
(get-in db [:keycard :application-info :instance-uid])))}))
6440

6541
(defn- save-pin-and-navigate-to-phrase
6642
[pin]
6743
(rf/dispatch [:keycard/disconnect])
6844
(rf/dispatch [:navigate-back])
69-
(rf/dispatch [:keycard/backup.save-pin pin])
45+
(rf/dispatch [:keycard/backup.save-instance-uid-and-pin (security/mask-data pin)])
7046
(rf/dispatch
7147
[:open-modal :screen/use-recovery-phrase-dark
7248
{:on-success #(rf/dispatch [:keycard/backup.phrase-entered %])}]))
7349

74-
(defn- verify-entered-pin-and-continue
75-
[pin]
76-
(rf/dispatch
77-
[:keycard/connect
78-
{:theme :dark
79-
:on-error
80-
(fn [error]
81-
(if (= error :keycard/error.keycard-empty)
82-
(rf/dispatch
83-
[:keycard/verify-pin
84-
{:pin pin
85-
:on-success #(save-pin-and-navigate-to-phrase pin)
86-
:on-failure #(rf/dispatch [:keycard/on-action-with-pin-error %])}])
87-
(rf/dispatch [:keycard/on-application-info-error error])))}]))
88-
89-
(declare init-card-not-empty)
90-
91-
(defn- init-card-with-pin-and-continue
92-
[pin]
93-
(rf/dispatch
94-
[:keycard/connect
95-
{:theme :dark
96-
:on-error
97-
(fn [error]
98-
(if (= error :keycard/error.keycard-empty)
99-
(rf/dispatch
100-
[:keycard/init-card
101-
{:pin pin
102-
:on-success #(rf/dispatch
103-
[:keycard/get-application-info
104-
{:on-error
105-
(fn [error]
106-
(if (= error :keycard/error.keycard-empty)
107-
(save-pin-and-navigate-to-phrase pin)
108-
(init-card-not-empty pin error)))}])}])
109-
(init-card-not-empty pin error)))}]))
110-
111-
(defn- init-card-not-empty
112-
[pin error]
50+
(defn- show-not-empty-screen
51+
[]
11352
(rf/dispatch [:navigate-back])
114-
(if (= error :keycard/error.not-keycard)
115-
(rf/dispatch [:keycard/on-application-info-error error])
116-
(do
117-
(rf/dispatch [:keycard/disconnect])
118-
(rf/dispatch [:open-modal :screen/keycard.backup.not-empty
119-
{:on-press #(init-card-with-pin-and-continue pin)}]))))
53+
(rf/dispatch [:keycard/disconnect])
54+
(rf/dispatch [:open-modal :screen/keycard.backup.not-empty
55+
{:on-press #(rf/dispatch [:keycard/backup.scan-empty-card])}]))
12056

121-
(rf/reg-event-fx :keycard/backup.create-or-enter-pin
122-
(fn [{:keys [db]}]
123-
(let [{:keys [initialized?]} (get-in db [:keycard :application-info])]
124-
{:fx [[:dispatch [:navigate-back]]
125-
(if initialized?
126-
[:dispatch
127-
[:open-modal :screen/keycard.pin.enter
128-
{:on-complete verify-entered-pin-and-continue}]]
129-
[:dispatch
130-
[:open-modal :screen/keycard.pin.create
131-
{:on-complete init-card-with-pin-and-continue}]])]})))
57+
(rf/reg-event-fx :keycard/backup-on-empty-card
58+
(fn [_]
59+
{:fx [[:dispatch
60+
[:keycard/init.create-or-enter-pin
61+
{:on-success save-pin-and-navigate-to-phrase}]]]}))
13262

133-
(rf/reg-event-fx :keycard/backup.phrase-entered
134-
(fn [{:keys [db]} [{:keys [phrase]}]]
135-
{:db (assoc-in db [:keycard :backup :masked-phrase] phrase)
136-
:fx [[:dispatch [:navigate-back]]
137-
[:dispatch [:open-modal :screen/keycard.backup.ready-to-add]]]}))
63+
;; STEP 1: connect empty keycard
64+
(rf/reg-event-fx :keycard/backup.scan-empty-card
65+
(fn [_]
66+
{:fx [[:dispatch
67+
[:keycard/connect
68+
{:theme :dark
69+
:on-success
70+
(fn [{:keys [has-master-key?]}]
71+
(if has-master-key?
72+
(show-not-empty-screen)
73+
(do
74+
(rf/dispatch [:keycard/disconnect])
75+
(rf/dispatch [:keycard/backup-on-empty-card]))))}]]]}))

src/status_im/contexts/keycard/backup/view.cljs

+16-15
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,22 @@
99

1010
(defn ready-to-add
1111
[]
12-
[:<>
13-
[quo/page-nav
14-
{:icon-name :i/close
15-
:on-press events-helper/navigate-back}]
16-
[quo/page-top
17-
{:title (i18n/label :t/ready-add-keypair-keycard)}]
18-
[rn/image
19-
{:resize-mode :contain
20-
:style {:flex 1 :width (:width (rn/get-window))}
21-
:source (resources/get-image :keycard-migration)}]
22-
[common.view/tips]
23-
[quo/bottom-actions
24-
{:actions :one-action
25-
:button-one-label (i18n/label :t/scan-keycard)
26-
:button-one-props {:on-press #(rf/dispatch [:keycard/backup.ready-to-add-connect])}}]])
12+
(let [{:keys [on-press]} (rf/sub [:get-screen-params])]
13+
[:<>
14+
[quo/page-nav
15+
{:icon-name :i/close
16+
:on-press events-helper/navigate-back}]
17+
[quo/page-top
18+
{:title (i18n/label :t/ready-add-keypair-keycard)}]
19+
[rn/image
20+
{:resize-mode :contain
21+
:style {:flex 1 :width (:width (rn/get-window))}
22+
:source (resources/get-image :keycard-migration)}]
23+
[common.view/tips]
24+
[quo/bottom-actions
25+
{:actions :one-action
26+
:button-one-label (i18n/label :t/scan-keycard)
27+
:button-one-props {:on-press on-press}}]]))
2728

2829
(defn success-view
2930
[]

src/status_im/contexts/keycard/change_pin/events.cljs

+4-3
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,10 @@
5555
[:keycard/verify-pin
5656
{:pin (security/safe-unmask-data (:current-pin change-pin-data))
5757
:on-success (fn []
58-
(rf/dispatch [:keycard/connect.next-stage
59-
{:key-uid (:key-uid change-pin-data)
60-
:on-success #(change-pin-and-continue change-pin-data)}]))
58+
(rf/dispatch [:keycard/connect
59+
{:next-stage? true
60+
:key-uid (:key-uid change-pin-data)
61+
:on-success #(change-pin-and-continue change-pin-data)}]))
6162
:on-failure (fn [error]
6263
(when-not (utils/tag-lost? (:error error))
6364
(rf/dispatch [:keycard/disconnect])

src/status_im/contexts/keycard/check/events.cljs

-26
This file was deleted.

0 commit comments

Comments
 (0)