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 static final 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
,
36 final MultiAccountManager m
,
37 final JsonWriter jsonWriter
38 ) throws CommandException
{
39 if (request
.deviceLinkUri() == null) {
40 throw new UserErrorException("Missing deviceLinkUri.");
42 final URI deviceLinkUri
;
44 deviceLinkUri
= new URI(request
.deviceLinkUri());
45 } catch (URISyntaxException e
) {
46 throw new UserErrorException("Invalid device link uri.");
48 final var provisioningManager
= m
.getProvisioningManagerFor(deviceLinkUri
);
49 if (provisioningManager
== null) {
50 throw new UserErrorException("Unknown device link uri.");
53 var deviceName
= request
.deviceName();
54 if (deviceName
== null) {
59 number
= provisioningManager
.finishDeviceLink(deviceName
);
60 } catch (TimeoutException e
) {
61 throw new UserErrorException("Link request timed out, please try again.");
62 } catch (IOException e
) {
63 throw new IOErrorException("Link request error: "
66 + e
.getClass().getSimpleName()
68 } catch (UserAlreadyExistsException e
) {
69 throw new UserErrorException("The user "
71 + " already exists\nDelete \""
73 + "\" before trying again.");
76 jsonWriter
.write(new JsonFinishLink(number
));
79 public record FinishLinkParams(String deviceLinkUri
, String deviceName
) {}
81 private record JsonFinishLink(String number
) {}