]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/api/StickerPackUrl.java
Update libsignal-service-java
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / api / StickerPackUrl.java
1 package org.asamk.signal.manager.api;
2
3 import org.asamk.signal.manager.util.Utils;
4 import org.whispersystems.signalservice.internal.util.Hex;
5
6 import java.io.IOException;
7 import java.net.URI;
8 import java.net.URISyntaxException;
9 import java.net.URLEncoder;
10 import java.nio.charset.StandardCharsets;
11
12 import static org.whispersystems.signalservice.internal.util.Util.isEmpty;
13
14 public record StickerPackUrl(StickerPackId packId, byte[] packKey) {
15
16 /**
17 * @throws InvalidStickerPackLinkException If url cannot be parsed.
18 */
19 public static StickerPackUrl fromUri(URI uri) throws InvalidStickerPackLinkException {
20 final var rawQuery = uri.getRawFragment();
21 if (isEmpty(rawQuery)) {
22 throw new InvalidStickerPackLinkException("Invalid sticker pack uri");
23 }
24
25 var query = Utils.getQueryMap(rawQuery);
26 var packIdString = query.get("pack_id");
27 var packKeyString = query.get("pack_key");
28
29 if (isEmpty(packIdString) || isEmpty(packKeyString)) {
30 throw new InvalidStickerPackLinkException("Incomplete sticker pack uri");
31 }
32
33 StickerPackId packId;
34 try {
35 packId = StickerPackId.deserialize(Hex.fromStringCondensed(packIdString));
36 } catch (IOException e) {
37 throw new InvalidStickerPackLinkException("Invalid sticker pack", e);
38 }
39 final byte[] packKey;
40 try {
41 packKey = Hex.fromStringCondensed(packKeyString);
42 } catch (IOException e) {
43 throw new InvalidStickerPackLinkException("Invalid sticker pack uri", e);
44 }
45 return new StickerPackUrl(packId, packKey);
46 }
47
48 public URI getUrl() {
49 try {
50 return new URI("https",
51 "signal.art",
52 "/addstickers/",
53 "pack_id="
54 + URLEncoder.encode(Hex.toStringCondensed(packId.serialize()), StandardCharsets.UTF_8)
55 + "&pack_key="
56 + URLEncoder.encode(Hex.toStringCondensed(packKey), StandardCharsets.UTF_8));
57 } catch (URISyntaxException e) {
58 throw new AssertionError(e);
59 }
60 }
61
62 public static final class InvalidStickerPackLinkException extends Exception {
63
64 public InvalidStickerPackLinkException(String message) {
65 super(message);
66 }
67
68 public InvalidStickerPackLinkException(final String message, final Throwable cause) {
69 super(message, cause);
70 }
71 }
72 }