X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/62687d103fab1ade650b920008060c220361d581..5cccf521032954d7ad8e3f70e3cbef2ce1293e85:/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java index cfd17610..f80b91d6 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java @@ -7,7 +7,7 @@ import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.MultiAccountManager; import org.asamk.signal.manager.ProvisioningManager; import org.asamk.signal.manager.RegistrationManager; -import org.asamk.signal.manager.UserAlreadyExists; +import org.asamk.signal.manager.api.UserAlreadyExistsException; import org.asamk.signal.manager.api.CaptchaRequiredException; import org.asamk.signal.manager.api.IncorrectPinException; import org.asamk.signal.manager.api.PinLockedException; @@ -15,6 +15,7 @@ import org.freedesktop.dbus.DBusPath; import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; import java.nio.channels.OverlappingFileLockException; import java.util.List; import java.util.concurrent.TimeoutException; @@ -80,29 +81,57 @@ public class DbusSignalControlImpl implements org.asamk.SignalControl { registrationManager.verifyAccount(verificationCode, pin); } catch (OverlappingFileLockException e) { throw new SignalControl.Error.Failure("Account is already in use"); - } catch (IOException | PinLockedException | IncorrectPinException e) { + } catch (IOException e) { throw new SignalControl.Error.Failure(e.getClass().getSimpleName() + " " + e.getMessage()); + } catch (PinLockedException e) { + throw new Error.Failure( + "Verification failed! This number is locked with a pin. Hours remaining until reset: " + + (e.getTimeRemaining() / 1000 / 60 / 60)); + } catch (IncorrectPinException e) { + throw new Error.Failure("Verification failed! Invalid pin, tries remaining: " + e.getTriesRemaining()); } } @Override public String link(final String newDeviceName) throws Error.Failure { try { - final ProvisioningManager provisioningManager = c.getNewProvisioningManager(); - final URI deviceLinkUri = provisioningManager.getDeviceLinkUri(); - new Thread(() -> { + final URI deviceLinkUri = c.getNewProvisioningDeviceLinkUri(); + final var thread = new Thread(() -> { + final ProvisioningManager provisioningManager = c.getProvisioningManagerFor(deviceLinkUri); try { provisioningManager.finishDeviceLink(newDeviceName); - } catch (IOException | TimeoutException | UserAlreadyExists e) { + } catch (IOException | TimeoutException | UserAlreadyExistsException e) { e.printStackTrace(); } - }).start(); + }); + thread.setName("dbus-link"); + thread.start(); + return deviceLinkUri.toString(); + } catch (TimeoutException | IOException e) { + throw new SignalControl.Error.Failure(e.getClass().getSimpleName() + " " + e.getMessage()); + } + } + + @Override + public String startLink() throws Error.Failure { + try { + final URI deviceLinkUri = c.getNewProvisioningDeviceLinkUri(); return deviceLinkUri.toString(); } catch (TimeoutException | IOException e) { throw new SignalControl.Error.Failure(e.getClass().getSimpleName() + " " + e.getMessage()); } } + @Override + public String finishLink(String deviceLinkUri, final String newDeviceName) throws Error.Failure { + try { + final var provisioningManager = c.getProvisioningManagerFor(new URI(deviceLinkUri)); + return provisioningManager.finishDeviceLink(newDeviceName); + } catch (TimeoutException | IOException | UserAlreadyExistsException | URISyntaxException e) { + throw new SignalControl.Error.Failure(e.getClass().getSimpleName() + " " + e.getMessage()); + } + } + @Override public String version() { return BaseConfig.PROJECT_VERSION; @@ -112,4 +141,9 @@ public class DbusSignalControlImpl implements org.asamk.SignalControl { public List listAccounts() { return c.getAccountNumbers().stream().map(u -> new DBusPath(DbusConfig.getObjectPath(u))).toList(); } + + @Override + public DBusPath getAccount(final String number) { + return new DBusPath(DbusConfig.getObjectPath(number)); + } }