]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/TrustCommand.java
Use isEmpty()
[signal-cli] / src / main / java / org / asamk / signal / commands / TrustCommand.java
1 package org.asamk.signal.commands;
2
3 import net.sourceforge.argparse4j.impl.Arguments;
4 import net.sourceforge.argparse4j.inf.MutuallyExclusiveGroup;
5 import net.sourceforge.argparse4j.inf.Namespace;
6 import net.sourceforge.argparse4j.inf.Subparser;
7
8 import org.asamk.signal.manager.Manager;
9 import org.asamk.signal.util.ErrorUtils;
10 import org.asamk.signal.util.Hex;
11 import org.whispersystems.signalservice.api.util.InvalidNumberException;
12
13 import java.util.Locale;
14
15 public class TrustCommand implements LocalCommand {
16
17 @Override
18 public void attachToSubparser(final Subparser subparser) {
19 subparser.addArgument("number")
20 .help("Specify the phone number, for which to set the trust.")
21 .required(true);
22 MutuallyExclusiveGroup mutTrust = subparser.addMutuallyExclusiveGroup();
23 mutTrust.addArgument("-a", "--trust-all-known-keys")
24 .help("Trust all known keys of this user, only use this for testing.")
25 .action(Arguments.storeTrue());
26 mutTrust.addArgument("-v", "--verified-safety-number", "--verified-fingerprint")
27 .help("Specify the safety number of the key, only use this option if you have verified the safety number.");
28 }
29
30 @Override
31 public int handleCommand(final Namespace ns, final Manager m) {
32 if (!m.isRegistered()) {
33 System.err.println("User is not registered.");
34 return 1;
35 }
36 String number = ns.getString("number");
37 if (ns.getBoolean("trust_all_known_keys")) {
38 boolean res = m.trustIdentityAllKeys(number);
39 if (!res) {
40 System.err.println("Failed to set the trust for this number, make sure the number is correct.");
41 return 1;
42 }
43 } else {
44 String safetyNumber = ns.getString("verified_safety_number");
45 if (safetyNumber != null) {
46 safetyNumber = safetyNumber.replaceAll(" ", "");
47 if (safetyNumber.length() == 66) {
48 byte[] fingerprintBytes;
49 try {
50 fingerprintBytes = Hex.toByteArray(safetyNumber.toLowerCase(Locale.ROOT));
51 } catch (Exception e) {
52 System.err.println("Failed to parse the fingerprint, make sure the fingerprint is a correctly encoded hex string without additional characters.");
53 return 1;
54 }
55 boolean res;
56 try {
57 res = m.trustIdentityVerified(number, fingerprintBytes);
58 } catch (InvalidNumberException e) {
59 ErrorUtils.handleInvalidNumberException(e);
60 return 1;
61 }
62 if (!res) {
63 System.err.println("Failed to set the trust for the fingerprint of this number, make sure the number and the fingerprint are correct.");
64 return 1;
65 }
66 } else if (safetyNumber.length() == 60) {
67 boolean res;
68 try {
69 res = m.trustIdentityVerifiedSafetyNumber(number, safetyNumber);
70 } catch (InvalidNumberException e) {
71 ErrorUtils.handleInvalidNumberException(e);
72 return 1;
73 }
74 if (!res) {
75 System.err.println("Failed to set the trust for the safety number of this phone number, make sure the phone number and the safety number are correct.");
76 return 1;
77 }
78 } else {
79 System.err.println("Safety number has invalid format, either specify the old hex fingerprint or the new safety number");
80 return 1;
81 }
82 } else {
83 System.err.println("You need to specify the fingerprint/safety number you have verified with -v SAFETY_NUMBER");
84 return 1;
85 }
86 }
87 return 0;
88 }
89 }