add change PUK functionality

Signed-off-by: Michele Balistreri <michele@bitgamma.com>
This commit is contained in:
Michele Balistreri 2021-04-09 11:56:28 +03:00
parent d1016669bb
commit eea5b4eb0f
No known key found for this signature in database
GPG Key ID: E9567DA33A4F791A
12 changed files with 142 additions and 20 deletions

View File

@ -61,7 +61,7 @@
"react-native-screens": "^2.10.1",
"react-native-shake": "^3.3.1",
"react-native-splash-screen": "^3.2.0",
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.5.33",
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.5.34",
"react-native-svg": "^9.8.4",
"react-native-touch-id": "^4.4.1",
"react-native-webview": "git+https://github.com/status-im/react-native-webview.git#v10.9.2",

View File

@ -238,6 +238,24 @@
[:keycard.callback/on-change-pin-error
(error-object->map response)]))})))
(defn change-puk [args]
(log/debug "[keycard] change-puk")
(keycard/change-puk
card
(merge
args
{:on-success
(fn [response]
(log/debug "[keycard response succ] change-puk")
(re-frame/dispatch
[:keycard.callback/on-change-puk-success response]))
:on-failure
(fn [response]
(log/debug "[keycard response fail] change-puk")
(re-frame/dispatch
[:keycard.callback/on-change-pin-error
(error-object->map response)]))})))
(defn unpair [args]
(log/debug "[keycard] unpair")
(keycard/unpair

View File

@ -7,23 +7,27 @@
[status-im.keycard.common :as common]
[status-im.keycard.login :as keycard.login]))
(fx/defn change-pin-pressed
{:events [:keycard-settings.ui/change-pin-pressed]}
[{:keys [db] :as cofx}]
(fx/defn change-credentials-pressed
{:events [:keycard-settings.ui/change-credentials-pressed]}
[{:keys [db] :as cofx} changing]
(let [pin-retry-counter (get-in db [:keycard :application-info :pin-retry-counter])
enter-step (if (zero? pin-retry-counter) :puk :current)]
(if (= enter-step :puk)
(keycard.login/reset-pin cofx)
(fx/merge cofx
{:db
(assoc-in db [:keycard :pin] {:enter-step enter-step
:current []
:puk []
:original []
:confirmation []
:status nil
:error-label nil
:on-verified :keycard/proceed-to-change-pin})}
(assoc-in db [:keycard :pin] {:enter-step enter-step
:current []
:puk []
:original []
:confirmation []
:puk-original []
:puk-confirmation []
:status nil
:error-label nil
:on-verified (case changing
:pin :keycard/proceed-to-change-pin
:puk :keycard/proceed-to-change-puk)})}
(common/navigate-to-enter-pin-screen)))))
(fx/defn proceed-to-change-pin
@ -35,6 +39,15 @@
(assoc-in [:keycard :pin :status] nil))}
(navigation/navigate-to-cofx :enter-pin-settings nil)))
(fx/defn proceed-to-change-puk
{:events [:keycard/proceed-to-change-puk]}
[{:keys [db] :as cofx}]
(fx/merge cofx
{:db (-> db
(assoc-in [:keycard :pin :enter-step] :puk-original)
(assoc-in [:keycard :pin :status] nil))}
(navigation/navigate-to-cofx :enter-pin-settings nil)))
(fx/defn discard-pin-change
{:events [::on-cancel]}
[{:keys [db] :as cofx}]
@ -71,6 +84,25 @@
{:new-pin new-pin
:current-pin current-pin}})))}))))
(fx/defn change-puk
{:events [:keycard/change-puk]}
[{:keys [db] :as cofx}]
(common/show-connection-sheet
cofx
{:sheet-options {:on-cancel [::on-cancel]}
:on-card-connected :keycard/change-puk
:handler
(fn [{:keys [db] :as cofx}]
(let [puk (common/vector->string
(get-in db [:keycard :pin :puk-original]))
pin (common/vector->string
(get-in db [:keycard :pin :current]))]
(fx/merge
cofx
{:db (assoc-in db [:keycard :pin :status] :verifying)
:keycard/change-puk {:puk puk
:pin pin}})))}))
(fx/defn on-change-pin-success
{:events [:keycard.callback/on-change-pin-success]}
[{:keys [db] :as cofx}]
@ -90,6 +122,19 @@
(when (:multiaccounts/login db)
(common/get-keys-from-keycard)))))
(fx/defn on-change-puk-success
{:events [:keycard.callback/on-change-puk-success]}
[{:keys [db] :as cofx}]
(fx/merge cofx
{:db (assoc-in db [:keycard :pin] {:status nil
:puk-original []
:puk-confirmation []
:error-label nil})
:utils/show-popup {:title ""
:content (i18n/label :t/puk-changed)}}
(common/hide-connection-sheet)
(navigation/navigate-to-cofx :keycard-settings nil)))
(fx/defn on-change-pin-error
{:events [:keycard.callback/on-change-pin-error]}
[{:keys [db] :as cofx} error]

View File

@ -135,6 +135,9 @@
(defn- proceed-to-pin-confirmation [fx]
(assoc-in fx [:db :keycard :pin :enter-step] :confirmation))
(defn- proceed-to-change-puk-confirmation [fx]
(assoc-in fx [:db :keycard :pin :enter-step] :puk-confirmation))
(defn- proceed-to-pin-reset-confirmation [fx]
(-> fx
(update-in [:db :keycard :pin] dissoc :reset-confirmation)
@ -289,7 +292,7 @@
[{:keys [db] :as cofx} number enter-step]
(log/debug "update-pin" enter-step)
(let [numbers-entered (count (get-in db [:keycard :pin enter-step]))
need-update? (if (= enter-step :puk)
need-update? (if (or (= enter-step :puk) (= enter-step :puk-original) (= enter-step :puk-confirmation))
(< numbers-entered puk-code-length)
(< numbers-entered pin-code-length))]
(fx/merge cofx
@ -307,6 +310,13 @@
:original []
:confirmation []}))
(defn- puk-enter-error [fx error-label]
(update-in fx [:db :keycard :pin] merge {:status :error
:error-label error-label
:enter-step :puk-original
:puk-original []
:puk-confirmation []}))
(defn- pin-reset-error [fx error-label]
(update-in fx [:db :keycard :pin] merge {:status :error
:error-label error-label
@ -375,6 +385,21 @@
(get-in db [:keycard :pin :confirmation])))
(pin-enter-error :t/pin-mismatch)
(and (= enter-step :puk-original)
(= puk-code-length numbers-entered))
(proceed-to-change-puk-confirmation)
(and (= enter-step :puk-confirmation)
(= (get-in db [:keycard :pin :puk-original])
(get-in db [:keycard :pin :puk-confirmation])))
(change-pin/change-puk)
(and (= enter-step :puk-confirmation)
(= puk-code-length numbers-entered)
(not= (get-in db [:keycard :pin :puk-original])
(get-in db [:keycard :pin :puk-confirmation])))
(puk-enter-error :t/puk-mismatch)
(= enter-step :reset)
(proceed-to-pin-reset-confirmation)

View File

@ -107,6 +107,10 @@
:keycard/change-pin
card/change-pin)
(re-frame/reg-fx
:keycard/change-puk
card/change-puk)
(re-frame/reg-fx
:keycard/unpair
card/unpair)

View File

@ -23,6 +23,7 @@
(unblock-pin [this args])
(verify-pin [this args])
(change-pin [this args])
(change-puk [this args])
(unpair [this args])
(delete [this args])
(remove-key [this args])

View File

@ -170,6 +170,14 @@
(then on-success)
(catch on-failure))))
(defn change-puk
[{:keys [pin puk on-success on-failure]}]
(when (and pin puk)
(.. status-keycard
(changePUK pin puk)
(then on-success)
(catch on-failure))))
(defn unpair
[{:keys [pin on-success on-failure]}]
(when (and pin)
@ -315,6 +323,8 @@
(verify-pin args))
(keycard/change-pin [this args]
(change-pin args))
(keycard/change-puk [this args]
(change-puk args))
(keycard/unpair [this args]
(unpair args))
(keycard/delete [this args]

View File

@ -259,6 +259,8 @@
(defn change-pin [args]
(log/warn "change-pin not implemented" args))
(defn change-puk [args]
(log/warn "change-puk not implemented" args))
(defn unpair [args]
(log/warn "unpair not implemented" args))
(defn delete [args]
@ -479,6 +481,9 @@
(keycard/change-pin [this args]
(log/debug "simulated card change-pin")
(change-pin args))
(keycard/change-puk [this args]
(log/debug "simulated card change-puk")
(change-puk args))
(keycard/unpair [this args]
(log/debug "simulated card unpair")
(unpair args))

View File

@ -181,7 +181,7 @@
retry-counter small-screen? save-password-checkbox?]}]
(let [enabled? (and (not= status :verifying)
(not @!error?))
puk? (= step :puk)]
puk? (or (= step :puk) (= step :puk-original) (= step :puk-confirmation))]
[react/scroll-view
[react/view styles/pin-container
[react/view (styles/center-container title-label)
@ -261,12 +261,16 @@
:import-multiaccount :t/current-pin
:original :t/create-a-pin
:confirmation :t/repeat-pin
:puk-original :t/create-a-puk
:puk-confirmation :t/repeat-puk
:t/current-pin)
:description-label (case step
:current :t/current-pin-description
:sign :t/current-pin-description
:import-multiaccount :t/current-pin-description
:login :t/login-pin-description
:puk-original :t/new-puk-description
:puk-confirmation :t/new-puk-description
:t/new-pin-description)
:step step
:status status

View File

@ -92,14 +92,19 @@
[quo/list-item {:icon :main-icons/add
:size :small
:title (i18n/label :t/change-pin)
:on-press #(re-frame/dispatch [:keycard-settings.ui/change-pin-pressed])}]
;; TODO(rasom): uncomment this when unpairing will be enabled
;; https://github.com/status-im/status-react/issues/9227
:on-press #(re-frame/dispatch [:keycard-settings.ui/change-credentials-pressed :pin])}]
[quo/list-item {:icon :main-icons/security
:size :small
:title (i18n/label :t/change-puk)
:accessibility-label "change-puk"
:on-press #(re-frame/dispatch [:keycard-settings.ui/change-credentials-pressed :puk])}]
[quo/list-item {:icon :main-icons/keycard
:size :small
:title (i18n/label :t/keycard-backup)
:accessibility-label "create-backup-keycard"
:on-press #(re-frame/dispatch [:keycard-settings.ui/backup-card-pressed])}]
;; TODO(rasom): uncomment this when unpairing will be enabled
;; https://github.com/status-im/status-react/issues/9227
#_[quo/list-item {:icon :main-icons/close
:size :small
:title (i18n/label :t/unpair-card)

View File

@ -120,6 +120,7 @@
"change-passcode": "Change Passcode",
"change-password": "Change Password",
"change-pin": "Change 6-digit passcode",
"change-puk": "Change 12-digit PUK",
"changed-amount-warning": "Amount was changed from {{old}} to {{new}}",
"changed-asset-warning": "Asset was changed from {{old}} to {{new}}",
"chaos-mode": "Chaos mode",
@ -237,6 +238,7 @@
"counter-99-plus": "99+",
"create": "Create",
"create-a-pin": "Create a 6-digit passcode",
"create-a-puk": "Create a 12-digit PUK",
"create-group-chat": "Create group chat",
"create-multiaccount": "Generate keys",
"create-new-key": "Get new keys",
@ -878,6 +880,7 @@
"new-group-chat": "New group chat",
"new-network": "New network",
"new-pin-description": "Enter new 6-digit passcode",
"new-puk-description": "Enter new 12-digit PUK",
"new-public-group-chat": "Join public chat",
"next": "Next",
"no": "No",
@ -968,6 +971,7 @@
"phone-e164": "International 1",
"photos-access-error": "To grant the required photos permission, please go to your system settings and make sure that Status > Photos is selected.",
"pin-changed": "6-digit passcode has been changed",
"puk-changed": "12-digit PUK has been changed",
"pin-code": "6-digit passcode",
"pin-mismatch": "Wrong passcode",
"pin-retries-left": "{{number}} attemps left",
@ -1027,6 +1031,7 @@
"remove-token": "Remove token",
"removed": "removed",
"repeat-pin": "Repeat new 6-digit passcode",
"repeat-puk": "Repeat new 12-digit PUK",
"report-bug-email-template": "1. Issue Description\n(Describe the feature you would like, or briefly summarise the bug and what you did, what you expected to happen, and what actually happens. Sections below)\n\n\n2. Steps to reproduce\n(Describe how we can replicate the bug step by step.)\n-Open Status\n-...\n-Step 3, etc.\n\n\n3. Expected behavior\n(Describe what you expected to happen.)\n\n\n4. Actual behavior\n(Describe what actually happened.)\n\n\n5. Attach screenshots that can demo the problem, please\n",
"request-transaction": "Request transaction",
"required-field": "Required field",

View File

@ -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"
integrity sha512-Ls9qiNZzW/OLFoI25wfjjAcrf2DZ975hn2vr6U9gyuxi2nooVbzQeFoQS5vQcbCt9QX5NY8ASEEAtlLdIa6KVg==
"react-native-status-keycard@git+https://github.com/status-im/react-native-status-keycard.git#v2.5.33":
version "2.5.33"
resolved "git+https://github.com/status-im/react-native-status-keycard.git#d1098e969a1007919134e210781bdc57222bf8d3"
"react-native-status-keycard@git+https://github.com/status-im/react-native-status-keycard.git#v2.5.34":
version "2.5.34"
resolved "git+https://github.com/status-im/react-native-status-keycard.git#b9f242aa11afbb6a79c269459c48e32a6091176c"
react-native-svg@^9.8.4:
version "9.13.6"