Skip to content
This repository was archived by the owner on Nov 17, 2020. It is now read-only.

Commit 5cc1292

Browse files
declare user: support --hashing_algorithm, improve mandatory option formatting, more tests
References #641.
1 parent 0a1f96b commit 5cc1292

File tree

2 files changed

+46
-9
lines changed

2 files changed

+46
-9
lines changed

bin/rabbitmqadmin

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ DECLARABLE = {
109109
'vhost': {'mandatory': ['name'],
110110
'optional': {'tracing': None}},
111111
'user': {'mandatory': ['name', ['password', 'password_hash'], 'tags'],
112-
'optional': {}},
112+
'optional': {'hashing_algorithm': None}},
113113
'permission': {'mandatory': ['vhost', 'user', 'configure', 'write', 'read'],
114114
'optional': {}},
115115
'parameter': {'mandatory': ['component', 'name', 'value'],
@@ -258,10 +258,22 @@ For more help use the help subcommand:
258258
rabbitmqadmin help config # For help with the configuration file
259259
"""
260260

261+
def fmt_required_flag(val):
262+
# when one of the options is required, e.g.
263+
# password vs. password_hash
264+
if type(val) is list:
265+
# flag1=... OR flag2=... OR flag3=...
266+
return "=... OR ".join(val)
267+
else:
268+
return val
269+
270+
def fmt_optional_flag(val):
271+
return val
272+
261273
def fmt_usage_stanza(root, verb):
262274
def fmt_args(args):
263-
res = " ".join(["{0}=...".format(a) for a in args['mandatory']])
264-
opts = " ".join("{0}=...".format(o) for o in args['optional'].keys())
275+
res = " ".join(["{0}=...".format(fmt_required_flag(a)) for a in args['mandatory']])
276+
opts = " ".join("{0}=...".format(fmt_optional_flag(o)) for o in args['optional'].keys())
265277
if opts != "":
266278
res += " [{0}]".format(opts)
267279
return res
@@ -728,17 +740,20 @@ class Management:
728740
upload[k] = optional[k]
729741
for arg in args:
730742
assert_usage("=" in arg,
731-
'Argument "{0}" not in format name=value'.format(arg))
743+
'Argument "{0}" not in the name=value format'.format(arg))
732744
(name, value) = arg.split("=", 1)
745+
# flatten the list of mandatory keys
733746
mandatory_keys = []
734747
for key in mandatory:
735748
if type(key) is list:
736749
for subkey in key:
737750
mandatory_keys.append(subkey)
738751
else:
739752
mandatory_keys.append(key)
753+
740754
assert_usage(name in mandatory_keys or name in optional.keys(),
741-
'Argument "{0}" not recognised'.format(name))
755+
'Argument "{0}" is not recognised'.format(name))
756+
742757
if 'json' in obj and name in obj['json']:
743758
upload[name] = self.parse_json(value)
744759
else:
@@ -748,10 +763,10 @@ class Management:
748763
a_set = set(m)
749764
b_set = set(upload.keys())
750765
assert_usage((a_set & b_set),
751-
'mandatory one-of arguments "{0}" required'.format(m))
766+
'one of mandatory arguments "{0}" is required'.format(m))
752767
else:
753768
assert_usage(m in upload.keys(),
754-
'mandatory argument "{0}" required'.format(m))
769+
'mandatory argument "{0}" is required'.format(m))
755770
if 'vhost' not in mandatory:
756771
upload['vhost'] = self.options.vhost or self.options.declare_vhost
757772
uri_args = {}

test/rabbit_mgmt_rabbitmqadmin_SUITE.erl

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,31 @@ users(Config) ->
196196
{ok, ["guest"]} = run_list(Config, l("users")),
197197
{error, _, _} = run(Config, ["declare", "user", "name=foo"]),
198198
{ok, _} = run(Config, ["declare", "user", "name=foo", "password=pass", "tags="]),
199-
{ok, _} = run(Config, ["declare", "user", "name=foo", "password_hash=0qUsZVcRBQ1aU+sln631sKiEMSP9AOGHxuz4Rk01Jx4hwr2b", "tags="]),
200-
{ok, ["foo", "guest"]} = run_list(Config, l("users")),
199+
200+
{ok, _} = run(Config, ["declare", "user", "name=with_password_hash1", "password_hash=WAbU0ZIcvjTpxM3Q3SbJhEAM2tQ=",
201+
"tags=management"]),
202+
{ok, _} = run(Config, ["declare", "user", "name=with_password_hash2",
203+
"hashing_algorithm=rabbit_password_hashing_sha256", "password_hash=WAbU0ZIcvjTpxM3Q3SbJhEAM2tQ=",
204+
"tags=management"]),
205+
{ok, _} = run(Config, ["declare", "user", "name=with_password_hash3",
206+
"hashing_algorithm=rabbit_password_hashing_sha512", "password_hash=WAbU0ZIcvjTpxM3Q3SbJhEAM2tQ=",
207+
"tags=management"]),
208+
209+
{error, _, _} = run(Config, ["declare", "user", "name=with_password_hash4",
210+
"hashing_algorithm=rabbit_password_hashing_sha256", "password_hash=not-base64-encoded",
211+
"tags=management"]),
212+
213+
214+
{ok, ["foo", "guest",
215+
"with_password_hash1",
216+
"with_password_hash2",
217+
"with_password_hash3"]} = run_list(Config, l("users")),
218+
201219
{ok, _} = run(Config, ["delete", "user", "name=foo"]),
220+
{ok, _} = run(Config, ["delete", "user", "name=with_password_hash1"]),
221+
{ok, _} = run(Config, ["delete", "user", "name=with_password_hash2"]),
222+
{ok, _} = run(Config, ["delete", "user", "name=with_password_hash3"]),
223+
202224
{ok, ["guest"]} = run_list(Config, l("users")).
203225

204226
permissions(Config) ->

0 commit comments

Comments
 (0)