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 record StickerPackUrl(StickerPackId packId
, byte[] packKey
) {
17 * @throws InvalidStickerPackLinkException If url cannot be parsed.
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");
25 var query
= Utils
.getQueryMap(rawQuery
);
26 var packIdString
= query
.get("pack_id");
27 var packKeyString
= query
.get("pack_key");
29 if (isEmpty(packIdString
) || isEmpty(packKeyString
)) {
30 throw new InvalidStickerPackLinkException("Incomplete sticker pack uri");
35 packId
= StickerPackId
.deserialize(Hex
.fromStringCondensed(packIdString
));
36 } catch (IOException e
) {
37 throw new InvalidStickerPackLinkException("Invalid sticker pack", e
);
41 packKey
= Hex
.fromStringCondensed(packKeyString
);
42 } catch (IOException e
) {
43 throw new InvalidStickerPackLinkException("Invalid sticker pack uri", e
);
45 return new StickerPackUrl(packId
, packKey
);
50 return new URI("https",
54 + URLEncoder
.encode(Hex
.toStringCondensed(packId
.serialize()), StandardCharsets
.UTF_8
)
56 + URLEncoder
.encode(Hex
.toStringCondensed(packKey
), StandardCharsets
.UTF_8
));
57 } catch (URISyntaxException e
) {
58 throw new AssertionError(e
);
62 public static final class InvalidStickerPackLinkException
extends Exception
{
64 public InvalidStickerPackLinkException(String message
) {
68 public InvalidStickerPackLinkException(final String message
, final Throwable cause
) {
69 super(message
, cause
);