Skip to content

Commit 7c4f444

Browse files
committed
add factory reset option on new Keycard account
1 parent 1bd62f1 commit 7c4f444

File tree

12 files changed

+87
-43
lines changed

12 files changed

+87
-43
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
"react-native-screens": "^2.10.1",
6262
"react-native-shake": "^3.3.1",
6363
"react-native-splash-screen": "^3.2.0",
64-
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.5.34",
64+
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#feature/factory-reset",
6565
"react-native-svg": "^9.8.4",
6666
"react-native-touch-id": "^4.4.1",
6767
"react-native-webview": "git+https://github.com/status-im/react-native-webview.git#v10.9.2",

src/status_im/keycard/card.cljs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,25 @@
9999
[:keycard.callback/on-get-application-info-error
100100
(error-object->map response)]))})))
101101

102+
(defn factory-reset [{:keys [on-success] :as args}]
103+
(log/debug "[keycard] factory-reset")
104+
(keycard/factory-reset
105+
card
106+
(merge
107+
args
108+
{:on-success
109+
(fn [response]
110+
(log/debug "[keycard response succ] get-application-info")
111+
(re-frame/dispatch
112+
[:keycard.callback/on-get-application-info-success
113+
response on-success]))
114+
:on-failure
115+
(fn [response]
116+
(log/debug "[keycard response fail] get-application-info")
117+
(re-frame/dispatch
118+
[:keycard.callback/on-get-application-info-error
119+
(error-object->map response)]))})))
120+
102121
(defn install-applet []
103122
(log/debug "[keycard] install-applet")
104123
(keycard/install-applet

src/status_im/keycard/common.cljs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,12 @@
409409
(navigation/navigate-to-cofx :keycard-recovery-pin nil)))
410410
(show-wrong-keycard-alert true)))))
411411

412+
(fx/defn factory-reset
413+
{:events [:keycard/factory-reset]}
414+
[{:keys [db]} on-card-read]
415+
(log/debug "[keycard] factory-reset")
416+
{:keycard/factory-reset {:on-success on-card-read}})
417+
412418
;; Get application info
413419

414420
(fx/defn get-application-info

src/status_im/keycard/fx.cljs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@
5959
:keycard/get-application-info
6060
card/get-application-info)
6161

62+
(re-frame/reg-fx
63+
:keycard/factory-reset
64+
card/factory-reset)
65+
6266
(re-frame/reg-fx
6367
:keycard/check-nfc-support
6468
card/check-nfc-support)

src/status_im/keycard/ios_keycard.cljs

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/status_im/keycard/keycard.cljs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
(remove-event-listener [this event])
1515
(remove-event-listeners [this])
1616
(get-application-info [this args])
17+
(factory-reset [this args])
1718
(install-applet [this args])
1819
(install-cash-applet [this args])
1920
(init-card [this args])

src/status_im/keycard/onboarding.cljs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
[status-im.i18n.i18n :as i18n]
55
[status-im.navigation :as navigation]
66
[status-im.utils.fx :as fx]
7+
[status-im.utils.utils :as utils]
78
[status-im.keycard.common :as common]
89
[status-im.keycard.mnemonic :as mnemonic]
910
[taoensso.timbre :as log]
@@ -274,6 +275,11 @@
274275
{:mnemonic mnemonic
275276
:pin pin'}})))
276277

278+
(fx/defn factory-reset-card-toggle
279+
{:events [:keycard.onboarding.intro.ui/factory-reset-card-toggle]}
280+
[{:keys [db] :as cofx} checked?]
281+
{:db (assoc-in db [:keycard :factory-reset-card?] checked?)})
282+
277283
(fx/defn begin-setup-pressed
278284
{:events [:keycard.onboarding.intro.ui/begin-setup-pressed]}
279285
[{:keys [db] :as cofx}]
@@ -283,13 +289,29 @@
283289
(update :keycard
284290
dissoc :secrets :card-state :multiaccount-wallet-address
285291
:multiaccount-whisper-public-key
286-
:application-info)
292+
:application-info :factory-reset-card?)
287293
(assoc-in [:keycard :setup-step] :begin)
288294
(assoc-in [:keycard :pin :on-verified] nil))}
289-
(common/show-connection-sheet
290-
{:on-card-connected :keycard/get-application-info
291-
:on-card-read :keycard/check-card-state
292-
:handler (common/get-application-info :keycard/check-card-state)})))
295+
(if (get-in db [:keycard :factory-reset-card?])
296+
(utils/show-confirmation {:title (i18n/label :t/keycard-factory-reset-title)
297+
:content (i18n/label :t/keycard-factory-reset-text)
298+
:confirm-button-text (i18n/label :t/yes)
299+
:cancel-button-text (i18n/label :t/no)
300+
:on-accept #(re-frame/dispatch [::factory-reset])
301+
:on-cancel #()})
302+
(common/show-connection-sheet
303+
{:on-card-connected :keycard/get-application-info
304+
:on-card-read :keycard/check-card-state
305+
:handler (common/get-application-info :keycard/check-card-state)}))))
306+
307+
(fx/defn factory-reset
308+
{:events [::factory-reset]}
309+
[cofx]
310+
(common/show-connection-sheet
311+
cofx
312+
{:on-card-connected :keycard/factory-reset
313+
:on-card-read :keycard/check-card-state
314+
:handler (common/factory-reset :keycard/check-card-state)}))
293315

294316
(fx/defn cancel-confirm
295317
{:events [::cancel-confirm]}

src/status_im/keycard/real_keycard.cljs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,17 @@
107107
(on-success info))))
108108
(catch on-failure)))
109109

110+
(defn factory-reset
111+
[{:keys [on-success on-failure]}]
112+
(.. status-keycard
113+
(factoryReset)
114+
(then (fn [response]
115+
(let [info (-> response
116+
(js->clj :keywordize-keys true)
117+
(update :key-uid ethereum/normalized-hex))]
118+
(on-success info))))
119+
(catch on-failure)))
120+
110121
(defn install-applet [{:keys [on-success on-failure]}]
111122
(.. status-keycard
112123
installApplet
@@ -313,6 +324,8 @@
313324
(set-pairings args))
314325
(keycard/get-application-info [this args]
315326
(get-application-info args))
327+
(keycard/factory-reset [this args]
328+
(factory-reset args))
316329
(keycard/install-applet [this args]
317330
(install-applet args))
318331
(keycard/install-cash-applet [this args]

src/status_im/keycard/simulated_keycard.cljs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119
(log/debug "get-application-info")
120120
(later #(on-success (get @state :application-info))))
121121

122+
(defn factory-reset [_])
122123
(defn install-applet [_])
123124
(defn install-cash-applet [_])
124125

@@ -459,6 +460,9 @@
459460
(keycard/get-application-info [this args]
460461
(log/debug "simulated card get-application-info")
461462
(get-application-info args))
463+
(keycard/factory-reset [this args]
464+
(log/debug "simulated card factory-reset")
465+
(get-application-info args))
462466
(keycard/install-applet [this args]
463467
(log/debug "simulated card install-applet")
464468
(install-applet args))

src/status_im/ui/screens/keycard/onboarding/views.cljs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@
1111
[status-im.ui.components.topbar :as topbar]
1212
[status-im.ui.screens.keycard.pin.views :as pin.views]
1313
[status-im.ui.screens.keycard.styles :as styles]
14+
[status-im.ui.components.checkbox.view :as checkbox]
1415
[quo.core :as quo]
1516
[status-im.constants :as constants])
1617
(:require-macros [status-im.utils.views :refer [defview letsubs]]))
1718

1819
(defview intro []
1920
(letsubs [flow [:keycard-flow]
20-
{:keys [from-key-storage-and-migration?]} [:keycard]]
21+
{:keys [from-key-storage-and-migration? factory-reset-card?]} [:keycard]]
2122
[react/view styles/container
2223
(when-not from-key-storage-and-migration?
2324
[topbar/topbar])
@@ -86,6 +87,11 @@
8687
[react/text {:style {:color colors/gray
8788
:padding-right 35}}
8889
text]]]]))]
90+
[react/view {:style {:flex-direction :row}}
91+
[checkbox/checkbox {:checked? factory-reset-card?
92+
:style {:margin-right 10}
93+
:on-value-change #(re-frame/dispatch [:keycard.onboarding.intro.ui/factory-reset-card-toggle %])}]
94+
[react/text (i18n/label :t/keycard-factory-reset)]]
8995
[react/view {:margin-bottom 40}
9096
[quo/button {:on-press #(re-frame/dispatch [:keycard.onboarding.intro.ui/begin-setup-pressed])}
9197
(i18n/label :t/begin-set-up)]]]]))

0 commit comments

Comments
 (0)