Commit Graph

23 Commits

Author SHA1 Message Date
Igor Sirotin f660be0daa
chore!: simplify local pairing API (#5643)
* chore!: switch to use CreateAccount, fix tests

* chore_: move GenerateInstallationID to multidevice

* chore!: clean up ReceiverConfig

* chore_: use DefaultKeystoreRelativePath

* chore_: cleanup

* fix_: import api

* chore_: lint fix

* chore_: remove unused import
2024-08-14 21:10:19 +01:00
frank f123e98179
feat: fallback pairing seed (#5614)
* feat(pairing)!: Add extra parameters and remove v2 compatibility

This commit includes the following changes:

I have added a flag to maintain 2.29 compatibility.

Breaking change in connection string

The local pairing code that was parsing the connection string had a few non-upgradable features:

It was strictly checking the number of parameters, throwing an error if the number was different. This made it impossible to add parameters to it without breaking.
It was strictly checking the version number. This made increasing the version number impossible as older client would just refuse to connect.
The code has been changed so that:

Two parameters have been added, installation-id and key-uid. Those are needed for the fallback flow.
I have also removed version from the payload, since it wasn't used.

This means that we don't support v1 anymore. V2 parsing is supported . Going forward there's a clear strategy on how to update the protocol (append parameters, don't change existing one).

https://www.youtube.com/watch?v=oyLBGkS5ICk Is a must watch video for understanding the strategy

Changed MessengerResponse to use internally a map of installations rather than an array (minor)
Just moving towards maps as arrays tend to lead to subtle bugs.

Moved pairing methods to messenger_pairing.go
Just moved some methods

Added 2 new methods for the fallback flow
FinishPairingThroughSeedPhraseProcess
https://github.com/status-im/status-go/pull/5567/files#diff-1ad620b07fa3bd5fbc96c9f459d88829938a162bf1aaf41c61dea6e38b488d54R29

EnableAndSyncInstallation

https://github.com/status-im/status-go/pull/5567/files#diff-1ad620b07fa3bd5fbc96c9f459d88829938a162bf1aaf41c61dea6e38b488d54R18

Flow for clients
Client A1 is logged in
Client A2 is logged out

Client A1 shows a QR code
Client A2 scans a QR code
If connection fails on A2, the user will be prompted to enter a seed phrase.
If the generated account matches the key-uid from the QR code, A2 should call FinishPairingThroughSeedPhraseProcess with the installation id passed in the QR code. This will send installation information over waku. The user should be shown its own installation id and prompted to check the other device.
Client A1 will receive new installation data through waku, if they are still on the qr code page, they should show a popup to the user showing the received installation id, and a way to Enable and Sync, which should call the EnableAndSyncInstallation endpoint. This should finish the fallback syncing flow.
Current issues
Currently I haven't tested that all the data is synced after finishing the flow. I see that the two devices are paired correctly, but for example the DisplayName is not changed on the receiving device. I haven't had time to look into it further.

* test_: add more test for connection string parser

* fix_: fix panic when parse old connection string

* test_: add comments for TestMessengerPairAfterSeedPhrase

* fix_: correct error description

* feat_:rename FinishPairingThroughSeedPhraseProcess to EnableInstallationAndPair

* fix_: delete leftover

* fix_: add UniqueKey method

* fix_: unify the response for InputConnectionStringForBootstrapping

* fix_: remove fields installationID and keyUID in GethStatusBackend

* fix_: rename messenger_pairing to messenger_pairing_and_syncing

---------

Co-authored-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2024-07-30 17:14:05 +08:00
frank 90b18d4f88 refactor_: set default node config values for frontend when doing local pair sync 2024-04-25 11:51:23 +08:00
Roman Volosovskyi aee111e5ab
[#4200] Avoid tx watching for addresses which were not exposed 2023-12-01 12:30:42 +01:00
osmaczko a584ab086a
Fix/timesource offline (#4309)
* fix: add missing callback cleanup in timesource

fixes: "panic: sync: negative WaitGroup counter"

part of: status-im/status-desktop#12691

* fix: ensure timesource.GetCurrentTime is non-blocking

closes: status-im/status-desktop#12691
2023-11-13 14:06:32 -05:00
frank 7ad5800a9a
use timesource(synced) to generate/validate server cert time (#4228)
* use timesource(synced) to generate/validate server cert time

* add debug log

* bump version
2023-11-07 09:51:15 +08:00
frank b3213172a7
Prevent Logged In Account Local Pairing / Syncing With Another Account (#4044)
* Prevent Logged In Account Local Pairing / Syncing With Another Account

* addressed feedback from @siddarthkay

* fixed `TestPairingThreeDevices`

* replace `prepareBackendWithAccount` with `prepareBackendWithoutAccount`
2023-09-21 08:32:16 +08:00
Igor Sirotin 5a8f1feea9
Local Pairing: connection string version 2 with sharing multiple server addresses (#3909)
* feat: network functions for local pairing (#3898)
2023-08-22 19:18:14 +03:00
Sale Djenic d05ce522f9 feat: transferring keystore files for selected keypair via local network
There is a desktop app feature where we need to transfer keystore files for selected
keypair/s only via local network using a QR code (of course, which are not migrated
to a keycard, otherwise we wouldn't need to do that).
2023-08-18 17:43:14 +02:00
Sale Djenic 413120e299 feat: local pairing - adding support for syncing from a profile which is migrated to a Keycard 2023-06-28 14:04:47 +02:00
Samuel Hawksby-Robinson 170ae0d455 Removed HandlerServer interface
closes #3370
2023-04-04 15:29:13 +01:00
Samuel Hawksby-Robinson 465afd0131 Refactored BasePayloadReceiver to handle Receive()
Additionally to allow this process flow I refactored RawMessagePayloadReceiver and InstallationPayloadHandler to use a dedicated Marshaller type. Also added a fix to struct extention functionality, we want to ignore the process if there is no public key because that will key encoding. Seems an unnecessary bug to have to handle when you know there is no key.
2023-04-04 11:56:40 +01:00
Samuel Hawksby-Robinson 44a1379fbe Removed redudant PayloadMounter types 2023-04-04 11:56:40 +01:00
frank bb6139aef1
add validation on config (#3350) 2023-03-29 23:51:01 +08:00
Samuel Hawksby-Robinson fae7e8dba5 Removed server mode from pairing 2023-03-24 17:53:29 +00:00
Samuel Hawksby-Robinson 231ded6a7b Added challenge middleware to handleSendInstallation 2023-03-24 16:47:43 +00:00
Samuel Hawksby-Robinson 4ec064ec9c Integrated ChallengeGiver into SenderServer 2023-03-24 16:47:43 +00:00
Samuel Hawksby-Robinson cc8552a782 Added main scafolding for ChallengeGiver 2023-03-24 16:47:43 +00:00
Samuel Hawksby-Robinson 7cd7430d31
Improved Local Pairing Separation of Concerns (#3248)
* Moved all configs into config.go

* Completed build out of new config structures

* Completed SenderClient process flow

* Completed sync data Mounter and client integration

* Completed installation data Mounter and client integration

* House keeping, small refactor to match conventions.

PayloadEncryptor is passed by value and used as a pointer to the instance value and not a shared pointer.

* Reintroduced explicit Mounter field type

* Completed ReceiverClient structs and flows

* Finished BaseClient function parity with old acc

* Integrated new Clients into tests

Solved some test breaks caused by encryptors sharing pointers to their managed payloads

* Built out SenderServer and ReceiverServer structs

With all associated functions and integrated with endpoints.

* Updated tests to handle new Server types

* Added docs and additional refinement

* Renamed some files to better match the content of those files

* Added json tags to config fields that were missing explicit tags.

* fix tests relating to payload locking

* Addressing feedback from @ilmotta

* Addressed feedback from @qfrank
2023-03-23 11:44:15 +00:00
frank 837bf2ca42
support local pairing after logged in as receiver; pair installation;(#3202) 2023-02-28 20:32:45 +08:00
frank e64091c779
support passing kdf and node config from receiver when local pairing (#3179) 2023-02-17 21:02:42 +08:00
Samuel Hawksby-Robinson 90d54b1a3d
Added timeout functionality to Servers (#3192)
* Added timeout functionality to servers

currently only possible on the pairnig serve

* Removed logging (like a mad man)

* handling linter erroring
2023-02-15 15:50:30 +00:00
frank ec7c0e9c7d
Sync all devices after initial pairing (#3047) 2023-01-06 20:21:14 +08:00