add factory reset option on new Keycard account
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
This commit is contained in:
parent
a7660754fb
commit
0b8509949a
|
@ -628,7 +628,7 @@ EXTERNAL SOURCES:
|
||||||
|
|
||||||
CHECKOUT OPTIONS:
|
CHECKOUT OPTIONS:
|
||||||
Keycard:
|
Keycard:
|
||||||
:commit: 75c956d64a7d9fdf63e1aac9c2f36237e792c3eb
|
:commit: abf2be41c70846ab6f11c8bd445faf81b0befc1f
|
||||||
:git: https://github.com/status-im/Keycard.swift.git
|
:git: https://github.com/status-im/Keycard.swift.git
|
||||||
secp256k1:
|
secp256k1:
|
||||||
:commit: 46a1fa30d9b8babeae85ff519050f42394ab5fcc
|
:commit: 46a1fa30d9b8babeae85ff519050f42394ab5fcc
|
||||||
|
|
|
@ -131,6 +131,7 @@
|
||||||
<array>
|
<array>
|
||||||
<string>A00000080400010101</string>
|
<string>A00000080400010101</string>
|
||||||
<string>A00000080400010301</string>
|
<string>A00000080400010301</string>
|
||||||
|
<string>A000000151000000</string>
|
||||||
</array>
|
</array>
|
||||||
<key>NFCReaderUsageDescription</key>
|
<key>NFCReaderUsageDescription</key>
|
||||||
<string>Enable Keycard</string>
|
<string>Enable Keycard</string>
|
||||||
|
|
|
@ -137,6 +137,7 @@
|
||||||
<array>
|
<array>
|
||||||
<string>A00000080400010101</string>
|
<string>A00000080400010101</string>
|
||||||
<string>A00000080400010301</string>
|
<string>A00000080400010301</string>
|
||||||
|
<string>A000000151000000</string>
|
||||||
</array>
|
</array>
|
||||||
<key>NFCReaderUsageDescription</key>
|
<key>NFCReaderUsageDescription</key>
|
||||||
<string>Enable Keycard</string>
|
<string>Enable Keycard</string>
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
<array>
|
<array>
|
||||||
<string>A00000080400010101</string>
|
<string>A00000080400010101</string>
|
||||||
<string>A00000080400010301</string>
|
<string>A00000080400010301</string>
|
||||||
|
<string>A000000151000000</string>
|
||||||
</array>
|
</array>
|
||||||
<key>NFCReaderUsageDescription</key>
|
<key>NFCReaderUsageDescription</key>
|
||||||
<string>Enable Keycard</string>
|
<string>Enable Keycard</string>
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
"react-native-screens": "^2.10.1",
|
"react-native-screens": "^2.10.1",
|
||||||
"react-native-shake": "^3.3.1",
|
"react-native-shake": "^3.3.1",
|
||||||
"react-native-splash-screen": "^3.2.0",
|
"react-native-splash-screen": "^3.2.0",
|
||||||
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.5.34",
|
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.5.35",
|
||||||
"react-native-svg": "^9.8.4",
|
"react-native-svg": "^9.8.4",
|
||||||
"react-native-touch-id": "^4.4.1",
|
"react-native-touch-id": "^4.4.1",
|
||||||
"react-native-webview": "git+https://github.com/status-im/react-native-webview.git#v10.9.2",
|
"react-native-webview": "git+https://github.com/status-im/react-native-webview.git#v10.9.2",
|
||||||
|
|
|
@ -99,6 +99,25 @@
|
||||||
[:keycard.callback/on-get-application-info-error
|
[:keycard.callback/on-get-application-info-error
|
||||||
(error-object->map response)]))})))
|
(error-object->map response)]))})))
|
||||||
|
|
||||||
|
(defn factory-reset [{:keys [on-success] :as args}]
|
||||||
|
(log/debug "[keycard] factory-reset")
|
||||||
|
(keycard/factory-reset
|
||||||
|
card
|
||||||
|
(merge
|
||||||
|
args
|
||||||
|
{:on-success
|
||||||
|
(fn [response]
|
||||||
|
(log/debug "[keycard response succ] get-application-info")
|
||||||
|
(re-frame/dispatch
|
||||||
|
[:keycard.callback/on-get-application-info-success
|
||||||
|
response on-success]))
|
||||||
|
:on-failure
|
||||||
|
(fn [response]
|
||||||
|
(log/debug "[keycard response fail] get-application-info")
|
||||||
|
(re-frame/dispatch
|
||||||
|
[:keycard.callback/on-get-application-info-error
|
||||||
|
(error-object->map response)]))})))
|
||||||
|
|
||||||
(defn install-applet []
|
(defn install-applet []
|
||||||
(log/debug "[keycard] install-applet")
|
(log/debug "[keycard] install-applet")
|
||||||
(keycard/install-applet
|
(keycard/install-applet
|
||||||
|
|
|
@ -409,6 +409,13 @@
|
||||||
(navigation/navigate-to-cofx :keycard-recovery-pin nil)))
|
(navigation/navigate-to-cofx :keycard-recovery-pin nil)))
|
||||||
(show-wrong-keycard-alert true)))))
|
(show-wrong-keycard-alert true)))))
|
||||||
|
|
||||||
|
(fx/defn factory-reset
|
||||||
|
{:events [:keycard/factory-reset]}
|
||||||
|
[{:keys [db]} on-card-read]
|
||||||
|
(log/debug "[keycard] factory-reset")
|
||||||
|
{:db (update db :keycard dissoc :factory-reset-card?)
|
||||||
|
:keycard/factory-reset {:on-success on-card-read}})
|
||||||
|
|
||||||
;; Get application info
|
;; Get application info
|
||||||
|
|
||||||
(fx/defn get-application-info
|
(fx/defn get-application-info
|
||||||
|
|
|
@ -59,6 +59,10 @@
|
||||||
:keycard/get-application-info
|
:keycard/get-application-info
|
||||||
card/get-application-info)
|
card/get-application-info)
|
||||||
|
|
||||||
|
(re-frame/reg-fx
|
||||||
|
:keycard/factory-reset
|
||||||
|
card/factory-reset)
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:keycard/check-nfc-support
|
:keycard/check-nfc-support
|
||||||
card/check-nfc-support)
|
card/check-nfc-support)
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
(ns status-im.keycard.ios-keycard
|
|
||||||
(:require [status-im.keycard.keycard :as keycard]))
|
|
||||||
|
|
||||||
(defrecord IOSKeycard []
|
|
||||||
keycard/Keycard
|
|
||||||
(check-nfc-support [this args])
|
|
||||||
(check-nfc-enabled [this args])
|
|
||||||
(open-nfc-settings [this])
|
|
||||||
(register-card-events [this args])
|
|
||||||
(on-card-disconnected [this callback])
|
|
||||||
(on-card-connected [this callback])
|
|
||||||
(remove-event-listener [this event])
|
|
||||||
(remove-event-listeners [this])
|
|
||||||
(get-application-info [this args])
|
|
||||||
(install-applet [this args])
|
|
||||||
(init-card [this args])
|
|
||||||
(install-applet-and-init-card [this args])
|
|
||||||
(pair [this args])
|
|
||||||
(generate-and-load-key [this args])
|
|
||||||
(unblock-pin [this args])
|
|
||||||
(verify-pin [this args])
|
|
||||||
(change-pin [this args])
|
|
||||||
(unpair [this args])
|
|
||||||
(delete [this args])
|
|
||||||
(remove-key [this args])
|
|
||||||
(remove-key-with-unpair [this args])
|
|
||||||
(export-key [this args])
|
|
||||||
(unpair-and-delete [this args])
|
|
||||||
(import-keys [this args])
|
|
||||||
(get-keys [this args])
|
|
||||||
(sign [this args])
|
|
||||||
(save-multiaccount-and-login [this args])
|
|
||||||
(login [this args])
|
|
||||||
(send-transaction-with-signature [this args]))
|
|
|
@ -14,6 +14,7 @@
|
||||||
(remove-event-listener [this event])
|
(remove-event-listener [this event])
|
||||||
(remove-event-listeners [this])
|
(remove-event-listeners [this])
|
||||||
(get-application-info [this args])
|
(get-application-info [this args])
|
||||||
|
(factory-reset [this args])
|
||||||
(install-applet [this args])
|
(install-applet [this args])
|
||||||
(install-cash-applet [this args])
|
(install-cash-applet [this args])
|
||||||
(init-card [this args])
|
(init-card [this args])
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
[status-im.i18n.i18n :as i18n]
|
[status-im.i18n.i18n :as i18n]
|
||||||
[status-im.navigation :as navigation]
|
[status-im.navigation :as navigation]
|
||||||
[status-im.utils.fx :as fx]
|
[status-im.utils.fx :as fx]
|
||||||
|
[status-im.utils.utils :as utils]
|
||||||
[status-im.keycard.common :as common]
|
[status-im.keycard.common :as common]
|
||||||
[status-im.keycard.mnemonic :as mnemonic]
|
[status-im.keycard.mnemonic :as mnemonic]
|
||||||
[taoensso.timbre :as log]
|
[taoensso.timbre :as log]
|
||||||
|
@ -274,6 +275,11 @@
|
||||||
{:mnemonic mnemonic
|
{:mnemonic mnemonic
|
||||||
:pin pin'}})))
|
:pin pin'}})))
|
||||||
|
|
||||||
|
(fx/defn factory-reset-card-toggle
|
||||||
|
{:events [:keycard.onboarding.intro.ui/factory-reset-card-toggle]}
|
||||||
|
[{:keys [db] :as cofx} checked?]
|
||||||
|
{:db (assoc-in db [:keycard :factory-reset-card?] checked?)})
|
||||||
|
|
||||||
(fx/defn begin-setup-pressed
|
(fx/defn begin-setup-pressed
|
||||||
{:events [:keycard.onboarding.intro.ui/begin-setup-pressed]}
|
{:events [:keycard.onboarding.intro.ui/begin-setup-pressed]}
|
||||||
[{:keys [db] :as cofx}]
|
[{:keys [db] :as cofx}]
|
||||||
|
@ -282,14 +288,34 @@
|
||||||
{:db (-> db
|
{:db (-> db
|
||||||
(update :keycard
|
(update :keycard
|
||||||
dissoc :secrets :card-state :multiaccount-wallet-address
|
dissoc :secrets :card-state :multiaccount-wallet-address
|
||||||
:multiaccount-whisper-public-key
|
:multiaccount-whisper-public-key :application-info)
|
||||||
:application-info)
|
|
||||||
(assoc-in [:keycard :setup-step] :begin)
|
(assoc-in [:keycard :setup-step] :begin)
|
||||||
(assoc-in [:keycard :pin :on-verified] nil))}
|
(assoc-in [:keycard :pin :on-verified] nil))}
|
||||||
(common/show-connection-sheet
|
(if (get-in db [:keycard :factory-reset-card?])
|
||||||
{:on-card-connected :keycard/get-application-info
|
(utils/show-confirmation {:title (i18n/label :t/keycard-factory-reset-title)
|
||||||
:on-card-read :keycard/check-card-state
|
:content (i18n/label :t/keycard-factory-reset-text)
|
||||||
:handler (common/get-application-info :keycard/check-card-state)})))
|
:confirm-button-text (i18n/label :t/yes)
|
||||||
|
:cancel-button-text (i18n/label :t/no)
|
||||||
|
:on-accept #(re-frame/dispatch [::factory-reset])
|
||||||
|
:on-cancel #(re-frame/dispatch [::factory-reset-cancel])})
|
||||||
|
(common/show-connection-sheet
|
||||||
|
{:on-card-connected :keycard/get-application-info
|
||||||
|
:on-card-read :keycard/check-card-state
|
||||||
|
:handler (common/get-application-info :keycard/check-card-state)}))))
|
||||||
|
|
||||||
|
(fx/defn factory-reset
|
||||||
|
{:events [::factory-reset]}
|
||||||
|
[cofx]
|
||||||
|
(common/show-connection-sheet
|
||||||
|
cofx
|
||||||
|
{:on-card-connected :keycard/factory-reset
|
||||||
|
:on-card-read :keycard/check-card-state
|
||||||
|
:handler (common/factory-reset :keycard/check-card-state)}))
|
||||||
|
|
||||||
|
(fx/defn factory-reset-cancel
|
||||||
|
{:events [::factory-reset-cancel]}
|
||||||
|
[{:keys [db] :as cofx}]
|
||||||
|
{:db (update db :keycard dissoc :factory-reset-card?)})
|
||||||
|
|
||||||
(fx/defn cancel-confirm
|
(fx/defn cancel-confirm
|
||||||
{:events [::cancel-confirm]}
|
{:events [::cancel-confirm]}
|
||||||
|
|
|
@ -107,6 +107,17 @@
|
||||||
(on-success info))))
|
(on-success info))))
|
||||||
(catch on-failure)))
|
(catch on-failure)))
|
||||||
|
|
||||||
|
(defn factory-reset
|
||||||
|
[{:keys [on-success on-failure]}]
|
||||||
|
(.. status-keycard
|
||||||
|
(factoryReset)
|
||||||
|
(then (fn [response]
|
||||||
|
(let [info (-> response
|
||||||
|
(js->clj :keywordize-keys true)
|
||||||
|
(update :key-uid ethereum/normalized-hex))]
|
||||||
|
(on-success info))))
|
||||||
|
(catch on-failure)))
|
||||||
|
|
||||||
(defn install-applet [{:keys [on-success on-failure]}]
|
(defn install-applet [{:keys [on-success on-failure]}]
|
||||||
(.. status-keycard
|
(.. status-keycard
|
||||||
installApplet
|
installApplet
|
||||||
|
@ -313,6 +324,8 @@
|
||||||
(set-pairings args))
|
(set-pairings args))
|
||||||
(keycard/get-application-info [this args]
|
(keycard/get-application-info [this args]
|
||||||
(get-application-info args))
|
(get-application-info args))
|
||||||
|
(keycard/factory-reset [this args]
|
||||||
|
(factory-reset args))
|
||||||
(keycard/install-applet [this args]
|
(keycard/install-applet [this args]
|
||||||
(install-applet args))
|
(install-applet args))
|
||||||
(keycard/install-cash-applet [this args]
|
(keycard/install-cash-applet [this args]
|
||||||
|
|
|
@ -119,6 +119,7 @@
|
||||||
(log/debug "get-application-info")
|
(log/debug "get-application-info")
|
||||||
(later #(on-success (get @state :application-info))))
|
(later #(on-success (get @state :application-info))))
|
||||||
|
|
||||||
|
(defn factory-reset [_])
|
||||||
(defn install-applet [_])
|
(defn install-applet [_])
|
||||||
(defn install-cash-applet [_])
|
(defn install-cash-applet [_])
|
||||||
|
|
||||||
|
@ -459,6 +460,9 @@
|
||||||
(keycard/get-application-info [this args]
|
(keycard/get-application-info [this args]
|
||||||
(log/debug "simulated card get-application-info")
|
(log/debug "simulated card get-application-info")
|
||||||
(get-application-info args))
|
(get-application-info args))
|
||||||
|
(keycard/factory-reset [this args]
|
||||||
|
(log/debug "simulated card factory-reset")
|
||||||
|
(get-application-info args))
|
||||||
(keycard/install-applet [this args]
|
(keycard/install-applet [this args]
|
||||||
(log/debug "simulated card install-applet")
|
(log/debug "simulated card install-applet")
|
||||||
(install-applet args))
|
(install-applet args))
|
||||||
|
|
|
@ -11,13 +11,14 @@
|
||||||
[status-im.ui.components.topbar :as topbar]
|
[status-im.ui.components.topbar :as topbar]
|
||||||
[status-im.ui.screens.keycard.pin.views :as pin.views]
|
[status-im.ui.screens.keycard.pin.views :as pin.views]
|
||||||
[status-im.ui.screens.keycard.styles :as styles]
|
[status-im.ui.screens.keycard.styles :as styles]
|
||||||
|
[status-im.ui.components.checkbox.view :as checkbox]
|
||||||
[quo.core :as quo]
|
[quo.core :as quo]
|
||||||
[status-im.constants :as constants])
|
[status-im.constants :as constants])
|
||||||
(:require-macros [status-im.utils.views :refer [defview letsubs]]))
|
(:require-macros [status-im.utils.views :refer [defview letsubs]]))
|
||||||
|
|
||||||
(defview intro []
|
(defview intro []
|
||||||
(letsubs [flow [:keycard-flow]
|
(letsubs [flow [:keycard-flow]
|
||||||
{:keys [from-key-storage-and-migration?]} [:keycard]]
|
{:keys [from-key-storage-and-migration? factory-reset-card?]} [:keycard]]
|
||||||
[react/view styles/container
|
[react/view styles/container
|
||||||
(when-not from-key-storage-and-migration?
|
(when-not from-key-storage-and-migration?
|
||||||
[topbar/topbar])
|
[topbar/topbar])
|
||||||
|
@ -86,6 +87,11 @@
|
||||||
[react/text {:style {:color colors/gray
|
[react/text {:style {:color colors/gray
|
||||||
:padding-right 35}}
|
:padding-right 35}}
|
||||||
text]]]]))]
|
text]]]]))]
|
||||||
|
[react/view {:style {:flex-direction :row}}
|
||||||
|
[checkbox/checkbox {:checked? factory-reset-card?
|
||||||
|
:style {:margin-right 10}
|
||||||
|
:on-value-change #(re-frame/dispatch [:keycard.onboarding.intro.ui/factory-reset-card-toggle %])}]
|
||||||
|
[react/text (i18n/label :t/keycard-factory-reset)]]
|
||||||
[react/view {:margin-bottom 40}
|
[react/view {:margin-bottom 40}
|
||||||
[quo/button {:on-press #(re-frame/dispatch [:keycard.onboarding.intro.ui/begin-setup-pressed])}
|
[quo/button {:on-press #(re-frame/dispatch [:keycard.onboarding.intro.ui/begin-setup-pressed])}
|
||||||
(i18n/label :t/begin-set-up)]]]]))
|
(i18n/label :t/begin-set-up)]]]]))
|
||||||
|
|
|
@ -714,6 +714,9 @@
|
||||||
"keycard-desc": "Own a Keycard? Store your keys on it; you’ll need it for transactions",
|
"keycard-desc": "Own a Keycard? Store your keys on it; you’ll need it for transactions",
|
||||||
"keycard-dont-ask-card": "Don't ask for card to sign in",
|
"keycard-dont-ask-card": "Don't ask for card to sign in",
|
||||||
"keycard-reset-passcode": "Reset passcode",
|
"keycard-reset-passcode": "Reset passcode",
|
||||||
|
"keycard-factory-reset": "Return card to factory settings",
|
||||||
|
"keycard-factory-reset-title": "Are you sure you want to perform a factory reset?",
|
||||||
|
"keycard-factory-reset-text": "Performing this will delete any mnemonic phrase stored on the card. Make sure you have a backup of the mnemonic phrase you've been using with this Keycard.",
|
||||||
"keycard-enter-new-passcode": "Enter new passcode {{step}}/2",
|
"keycard-enter-new-passcode": "Enter new passcode {{step}}/2",
|
||||||
"keycard-has-multiaccount-on-it": "This card is full. Each card can hold one main keypair",
|
"keycard-has-multiaccount-on-it": "This card is full. Each card can hold one main keypair",
|
||||||
"keycard-onboarding-finishing-header": "Finishing up",
|
"keycard-onboarding-finishing-header": "Finishing up",
|
||||||
|
|
|
@ -6751,9 +6751,9 @@ react-native-splash-screen@^3.2.0:
|
||||||
resolved "https://registry.yarnpkg.com/react-native-splash-screen/-/react-native-splash-screen-3.2.0.tgz#d47ec8557b1ba988ee3ea98d01463081b60fff45"
|
resolved "https://registry.yarnpkg.com/react-native-splash-screen/-/react-native-splash-screen-3.2.0.tgz#d47ec8557b1ba988ee3ea98d01463081b60fff45"
|
||||||
integrity sha512-Ls9qiNZzW/OLFoI25wfjjAcrf2DZ975hn2vr6U9gyuxi2nooVbzQeFoQS5vQcbCt9QX5NY8ASEEAtlLdIa6KVg==
|
integrity sha512-Ls9qiNZzW/OLFoI25wfjjAcrf2DZ975hn2vr6U9gyuxi2nooVbzQeFoQS5vQcbCt9QX5NY8ASEEAtlLdIa6KVg==
|
||||||
|
|
||||||
"react-native-status-keycard@git+https://github.com/status-im/react-native-status-keycard.git#v2.5.34":
|
"react-native-status-keycard@git+https://github.com/status-im/react-native-status-keycard.git#v2.5.35":
|
||||||
version "2.5.34"
|
version "2.5.35"
|
||||||
resolved "git+https://github.com/status-im/react-native-status-keycard.git#b9f242aa11afbb6a79c269459c48e32a6091176c"
|
resolved "git+https://github.com/status-im/react-native-status-keycard.git#8cf7cbff803b080b2069202ea6179703b8c69d2e"
|
||||||
|
|
||||||
react-native-svg@^9.8.4:
|
react-native-svg@^9.8.4:
|
||||||
version "9.13.6"
|
version "9.13.6"
|
||||||
|
|
Loading…
Reference in New Issue