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 final URI deviceLinkUri
;
39 deviceLinkUri
= new URI(request
.deviceLinkUri());
40 } catch (URISyntaxException e
) {
41 throw new UserErrorException("Invalid device link uri.");
43 final var provisioningManager
= m
.getProvisioningManagerFor(deviceLinkUri
);
44 if (provisioningManager
== null) {
45 throw new UserErrorException("Unknown device link uri.");
48 var deviceName
= request
.deviceName();
49 if (deviceName
== null) {
54 number
= provisioningManager
.finishDeviceLink(deviceName
);
55 } catch (TimeoutException e
) {
56 throw new UserErrorException("Link request timed out, please try again.");
57 } catch (IOException e
) {
58 throw new IOErrorException("Link request error: " + e
.getMessage(), e
);
59 } catch (UserAlreadyExistsException e
) {
60 throw new UserErrorException("The user "
62 + " already exists\nDelete \""
64 + "\" before trying again.");
67 jsonWriter
.write(new JsonFinishLink(number
));
70 record FinishLinkParams(String deviceLinkUri
, String deviceName
) {}
72 private record JsonFinishLink(String number
) {}