1 package org
.asamk
.signal
.manager
.util
;
3 import org
.slf4j
.Logger
;
4 import org
.slf4j
.LoggerFactory
;
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
;
11 import java
.io
.BufferedInputStream
;
13 import java
.io
.FileInputStream
;
14 import java
.io
.IOException
;
15 import java
.io
.InputStream
;
16 import java
.net
.URLConnection
;
17 import java
.nio
.file
.Files
;
18 import java
.util
.Locale
;
22 private final static Logger logger
= LoggerFactory
.getLogger(Utils
.class);
24 public static String
getFileMimeType(File file
, String defaultMimeType
) throws IOException
{
25 var mime
= Files
.probeContentType(file
.toPath());
27 try (InputStream bufferedStream
= new BufferedInputStream(new FileInputStream(file
))) {
28 mime
= URLConnection
.guessContentTypeFromStream(bufferedStream
);
32 return defaultMimeType
;
37 public static StreamDetails
createStreamDetailsFromFile(File file
) throws IOException
{
38 InputStream stream
= new FileInputStream(file
);
39 final var size
= file
.length();
40 final var mime
= getFileMimeType(file
, "application/octet-stream");
41 return new StreamDetails(stream
, mime
, size
);
44 public static Fingerprint
computeSafetyNumber(
45 boolean isUuidCapable
,
46 SignalServiceAddress ownAddress
,
47 IdentityKey ownIdentityKey
,
48 SignalServiceAddress theirAddress
,
49 IdentityKey theirIdentityKey
56 // Version 2: UUID user
58 ownId
= ownAddress
.getAci().toByteArray();
59 theirId
= theirAddress
.getAci().toByteArray();
61 // Version 1: E164 user
63 if (!ownAddress
.getNumber().isPresent() || !theirAddress
.getNumber().isPresent()) {
66 ownId
= ownAddress
.getNumber().get().getBytes();
67 theirId
= theirAddress
.getNumber().get().getBytes();
70 return new NumericFingerprintGenerator(5200).createFor(version
,
77 public static Locale
getDefaultLocale() {
78 final var locale
= Locale
.getDefault();
83 Locale
.LanguageRange
.parse(locale
.getLanguage() + "-" + locale
.getCountry());
84 } catch (IllegalArgumentException e
) {
85 logger
.debug("Invalid locale, ignoring: {}", locale
);