|
4 | 4 |
|
5 | 5 | (rf/reg-event-fx :keycard/backup.generate-and-load-key
|
6 | 6 | (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])] |
8 | 8 | {:fx [[:effects.keycard/generate-and-load-key
|
9 | 9 | {:mnemonic (security/safe-unmask-data masked-phrase)
|
10 |
| - :pin pin |
| 10 | + :pin (security/safe-unmask-data masked-pin) |
11 | 11 | :on-success (fn []
|
12 | 12 | (rf/dispatch [:keycard/disconnect])
|
13 | 13 | (rf/dispatch [:navigate-back])
|
14 | 14 | (rf/dispatch [:open-modal :screen/keycard.backup.success]))
|
15 | 15 | :on-failure #(rf/dispatch [:keycard/on-action-with-pin-error %])}]]})))
|
16 | 16 |
|
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 |
27 | 18 | (rf/reg-event-fx :keycard/backup.ready-to-add-connect
|
28 |
| - (fn [_] |
| 19 | + (fn [{:keys [db]}] |
29 | 20 | {:fx [[:dispatch
|
30 | 21 | [: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])}]]]})) |
37 | 25 |
|
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])}]]]})) |
60 | 33 |
|
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])))})) |
64 | 40 |
|
65 | 41 | (defn- save-pin-and-navigate-to-phrase
|
66 | 42 | [pin]
|
67 | 43 | (rf/dispatch [:keycard/disconnect])
|
68 | 44 | (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)]) |
70 | 46 | (rf/dispatch
|
71 | 47 | [:open-modal :screen/use-recovery-phrase-dark
|
72 | 48 | {:on-success #(rf/dispatch [:keycard/backup.phrase-entered %])}]))
|
73 | 49 |
|
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 | + [] |
113 | 52 | (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])}])) |
120 | 56 |
|
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}]]]})) |
132 | 62 |
|
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]))))}]]]})) |
0 commit comments