Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: enable biometrics for standard-auth #17992

Merged
merged 5 commits into from
Dec 7, 2023
Merged

Conversation

J-Son89
Copy link
Contributor

@J-Son89 J-Son89 commented Nov 24, 2023

fixes: #17445

This pr adds biometrics for standard authentication -

https://www.figma.com/file/V6nlpAWIf2e1XU8RJ9yQPe/Syncing-for-Mobile?type=design&node-id=1074-118387&mode=design&t=XdGbtSuHsABYU9C7-0
Wallet:
https://www.figma.com/file/HKncH4wnDwZDAhc4AryK8Y/Wallet-for-Mobile?type=design&node-id=1741-374592&mode=design&t=DEQa5r3JJAPDGMKj-0

Currently this is used in the wallet to create an account and the syncing page to get a Sync code.

To test:

  • With Biometrics enabled-
    -- Create an account with biometrics enabled ->
    Go to new wallet, create a new account

-- Create a watch-only account with biometrics enabled
Go to new wallet, create add an address to watch.
Authorization is not needed but this stil should be tested for this pr.

-- Syncing, generate a new sync code.
Go to generate sync code page and generate

I also put in the error handling for when the biometrics fails multiple times and fallsback to password.

The same tests should also be run without biometrics enabled.

There are so many tests paths so let me know if I missed any 🙏

@J-Son89 J-Son89 marked this pull request as ready for review November 24, 2023 18:54
@J-Son89 J-Son89 requested a review from clauxx November 24, 2023 18:54
(colors/custom-color :danger 50)
(colors/custom-color :danger 60)
theme)}
:color (colors/resolve-color :danger theme)}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

simple refactor

{:on-enter-password on-enter-password
:button-icon-left auth-button-icon-left
:button-label auth-button-label}])}]))))))
(let [password-login (fn [{:keys [on-press-biometrics]}]
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved this to var for DRY purposes

:on-press-biometrics on-press-biometrics
:button-icon-left auth-button-icon-left
:button-label auth-button-label}])}]))
biometrics-login (fn [on-press-biometrics]
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved this to a var for functional purposes. LMK if anyone has a cleaner approach.
Basically this kicks off biometrics authentication, but in the event biometrics fails it will fallback to password login, however that password screen will have a button to retrigger biometrics authentication. So this function needs to pass itself to as an argument

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe I should leave a comment on it?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I think a comment would be nice.

It seems the reason for biometrics-login to be recursive is that we want to redispatch the event :show-bottom-sheet if biometrics fail, I think that's because we are executing on-close at the beggining of the biometrics-login fn.

So, what if we execute the on-close only when the user cancels or the login is successful?

I'm not familiar with this part of the code or UI flow, so I'm just suggesting.

@status-im-auto
Copy link
Member

status-im-auto commented Nov 24, 2023

Jenkins Builds

Click to see older builds (63)
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ b0bf7da #1 2023-11-24 19:00:25 ~6 min ios 📱ipa 📲
✔️ b0bf7da #1 2023-11-24 19:02:28 ~8 min android 🤖apk 📲
✔️ b0bf7da #1 2023-11-24 19:03:28 ~9 min android-e2e 🤖apk 📲
✔️ b0bf7da #1 2023-11-24 19:06:11 ~12 min tests 📄log
✔️ d647d3e #2 2023-11-24 19:15:21 ~8 min android-e2e 🤖apk 📲
✔️ d647d3e #2 2023-11-24 19:18:27 ~11 min ios 📱ipa 📲
✔️ d647d3e #2 2023-11-24 19:19:13 ~12 min android 🤖apk 📲
✔️ d647d3e #2 2023-11-24 19:19:46 ~13 min tests 📄log
✔️ 0f0c554 #3 2023-11-29 18:01:04 ~7 min android 🤖apk 📲
✔️ 0f0c554 #3 2023-11-29 18:01:48 ~8 min android-e2e 🤖apk 📲
✔️ 0f0c554 #3 2023-11-29 18:04:38 ~10 min tests 📄log
✔️ 0f0c554 #3 2023-11-29 18:08:34 ~14 min ios 📱ipa 📲
✔️ 4ee8b2b #4 2023-11-30 21:47:41 ~6 min android-e2e 🤖apk 📲
✔️ 4ee8b2b #4 2023-11-30 21:48:20 ~6 min android 🤖apk 📲
✔️ 4ee8b2b #4 2023-11-30 21:51:33 ~9 min tests 📄log
✔️ 4ee8b2b #4 2023-11-30 21:53:20 ~11 min ios 📱ipa 📲
✔️ 3d72746 #5 2023-11-30 22:17:39 ~6 min android 🤖apk 📲
✔️ 3d72746 #5 2023-11-30 22:17:40 ~6 min android-e2e 🤖apk 📲
✔️ 3d72746 #5 2023-11-30 22:21:48 ~10 min tests 📄log
✔️ 3d72746 #5 2023-11-30 22:23:33 ~12 min ios 📱ipa 📲
✔️ 564897e #6 2023-12-01 16:47:22 ~8 min android-e2e 🤖apk 📲
✔️ 564897e #6 2023-12-01 16:47:29 ~8 min android 🤖apk 📲
✔️ 564897e #6 2023-12-01 16:49:45 ~10 min tests 📄log
✔️ 564897e #6 2023-12-01 16:52:39 ~13 min ios 📱ipa 📲
✔️ 6edcca0 #7 2023-12-05 15:05:05 ~6 min android 🤖apk 📲
✔️ 6edcca0 #7 2023-12-05 15:06:35 ~7 min android-e2e 🤖apk 📲
✔️ 6edcca0 #7 2023-12-05 15:10:20 ~11 min tests 📄log
✔️ 6edcca0 #7 2023-12-05 15:11:43 ~13 min ios 📱ipa 📲
✔️ cfb8ec0 #8 2023-12-05 15:33:19 ~6 min android-e2e 🤖apk 📲
✔️ cfb8ec0 #8 2023-12-05 15:33:51 ~6 min ios 📱ipa 📲
✔️ c31dc11 #9 2023-12-05 15:40:56 ~6 min ios 📱ipa 📲
✔️ c31dc11 #9 2023-12-05 15:41:45 ~7 min android 🤖apk 📲
✔️ c31dc11 #9 2023-12-05 15:44:01 ~9 min android-e2e 🤖apk 📲
✔️ c31dc11 #9 2023-12-05 15:45:16 ~10 min tests 📄log
✔️ 4e5662f #10 2023-12-05 15:57:49 ~5 min android 🤖apk 📲
✔️ 4e5662f #10 2023-12-05 15:58:20 ~6 min ios 📱ipa 📲
✔️ 4e5662f #10 2023-12-05 16:00:33 ~8 min android-e2e 🤖apk 📲
✔️ 4e5662f #10 2023-12-05 16:03:13 ~11 min tests 📄log
✔️ d66e0a8 #11 2023-12-06 09:42:13 ~6 min android-e2e 🤖apk 📲
✔️ d66e0a8 #11 2023-12-06 09:42:20 ~6 min android 🤖apk 📲
✔️ d66e0a8 #11 2023-12-06 09:47:11 ~11 min tests 📄log
✔️ d66e0a8 #11 2023-12-06 09:47:47 ~11 min ios 📱ipa 📲
✔️ 85658fd #12 2023-12-06 10:14:06 ~6 min ios 📱ipa 📲
✔️ 85658fd #12 2023-12-06 10:14:16 ~6 min android-e2e 🤖apk 📲
✔️ 85658fd #12 2023-12-06 10:14:24 ~6 min android 🤖apk 📲
✔️ 85658fd #12 2023-12-06 10:17:42 ~9 min tests 📄log
ff26258 #13 2023-12-06 11:35:00 ~34 sec ios 📄log
ff26258 #13 2023-12-06 11:35:23 ~57 sec android 📄log
ff26258 #13 2023-12-06 11:36:13 ~1 min android-e2e 📄log
ff26258 #13 2023-12-06 11:37:44 ~3 min tests 📄log
b3f776e #14 2023-12-06 11:44:37 ~4 min tests 📄log
✔️ b3f776e #14 2023-12-06 11:47:08 ~6 min ios 📱ipa 📲
✔️ b3f776e #14 2023-12-06 11:47:49 ~7 min android 🤖apk 📲
✔️ b3f776e #14 2023-12-06 11:48:54 ~8 min android-e2e 🤖apk 📲
✔️ 239aee9 #15 2023-12-06 12:16:05 ~6 min android 🤖apk 📲
✔️ 239aee9 #15 2023-12-06 12:18:49 ~9 min android-e2e 🤖apk 📲
✔️ 239aee9 #15 2023-12-06 12:20:39 ~11 min tests 📄log
✔️ 239aee9 #15 2023-12-06 12:21:23 ~11 min ios 📱ipa 📲
✔️ c45029b #16 2023-12-06 12:36:18 ~6 min android-e2e 🤖apk 📲
✔️ c45029b #16 2023-12-06 12:36:24 ~6 min android 🤖apk 📲
✔️ c45029b #16 2023-12-06 12:41:28 ~11 min tests 📄log
✔️ c45029b #16 2023-12-06 12:42:28 ~12 min ios 📱ipa 📲
✔️ c45029b #17 2023-12-07 12:15:09 ~11 min ios 📱ipa 📲
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ a38a0c5 #17 2023-12-07 16:21:47 ~6 min android 🤖apk 📲
✔️ a38a0c5 #17 2023-12-07 16:21:50 ~6 min android-e2e 🤖apk 📲
✔️ a38a0c5 #18 2023-12-07 16:22:29 ~6 min ios 📱ipa 📲
✔️ a38a0c5 #17 2023-12-07 16:26:03 ~10 min tests 📄log
3a298a3 #18 2023-12-07 16:29:05 ~2 min tests 📄log
✔️ 3a298a3 #19 2023-12-07 16:32:49 ~6 min ios 📱ipa 📲
✔️ 3a298a3 #18 2023-12-07 16:33:37 ~7 min android-e2e 🤖apk 📲
✔️ 3a298a3 #18 2023-12-07 16:33:45 ~7 min android 🤖apk 📲
✔️ 3a298a3 #19 2023-12-07 16:43:12 ~11 min tests 📄log

@@ -34,7 +35,6 @@
:auth-button-icon-left auth-button-icon-left
:theme theme
:blur? blur?
:on-enter-password on-enter-password
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed on-enter-password in favor of generic -> on-auth-success

@@ -76,7 +76,6 @@
:dispatch [:onboarding-2/navigate-to-identifiers]}]
:db (-> db
(dissoc :profile/login)
(dissoc :auth-method)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does anyone know why we dissoc this here? 🤔 -> seems to me like we should keep it 🤷‍♂️

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We clean up the :profile/login and :auth-method keys after the successful generation of keys.

If we retain the keys, we will encounter this issue #15632.

@@ -156,7 +156,7 @@
(when (= auth-method keychain/auth-method-biometric)
{:biometric/authenticate
{:on-success #(rf/dispatch [:profile.login/biometric-success])
:on-faile #(rf/dispatch [:profile.login/biometric-auth-fail])}})))
:on-fail #(rf/dispatch [:profile.login/biometric-auth-fail])}})))
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo

@@ -105,7 +105,7 @@
(rf/dispatch [:syncing/update-role constants/local-pairing-role-sender])
(rf/dispatch [:hide-bottom-sheet])))]
(when-not (and error (string/blank? error))
(let [key-uid (get-in db [:profile/login :key-uid])
(let [key-uid (get-in db [:profile/profile :key-uid])
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure why we need both but :profile/login gets wiped and so this is persistent which is needed for bioetrics & password approach

@J-Son89 J-Son89 force-pushed the jc/standard-auth-biometrics branch from b0bf7da to d647d3e Compare November 24, 2023 19:06
@J-Son89 J-Son89 self-assigned this Nov 24, 2023
Copy link
Contributor

@ulisesmac ulisesmac left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! 👍 💯

:icon-only? true
:type :outline}
:i/face-id])
]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trailing ]

:label (i18n/label :t/profile-password)
:on-change-text on-change-password
:default-value (security/safe-unmask-data default-password)}]
[rn/view {:flex-direction :row}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing :style key for styles

:on-press-biometrics on-press-biometrics
:button-icon-left auth-button-icon-left
:button-label auth-button-label}])}]))
biometrics-login (fn [on-press-biometrics]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I think a comment would be nice.

It seems the reason for biometrics-login to be recursive is that we want to redispatch the event :show-bottom-sheet if biometrics fail, I think that's because we are executing on-close at the beggining of the biometrics-login fn.

So, what if we execute the on-close only when the user cancels or the login is successful?

I'm not familiar with this part of the code or UI flow, so I'm just suggesting.

:on-success (fn [response]
(rf/dispatch [:standard-auth/on-biometric-success
on-auth-success])
(log/info "response" response))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to log the success response? 😅

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems good to remove :)

@@ -76,7 +76,6 @@
:dispatch [:onboarding-2/navigate-to-identifiers]}]
:db (-> db
(dissoc :profile/login)
(dissoc :auth-method)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We clean up the :profile/login and :auth-method keys after the successful generation of keys.

If we retain the keys, we will encounter this issue #15632.

Copy link
Contributor

@ilmotta ilmotta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Worked well in my tests on Android 13 🚀

@smohamedjavid, @J-Son89, the library we use for biometrics https://github.com/naoufal/react-native-touch-id is as dead as a discarded draft. Have you heard of any discussion in the team to change this lib?

(biometrics-login biometrics-login)
(do
(reset-password)
(password-login {:on-press-biometrics nil})))))))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a bit unconventional in Clojure to pass nil explicitly.

;; Both return nil
(get {:on-press-biometrics nil} :on-press-biometrics) ; => nil
(get {} :on-press-biometrics) ; => nil

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure, I can change that 👍

@@ -34,7 +35,6 @@
:auth-button-icon-left auth-button-icon-left
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@J-Son89, probably something you realized at this point after having worked with the existing auth code. One of the reasons the code is convoluted is because I think we aren't using re-frame in the right spirit, i.e. we're breaking its architectural principles.

For instance, we call authorize/authorize in the UI layer, a function that calls functions with promises, hiding them behind callbacks, and which do further re-dispatches. Clearly, authorize/authorize should be decomposed as a pure event, and an effect that does the RN biometrics using the touch-id lib. The usual re-frame stuff.

I'm not suggesting changes in this PR because you are inheriting the debt and playing along, just something to keep in mind if you or somebody else touch auth code in a future PR.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's okay for me to make changes on this pr. it's a little unclear to me as to what details I should change here. If you want to pair quickly on this it would be great, or feel free to send a code snipet/highlight the issues and I can address 👍

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's beyond my capacity now @J-Son89. There are different approaches. Maybe we should first start by looking at the biometric/events.cljs file. It seems we can leverage some things there. For example, the app db already has :biometric/supported-type set, so we don't need to call (biometric/get-supported-type) again in standard-auth.authorize/authorize. This simplifies a little bit.

If we could pair on the refactors next week it would be great, but of course this PR doesn't need to wait.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure sure, sounds good to me! No pressure to do so. @clauxx was happy to work on this part of the codebase too so whenever you have capacity to take a call we can go through it and we can create the issues to work on it

(rf/reg-event-fx :standard-auth/on-biometric-success
(fn [{:keys [db]} [callback]]
(let [key-uid (get-in db [:profile/profile :key-uid])]
{:keychain/get-user-password [key-uid callback]})))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you want to follow the guidelines by the book, the effects map should only use :fx and :db.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure, whatever is best 👍

@J-Son89
Copy link
Contributor Author

J-Son89 commented Nov 27, 2023

Worked well in my tests on Android 13 🚀

@smohamedjavid, @J-Son89, the library we use for biometrics https://github.com/naoufal/react-native-touch-id is as dead as a discarded draft. Have you heard of any discussion in the team to change this lib?

thanks for testing @ilmotta 🙌 - I had not been involved in any discussions about dependencies etc, perhaps @clauxx knows something 🤔

@smohamedjavid
Copy link
Member

Worked well in my tests on Android 13 🚀

@smohamedjavid, @J-Son89, the library we use for biometrics https://github.com/naoufal/react-native-touch-id is as dead as a discarded draft. Have you heard of any discussion in the team to change this lib?

True that the library has stopped maintaining it. Last time, I believe we discussed it in Istanbul. I guess it's time we need to start updating the libraries. There are only a few biometrics authentication libraries, and most of it is not actively maintained. The best one among those is https://github.com/SelfLender/react-native-biometrics.

@J-Son89 J-Son89 force-pushed the jc/standard-auth-biometrics branch 2 times, most recently from 4ee8b2b to 3d72746 Compare November 30, 2023 22:10
@@ -31,13 +30,13 @@
(rf/sub [:profile/customization-color]))
syncing-results? (= :syncing-results @state/root-id)]
[rn/view {:style (style/buttons insets)}
[standard-auth/button
[quo/button
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jo-mut, @clauxx I changed this back to a normal button. The standard auth button is only needed in the case it should show a bottom sheet with a password/biometrics/keycard input to confirm the action. This just immediately dispatches the event so it's not needed 👍

@J-Son89 J-Son89 force-pushed the jc/standard-auth-biometrics branch 3 times, most recently from 6edcca0 to cfb8ec0 Compare December 5, 2023 15:26
@status-im-auto
Copy link
Member

79% of end-end tests have passed

Total executed tests: 48
Failed tests: 4
Expected to fail tests: 6
Passed tests: 38
IDs of failed tests: 702786,702948,703133,703495 
IDs of expected to fail tests: 702894,702731,702808,702846,702732,703503 

Failed tests (4)

Click to expand
  • Rerun failed tests

  • Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_mentions_push_notification, id: 702786

    Device 2: Getting PN by 'user_2'
    Device 2: Looking for a message by text: user_2

    critical/chats/test_public_chat_browsing.py:902: in test_community_mentions_push_notification
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Can not edit a message with a mention
    E    Edited message is not shown correctly for the (receiver) admin
    



    Device sessions

    2. test_community_hashtag_links_to_community_channels, id: 702948

    Device 2: Find Text by xpath: //android.view.ViewGroup[@content-desc='chat-item']//android.widget.TextView[contains(@text,'#cats')]
    Device 2: Looking for a message by text: it is just a message text

    critical/chats/test_public_chat_browsing.py:1046: in test_community_hashtag_links_to_community_channels
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Receiver was not navigated to the cats channel
    E    Sender was not navigated to the cats channel
    



    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_mute_chat, id: 703495

    Device 2: Click until ChatMessageInput by accessibility id: chat-message-input will be presented
    Device 2: Looking for a message by text: Chat is unmuted now

    critical/chats/test_group_chat.py:487: in test_group_chat_mute_chat
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Message text 'Text message in the muted chat' is not shown in chat preview after mute
    E    Message 'Text message in the muted chat' is not shown in chat for member_1 after mute
    



    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_restore_multiaccount_with_waku_backup_remove_switch, id: 703133

    Device 1: Find Button by accessibility id: show-profiles
    Device 1: Tap on found: Button

    critical/chats/test_public_chat_browsing.py:274: in test_restore_multiaccount_with_waku_backup_remove_switch
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Incorrect contacts number restored: 3 instead of 2
    



    Device sessions

    Expected to fail tests (6)

    Click to expand

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_pin_messages, id: 702731

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Pin feature is in development]]

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_contact_block_unblock_offline, id: 702894

    Device 1: Find ProfileSendMessageButton by accessibility id: Chat-item-button
    Device 1: Sending message 'piy'

    critical/chats/test_public_chat_browsing.py:741: in test_community_contact_block_unblock_offline
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Chat with unblocked user was not enabled after 1 minute 
    

    [[Message can be missed after unblock: https://github.com//issues/16873]]

    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_offline_pn, id: 702808

    Device 3: Looking for a message by text: message from old member
    Device 3: Looking for a message by text: message from new member

    critical/chats/test_group_chat.py:323: in test_group_chat_offline_pn
        self.errors.verify_no_errors()
    base_test_case.py:191: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Messages PN was not fetched from offline 
    

    [[Data delivery issue]]

    Device sessions

    2. test_group_chat_pin_messages, id: 702732

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Pin feature is in development]]

    Class TestCommunityOneDeviceMerged:

    1. test_community_navigate_to_channel_when_relaunch, id: 702846

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Issue #18075]]

    2. test_community_discovery, id: 703503

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Curated communities not loading, https://github.com//issues/17852]]

    Passed tests (38)

    Click to expand

    Class TestActivityMultipleDevicePRTwo:

    1. test_activity_center_admin_notification_accept_swipe, id: 702958
    Device sessions

    2. test_activity_center_mentions, id: 702957
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_edit_message, id: 702855
    Device sessions

    2. test_1_1_chat_message_reaction, id: 702730
    Device sessions

    3. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745
    Device sessions

    4. test_1_1_chat_text_message_delete_push_disappear, id: 702733
    Device sessions

    5. test_1_1_chat_push_emoji, id: 702813
    Device sessions

    6. test_1_1_chat_emoji_send_reply_and_open_link, id: 702782
    Device sessions

    7. test_1_1_chat_send_image_save_and_share, id: 703391
    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_emoji_send_copy_paste_reply, id: 702840
    Device sessions

    2. test_community_mark_all_messages_as_read, id: 703086
    Device sessions

    3. test_community_links_with_previews_github_youtube_twitter_gif_send_enable, id: 702844
    Device sessions

    4. test_community_unread_messages_badge, id: 702841
    Device sessions

    5. test_community_message_delete, id: 702839
    Device sessions

    6. test_community_message_send_check_timestamps_sender_username, id: 702838
    Device sessions

    7. test_community_one_image_send_reply, id: 702859
    Device sessions

    8. test_community_message_edit, id: 702843
    Device sessions

    9. test_community_several_images_send_reply, id: 703194
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUiTwo:

    1. test_1_1_chat_mute_chat, id: 703496
    Device sessions

    2. test_1_1_chat_is_shown_message_sent_delivered_from_offline, id: 702783
    Device sessions

    3. test_1_1_chat_delete_via_long_press_relogin, id: 702784
    Device sessions

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_leave, id: 702845
    Device sessions

    2. test_community_markdown_support, id: 702809
    Device sessions

    3. test_community_join_when_node_owner_offline, id: 703629
    Device sessions

    Class TestActivityMultipleDevicePR:

    1. test_activity_center_reply_read_unread_delete_filter_swipe, id: 702947
    Device sessions

    2. test_navigation_jump_to, id: 702936
    Device sessions

    Class TestActivityCenterContactRequestMultipleDevicePR:

    1. test_activity_center_contact_request_accept_swipe_mark_all_as_read, id: 702851
    Device sessions

    2. test_activity_center_contact_request_decline, id: 702850
    Device sessions

    3. test_add_contact_field_validation, id: 702777
    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_reactions, id: 703202
    Device sessions

    2. test_group_chat_join_send_text_messages_push, id: 702807
    Device sessions

    3. test_group_chat_send_image_save_and_share, id: 703297
    Device sessions

    Class TestDeepLinksOneDevice:

    1. test_links_deep_links, id: 702775
    Device sessions

    2. test_links_open_universal_links_from_chat, id: 704613
    Device sessions

    3. test_links_open_universal_links_from_other_apps, id: 704614
    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_community_copy_and_paste_message_in_chat_input, id: 702742
    Device sessions

    2. test_community_undo_delete_message, id: 702869
    Device sessions

    3. test_community_mute_community_and_channel, id: 703382
    Device sessions

    @churik
    Copy link
    Member

    churik commented Dec 6, 2023

    @J-Son89 is it still not ready, right? Ping me when the PR is ready.

    @J-Son89
    Copy link
    Contributor Author

    J-Son89 commented Dec 6, 2023

    Sorry @churik - not yet I added then removed the label

    @J-Son89 J-Son89 force-pushed the jc/standard-auth-biometrics branch from b3f776e to 239aee9 Compare December 6, 2023 12:09
    @J-Son89
    Copy link
    Contributor Author

    J-Son89 commented Dec 6, 2023

    @churik - now it is ready for QA :)

    @churik
    Copy link
    Member

    churik commented Dec 7, 2023

    @J-Son89 there is still one flow with enter password:
    IMAGE 2023-12-07 15:32:33
    Can you please enable standard-auth there?

    @J-Son89
    Copy link
    Contributor Author

    J-Son89 commented Dec 7, 2023

    @J-Son89 there is still one flow with enter password: IMAGE 2023-12-07 15:32:33 Can you please enable standard-auth there?

    Hi @churik - I would like to add it there however afaik this is being worked on currently for the sharing address feature and so I figured there is no need to add this as part of this pr as it will be update very soon with the correct approach (which behaves slightly different to standard auth as it has the select address parts.)
    @BalogunofAfrica was asking about this recently too.
    cc @FFFra, @ilmotta, @ajayesivan - can one of you confirm this

    @churik
    Copy link
    Member

    churik commented Dec 7, 2023

    Ok, I will re-check that this flow include standard-auth when it is ready.
    So far works amazing!
    Tried with Face ID, Touch ID, without biometric authentication, logging out and erasing fingerprinnts - no issues.

    All mentioned flows are checked on both devices.

    Also, I believe that face-id and touch-id should be different (on screenshot enabled biometric-auth is touch-id), but I believe it is part of the other PR.
    IMAGE 2023-12-07 16:52:45

    PR can be merged, thank you for your work!

    @J-Son89
    Copy link
    Contributor Author

    J-Son89 commented Dec 7, 2023

    awesome, thanks @churik! :)

    @J-Son89 J-Son89 force-pushed the jc/standard-auth-biometrics branch from c45029b to a38a0c5 Compare December 7, 2023 16:15
    @J-Son89 J-Son89 force-pushed the jc/standard-auth-biometrics branch from a38a0c5 to 3a298a3 Compare December 7, 2023 16:26
    @J-Son89 J-Son89 merged commit 55a99da into develop Dec 7, 2023
    6 checks passed
    @J-Son89 J-Son89 deleted the jc/standard-auth-biometrics branch December 7, 2023 16:44
    @ajayesivan
    Copy link
    Contributor

    ajayesivan commented Dec 8, 2023

    @J-Son89, correct. We are currently working on the new "share addresses" flow, which will replace the current request to join flow and is planned for the next release (1.27). Therefore, I believe there is no need to update the old flow.

    cc: @churik

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    Archived in project
    Archived in project
    Development

    Successfully merging this pull request may close these issues.

    Implement Biometric variant as part of the standard authenticion
    8 participants