diff --git a/lib/src/main/java/org/asamk/signal/manager/util/DataURI.java b/lib/src/main/java/org/asamk/signal/manager/util/DataURI.java index 1e2e0038..04d4bbc8 100644 --- a/lib/src/main/java/org/asamk/signal/manager/util/DataURI.java +++ b/lib/src/main/java/org/asamk/signal/manager/util/DataURI.java @@ -9,25 +9,31 @@ import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; -/** - * Data URI record that follows RFC 2397. - * - * @param mediaType the media type. If empty, the default media type "text/plain" is used. - * @param parameter the list of parameters. Must be URL escaped encoded. - * @param data the data. If base64 is not given, the data is treated as ASCII string. - */ @SuppressWarnings({"java:S6218"}) public record DataURI(String mediaType, Map parameter, byte[] data) { public static final Pattern DATA_URI_PATTERN = Pattern.compile( - "data:(?.+?\\/.+?)?(?;.+?)?(?;base64)?,(?.+)", + "\\Adata:(?.+?/.+?)?(?;.+?=.+?)?(?;base64)?,(?.+)\\z", Pattern.CASE_INSENSITIVE); public static final Pattern PARAMETER_PATTERN = Pattern.compile("\\G;(?.+)=(?.+)", Pattern.CASE_INSENSITIVE); public static final String DEFAULT_TYPE = "text/plain"; /** - * Generates a new {@link DataURI} object from the given string. + * Generates a new {@link DataURI} object that follows + * RFC 2397 from the given string. + *

+ * The {@code dataURI} must be of the form: + *

+ * {@code + * data:[][;base64], + * } + *

+ * The {@code } is an Internet media type specification (with + * optional parameters.) The appearance of ";base64" means that the data + * is encoded as base64. Without ";base64", the data is represented using (ASCII) URL Escaped encoding. + * If {@code } is omitted, it defaults to {@link DataURI#DEFAULT_TYPE}. + * Parameter values should use the URL Escaped encoding. * * @param dataURI the data URI * @return a data URI object diff --git a/man/signal-cli.1.adoc b/man/signal-cli.1.adoc index 6258243a..181eb9fc 100644 --- a/man/signal-cli.1.adoc +++ b/man/signal-cli.1.adoc @@ -231,6 +231,9 @@ Read the message from standard input. *-a* [ATTACHMENT [ATTACHMENT ...]], *--attachment* [ATTACHMENT [ATTACHMENT ...]]:: Add one or more files as attachment. +Data URI encoded attachments can be added and must follow the RFC 2397. +Additionally a file name can be added: +e.g.: `data:;filename=;base64,` *--sticker* STICKER:: Send a sticker of a locally known sticker pack (syntax: stickerPackId:stickerId).