1 package org
.asamk
.signal
.manager
.util
;
3 import com
.fasterxml
.jackson
.databind
.JsonNode
;
5 import org
.whispersystems
.libsignal
.IdentityKey
;
6 import org
.whispersystems
.libsignal
.fingerprint
.Fingerprint
;
7 import org
.whispersystems
.libsignal
.fingerprint
.NumericFingerprintGenerator
;
8 import org
.whispersystems
.signalservice
.api
.push
.SignalServiceAddress
;
9 import org
.whispersystems
.signalservice
.api
.util
.StreamDetails
;
10 import org
.whispersystems
.signalservice
.api
.util
.UuidUtil
;
12 import java
.io
.BufferedInputStream
;
14 import java
.io
.FileInputStream
;
15 import java
.io
.IOException
;
16 import java
.io
.InputStream
;
17 import java
.io
.InvalidObjectException
;
18 import java
.net
.URLConnection
;
19 import java
.nio
.file
.Files
;
23 public static String
getFileMimeType(File file
, String defaultMimeType
) throws IOException
{
24 String mime
= Files
.probeContentType(file
.toPath());
26 try (InputStream bufferedStream
= new BufferedInputStream(new FileInputStream(file
))) {
27 mime
= URLConnection
.guessContentTypeFromStream(bufferedStream
);
31 return defaultMimeType
;
36 public static StreamDetails
createStreamDetailsFromFile(File file
) throws IOException
{
37 InputStream stream
= new FileInputStream(file
);
38 final long size
= file
.length();
39 final String mime
= getFileMimeType(file
, "application/octet-stream");
40 return new StreamDetails(stream
, mime
, size
);
43 public static String
computeSafetyNumber(
44 boolean isUuidCapable
,
45 SignalServiceAddress ownAddress
,
46 IdentityKey ownIdentityKey
,
47 SignalServiceAddress theirAddress
,
48 IdentityKey theirIdentityKey
54 if (isUuidCapable
&& ownAddress
.getUuid().isPresent() && theirAddress
.getUuid().isPresent()) {
55 // Version 2: UUID user
57 ownId
= UuidUtil
.toByteArray(ownAddress
.getUuid().get());
58 theirId
= UuidUtil
.toByteArray(theirAddress
.getUuid().get());
60 // Version 1: E164 user
62 if (!ownAddress
.getNumber().isPresent() || !theirAddress
.getNumber().isPresent()) {
65 ownId
= ownAddress
.getNumber().get().getBytes();
66 theirId
= theirAddress
.getNumber().get().getBytes();
69 Fingerprint fingerprint
= new NumericFingerprintGenerator(5200).createFor(version
,
74 return fingerprint
.getDisplayableFingerprint().getDisplayText();
77 public static SignalServiceAddress
getSignalServiceAddressFromIdentifier(final String identifier
) {
78 if (UuidUtil
.isUuid(identifier
)) {
79 return new SignalServiceAddress(UuidUtil
.parseOrNull(identifier
), null);
81 return new SignalServiceAddress(null, identifier
);
85 public static JsonNode
getNotNullNode(JsonNode parent
, String name
) throws InvalidObjectException
{
86 JsonNode node
= parent
.get(name
);
87 if (node
== null || node
.isNull()) {
88 throw new InvalidObjectException(String
.format("Incorrect file format: expected parameter %s not found ",