1 package org
.asamk
.signal
.commands
;
3 import com
.fasterxml
.jackson
.core
.type
.TypeReference
;
5 import org
.asamk
.signal
.commands
.exceptions
.CommandException
;
6 import org
.asamk
.signal
.commands
.exceptions
.IOErrorException
;
7 import org
.asamk
.signal
.commands
.exceptions
.UserErrorException
;
8 import org
.asamk
.signal
.manager
.MultiAccountManager
;
9 import org
.asamk
.signal
.manager
.api
.UserAlreadyExistsException
;
10 import org
.asamk
.signal
.output
.JsonWriter
;
11 import org
.slf4j
.Logger
;
12 import org
.slf4j
.LoggerFactory
;
14 import java
.io
.IOException
;
16 import java
.net
.URISyntaxException
;
17 import java
.util
.concurrent
.TimeoutException
;
19 public class FinishLinkCommand
implements JsonRpcMultiCommand
<FinishLinkCommand
.FinishLinkParams
> {
21 private final static Logger logger
= LoggerFactory
.getLogger(FinishLinkCommand
.class);
24 public String
getName() {
29 public TypeReference
<FinishLinkParams
> getRequestType() {
30 return new TypeReference
<>() {};
34 public void handleCommand(
35 final FinishLinkParams request
, final MultiAccountManager m
, final JsonWriter jsonWriter
36 ) throws CommandException
{
37 if (request
.deviceLinkUri() == null) {
38 throw new UserErrorException("Missing deviceLinkUri.");
40 final URI deviceLinkUri
;
42 deviceLinkUri
= new URI(request
.deviceLinkUri());
43 } catch (URISyntaxException e
) {
44 throw new UserErrorException("Invalid device link uri.");
46 final var provisioningManager
= m
.getProvisioningManagerFor(deviceLinkUri
);
47 if (provisioningManager
== null) {
48 throw new UserErrorException("Unknown device link uri.");
51 var deviceName
= request
.deviceName();
52 if (deviceName
== null) {
57 number
= provisioningManager
.finishDeviceLink(deviceName
);
58 } catch (TimeoutException e
) {
59 throw new UserErrorException("Link request timed out, please try again.");
60 } catch (IOException e
) {
61 throw new IOErrorException("Link request error: "
64 + e
.getClass().getSimpleName()
66 } catch (UserAlreadyExistsException e
) {
67 throw new UserErrorException("The user "
69 + " already exists\nDelete \""
71 + "\" before trying again.");
74 jsonWriter
.write(new JsonFinishLink(number
));
77 public record FinishLinkParams(String deviceLinkUri
, String deviceName
) {}
79 private record JsonFinishLink(String number
) {}