]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/util/Utils.java
Add --delete-account argument to completely delete an account
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / util / Utils.java
1 package org.asamk.signal.manager.util;
2
3 import org.whispersystems.libsignal.IdentityKey;
4 import org.whispersystems.libsignal.fingerprint.NumericFingerprintGenerator;
5 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
6 import org.whispersystems.signalservice.api.util.StreamDetails;
7 import org.whispersystems.signalservice.api.util.UuidUtil;
8
9 import java.io.BufferedInputStream;
10 import java.io.File;
11 import java.io.FileInputStream;
12 import java.io.IOException;
13 import java.io.InputStream;
14 import java.net.URLConnection;
15 import java.nio.file.Files;
16
17 public class Utils {
18
19 public static String getFileMimeType(File file, String defaultMimeType) throws IOException {
20 var mime = Files.probeContentType(file.toPath());
21 if (mime == null) {
22 try (InputStream bufferedStream = new BufferedInputStream(new FileInputStream(file))) {
23 mime = URLConnection.guessContentTypeFromStream(bufferedStream);
24 }
25 }
26 if (mime == null) {
27 return defaultMimeType;
28 }
29 return mime;
30 }
31
32 public static StreamDetails createStreamDetailsFromFile(File file) throws IOException {
33 InputStream stream = new FileInputStream(file);
34 final var size = file.length();
35 final var mime = getFileMimeType(file, "application/octet-stream");
36 return new StreamDetails(stream, mime, size);
37 }
38
39 public static String computeSafetyNumber(
40 boolean isUuidCapable,
41 SignalServiceAddress ownAddress,
42 IdentityKey ownIdentityKey,
43 SignalServiceAddress theirAddress,
44 IdentityKey theirIdentityKey
45 ) {
46 int version;
47 byte[] ownId;
48 byte[] theirId;
49
50 if (isUuidCapable && ownAddress.getUuid().isPresent() && theirAddress.getUuid().isPresent()) {
51 // Version 2: UUID user
52 version = 2;
53 ownId = UuidUtil.toByteArray(ownAddress.getUuid().get());
54 theirId = UuidUtil.toByteArray(theirAddress.getUuid().get());
55 } else {
56 // Version 1: E164 user
57 version = 1;
58 if (!ownAddress.getNumber().isPresent() || !theirAddress.getNumber().isPresent()) {
59 return "INVALID ID";
60 }
61 ownId = ownAddress.getNumber().get().getBytes();
62 theirId = theirAddress.getNumber().get().getBytes();
63 }
64
65 var fingerprint = new NumericFingerprintGenerator(5200).createFor(version,
66 ownId,
67 ownIdentityKey,
68 theirId,
69 theirIdentityKey);
70 return fingerprint.getDisplayableFingerprint().getDisplayText();
71 }
72
73 public static SignalServiceAddress getSignalServiceAddressFromIdentifier(final String identifier) {
74 if (UuidUtil.isUuid(identifier)) {
75 return new SignalServiceAddress(UuidUtil.parseOrNull(identifier), null);
76 } else {
77 return new SignalServiceAddress(null, identifier);
78 }
79 }
80 }