From 462ac3d90668d2aa7eabf27cdce39e35500942dd Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Thu, 13 Jan 2022 16:09:17 +0300 Subject: [PATCH] Introduce definition file checksum settings --- deps/rabbit/priv/schema/rabbit.schema | 6 ++++++ deps/rabbit/src/rabbit_definitions.erl | 24 +++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/deps/rabbit/priv/schema/rabbit.schema b/deps/rabbit/priv/schema/rabbit.schema index 3b7f96a6b8..760e815ae3 100644 --- a/deps/rabbit/priv/schema/rabbit.schema +++ b/deps/rabbit/priv/schema/rabbit.schema @@ -154,6 +154,12 @@ fun(Conf) -> end end}. +{mapping, "definitions.checksum.use_checksum", "rabbit.definitions.use_checksum", [ + {datatype, {enum, [true, false]}}]}. + +{mapping, "definitions.checksum.checksum_algorithm", "rabbit.definitions.checksum_algorithm", [ + {datatype, {enum, [sha, sha224, sha256, sha384, sha512]}}]}. + %% Load definitions from a remote URL over HTTPS. See %% https://www.rabbitmq.com/management.html#load-definitions {mapping, "definitions.https.url", "rabbit.definitions.url", diff --git a/deps/rabbit/src/rabbit_definitions.erl b/deps/rabbit/src/rabbit_definitions.erl index 4b799d7d2d..2cbb6db22d 100644 --- a/deps/rabbit/src/rabbit_definitions.erl +++ b/deps/rabbit/src/rabbit_definitions.erl @@ -19,7 +19,8 @@ ]). %% import -export([import_raw/1, import_raw/2, import_parsed/1, import_parsed/2, - apply_defs/2, apply_defs/3, apply_defs/4, apply_defs/5]). + apply_defs/2, apply_defs/3, apply_defs/4, apply_defs/5, + should_use_checksum/0, checksum_algorithm/0]). -export([all_definitions/0]). -export([ @@ -232,6 +233,27 @@ atomise_map_keys(Decoded) -> Acc#{rabbit_data_coercion:to_atom(K, utf8) => V} end, Decoded, Decoded). +-spec should_use_checksum() -> boolean(). +should_use_checksum() -> + case application:get_env(rabbit, definitions) of + undefined -> false; + {ok, none} -> false; + {ok, []} -> false; + {ok, Proplist} -> + pget(use_checksum, Proplist, false) + end. + +-spec checksum_algorithm() -> {ok, crypto:sha1() | crypto:sha2()}. +checksum_algorithm() -> + case application:get_env(rabbit, definitions) of + undefined -> undefined; + {ok, none} -> undefined; + {ok, []} -> undefined; + {ok, Proplist} -> + pget(checksum_algorithm, Proplist, sha256) + end. + + -spec apply_defs(Map :: #{atom() => any()}, ActingUser :: rabbit_types:username()) -> 'ok' | {error, term()}. apply_defs(Map, ActingUser) ->