1 package org
.asamk
.signal
.manager
.api
;
3 import org
.asamk
.signal
.manager
.util
.Utils
;
4 import org
.whispersystems
.signalservice
.internal
.util
.Hex
;
6 import java
.io
.IOException
;
8 import java
.net
.URISyntaxException
;
9 import java
.net
.URLEncoder
;
10 import java
.nio
.charset
.StandardCharsets
;
12 import static org
.whispersystems
.signalservice
.internal
.util
.Util
.isEmpty
;
14 public final class StickerPackUrl
{
16 private final StickerPackId packId
;
17 private final byte[] packKey
;
20 * @throws InvalidStickerPackLinkException If url cannot be parsed.
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");
28 var query
= Utils
.getQueryMap(rawQuery
);
29 var packIdString
= query
.get("pack_id");
30 var packKeyString
= query
.get("pack_key");
32 if (isEmpty(packIdString
) || isEmpty(packKeyString
)) {
33 throw new InvalidStickerPackLinkException("Incomplete sticker pack uri");
38 packId
= StickerPackId
.deserialize(Hex
.fromStringCondensed(packIdString
));
39 } catch (IOException e
) {
40 throw new InvalidStickerPackLinkException("Invalid sticker pack", e
);
44 packKey
= Hex
.fromStringCondensed(packKeyString
);
45 } catch (IOException e
) {
46 throw new InvalidStickerPackLinkException("Invalid sticker pack uri", e
);
48 return new StickerPackUrl(packId
, packKey
);
51 public StickerPackUrl(final StickerPackId packId
, final byte[] packKey
) {
53 this.packKey
= packKey
;
58 return new URI("https",
62 + URLEncoder
.encode(Hex
.toStringCondensed(packId
.serialize()), StandardCharsets
.UTF_8
)
64 + URLEncoder
.encode(Hex
.toStringCondensed(packKey
), StandardCharsets
.UTF_8
));
65 } catch (URISyntaxException e
) {
66 throw new AssertionError(e
);
70 public StickerPackId
getPackId() {
74 public byte[] getPackKey() {
78 public final static class InvalidStickerPackLinkException
extends Exception
{
80 public InvalidStickerPackLinkException(String message
) {
84 public InvalidStickerPackLinkException(final String message
, final Throwable cause
) {
85 super(message
, cause
);