- public String getDeviceLinkUri() throws TimeoutException, IOException {
- if (account == null) {
- createNewIdentity();
- }
- account.setPassword(KeyUtils.createPassword());
- accountManager = getSignalServiceAccountManager();
- String uuid = accountManager.getNewDeviceUuid();
-
- return Utils.createDeviceLinkUri(new Utils.DeviceLinkInfo(uuid, getIdentity().getPublicKey()));
- }
-
- public void finishDeviceLink(String deviceName) throws IOException, InvalidKeyException, TimeoutException, UserAlreadyExists {
- account.setSignalingKey(KeyUtils.createSignalingKey());
- SignalServiceAccountManager.NewDeviceRegistrationReturn ret = accountManager.finishNewDeviceRegistration(account.getSignalProtocolStore().getIdentityKeyPair(), account.getSignalingKey(), false, true, account.getSignalProtocolStore().getLocalRegistrationId(), deviceName);
-
- username = ret.getNumber();
- // TODO do this check before actually registering
- if (SignalAccount.userExists(dataPath, username)) {
- throw new UserAlreadyExists(username, SignalAccount.getFileName(dataPath, username));
- }
-
- // Create new account with the synced identity
- byte[] profileKeyBytes = ret.getProfileKey();
- ProfileKey profileKey;
- if (profileKeyBytes == null) {
- profileKey = KeyUtils.createProfileKey();
- } else {
- try {
- profileKey = new ProfileKey(profileKeyBytes);
- } catch (InvalidInputException e) {
- throw new IOException("Received invalid profileKey", e);
- }
- }
- account = SignalAccount.createLinkedAccount(dataPath, username, account.getPassword(), ret.getDeviceId(), ret.getIdentity(), account.getSignalProtocolStore().getLocalRegistrationId(), account.getSignalingKey(), profileKey);
-
- refreshPreKeys();
-
- requestSyncGroups();
- requestSyncContacts();
- requestSyncBlocked();
- requestSyncConfiguration();
-
- account.save();
- }
-