]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/api/StickerPackUrl.java
Bump version to 0.12.2
[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 final class StickerPackUrl {
15
16 private final StickerPackId packId;
17 private final byte[] packKey;
18
19 /**
20 * @throws InvalidStickerPackLinkException If url cannot be parsed.
21 */
22 public static StickerPackUrl fromUri(URI uri) throws InvalidStickerPackLinkException {
23 final var rawQuery = uri.getRawFragment();
24 if (isEmpty(rawQuery)) {
25 throw new InvalidStickerPackLinkException("Invalid sticker pack uri");
26 }
27
28 var query = Utils.getQueryMap(rawQuery);
29 var packIdString = query.get("pack_id");
30 var packKeyString = query.get("pack_key");
31
32 if (isEmpty(packIdString) || isEmpty(packKeyString)) {
33 throw new InvalidStickerPackLinkException("Incomplete sticker pack uri");
34 }
35
36 StickerPackId packId;
37 try {
38 packId = StickerPackId.deserialize(Hex.fromStringCondensed(packIdString));
39 } catch (IOException e) {
40 throw new InvalidStickerPackLinkException("Invalid sticker pack", e);
41 }
42 final byte[] packKey;
43 try {
44 packKey = Hex.fromStringCondensed(packKeyString);
45 } catch (IOException e) {
46 throw new InvalidStickerPackLinkException("Invalid sticker pack uri", e);
47 }
48 return new StickerPackUrl(packId, packKey);
49 }
50
51 public StickerPackUrl(final StickerPackId packId, final byte[] packKey) {
52 this.packId = packId;
53 this.packKey = packKey;
54 }
55
56 public URI getUrl() {
57 try {
58 return new URI("https",
59 "signal.art",
60 "/addstickers/",
61 "pack_id="
62 + URLEncoder.encode(Hex.toStringCondensed(packId.serialize()), StandardCharsets.UTF_8)
63 + "&pack_key="
64 + URLEncoder.encode(Hex.toStringCondensed(packKey), StandardCharsets.UTF_8));
65 } catch (URISyntaxException e) {
66 throw new AssertionError(e);
67 }
68 }
69
70 public StickerPackId getPackId() {
71 return packId;
72 }
73
74 public byte[] getPackKey() {
75 return packKey;
76 }
77
78 public final static class InvalidStickerPackLinkException extends Exception {
79
80 public InvalidStickerPackLinkException(String message) {
81 super(message);
82 }
83
84 public InvalidStickerPackLinkException(final String message, final Throwable cause) {
85 super(message, cause);
86 }
87 }
88 }