Skip to content

Commit 5fd3bdd

Browse files
committed
Protected queues - do not render Delete button for internal queues
with fix for rabbit_mgmt_wm_queue by MK
1 parent abe306e commit 5fd3bdd

File tree

4 files changed

+22
-4
lines changed

4 files changed

+22
-4
lines changed

deps/rabbitmq_management/priv/www/js/main.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1759,6 +1759,10 @@ function select_queue_type(queuetype) {
17591759
update();
17601760
}
17611761

1762+
function is_internal(queue) {
1763+
return queue.internal;
1764+
}
1765+
17621766
function get_queue_type (queue) {
17631767
return queue.type;
17641768
}

deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,7 @@
395395
</div>
396396
<% } %>
397397

398+
<% if (!is_internal(queue)) { %>
398399
<div class="section-hidden" id="delete">
399400
<h2>Delete</h2>
400401
<div class="hider">
@@ -406,6 +407,7 @@
406407
</form>
407408
</div>
408409
</div>
410+
<% } %>
409411

410412
<% if (!is_stream(queue)) { %>
411413
<div class="section-hidden">

deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,14 @@ queue_with_totals(ReqData) ->
128128

129129
queue_with_totals(VHost, QName) ->
130130
Name = rabbit_misc:r(VHost, queue, QName),
131+
%% this somehow shares fields with mgmt_format:queue :-/
131132
case rabbit_amqqueue:lookup(Name) of
132-
{ok, Q} -> QueueInfo = rabbit_amqqueue:info(Q,
133+
{ok, Q} -> QueueInfo0 = rabbit_amqqueue:info(Q,
133134
[name, durable, auto_delete, exclusive,
134135
owner_pid, arguments, type, state,
135136
policy, totals, online, type_specific]),
136-
rabbit_mgmt_format:queue_info(QueueInfo);
137+
QueueInfo1 = QueueInfo0 ++ [{internal, amqqueue:is_internal(Q)},
138+
{internal_owner, rabbit_mgmt_format:internal_owner(amqqueue:internal_owner(Q))}],
139+
rabbit_mgmt_format:queue_info(QueueInfo1);
137140
{error, not_found} -> not_found
138141
end.

deps/rabbitmq_management_agent/src/rabbit_mgmt_format.erl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
-export([format/2, ip/1, ipb/1, amqp_table/1, tuple/1]).
1111
-export([parameter/1, now_to_str/0, now_to_str/1, strip_pids/1]).
1212
-export([protocol/1, resource/1, queue/1, queue/2, queue_state/1, queue_info/1]).
13-
-export([exchange/1, user/1, internal_user/1, binding/1, url/2]).
13+
-export([exchange/1, user/1, internal_user/1, binding/1, url/2, internal_owner/1]).
1414
-export([pack_binding_props/2, tokenise/1]).
1515
-export([to_amqp_table/1, listener/1, web_context/1, properties/1, basic_properties/1]).
1616
-export([record/2, to_basic_properties/1]).
@@ -401,10 +401,19 @@ queue(Q, Ctx) when ?is_amqqueue(Q) ->
401401
{exclusive, is_pid(ExclusiveOwner)},
402402
{owner_pid, ExclusiveOwner},
403403
{arguments, amqp_table(Arguments)},
404-
{pid, Pid}
404+
{pid, Pid},
405+
{internal, amqqueue:is_internal(Q)},
406+
{internal_owner, internal_owner(amqqueue:internal_owner(Q))}
405407
%% type specific stuff like, state, type, members etc is returned here
406408
| rabbit_queue_type:format(Q, Ctx)].
407409

410+
internal_owner(undefined) ->
411+
false;
412+
internal_owner(#resource{} = Owner) ->
413+
[{name, Owner#resource.name},
414+
{kind, Owner#resource.kind},
415+
{vhost, Owner#resource.virtual_host}].
416+
408417
queue_info(List) ->
409418
format(List, {fun format_exchange_and_queue/1, false}).
410419

0 commit comments

Comments
 (0)