Skip to content

Commit

Permalink
Fix Users filtering in Management UI.
Browse files Browse the repository at this point in the history
close #4908
  • Loading branch information
deadtrickster committed Jan 26, 2023
1 parent ad24db2 commit e4f1486
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 22 deletions.
6 changes: 3 additions & 3 deletions deps/rabbitmq_management/priv/www/js/dispatcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -194,9 +194,9 @@ dispatcher_add(function(sammy) {
return false;
});

path('#/users', {'users': {path: '/users',
options: {sort:true}},
'permissions': '/permissions'}, 'users');
sammy.get('#/users', function() {
renderUsers();
});
sammy.get('#/users/:id', function() {
var vhosts = JSON.parse(sync_get('/vhosts'));
const current_vhost = get_pref('vhost');
Expand Down
11 changes: 11 additions & 0 deletions deps/rabbitmq_management/priv/www/js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -778,6 +778,7 @@ function update_pages(template, page_start){
case 'exchanges' : renderExchanges(); break;
case 'connections' : renderConnections(); break;
case 'channels' : renderChannels(); break;
case 'users' : renderUsers(); break;
default:
renderCallback = RENDER_CALLBACKS[template];
if (renderCallback != undefined) {
Expand All @@ -799,6 +800,16 @@ function renderQueues() {
}, 'vhosts': '/vhosts'}, 'queues', '#/queues');
}

function renderUsers() {
render({'users': {path: url_pagination_template('users', 1, 100),
options: {
sort: true,
pagination: true
}
},
'permissions': '/permissions'}, 'users', '#/users');
}

function renderExchanges() {
render({'exchanges': {path: url_pagination_template('exchanges', 1, 100),
options: {sort:true, vhost:true, pagination:true}},
Expand Down
6 changes: 3 additions & 3 deletions deps/rabbitmq_management/priv/www/js/tmpl/limits.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,9 @@
<th><label>User:</label></th>
<td>
<select name="user">
<% for (var i = 0; i < users.length; i++) { %>
<option value="<%= fmt_string(users[i].name) %>">
<%= fmt_string(users[i].name) %>
<% for (var i = 0; i < users.items.length; i++) { %>
<option value="<%= fmt_string(users.items[i].name) %>">
<%= fmt_string(users.items[i].name) %>
</option>
<% } %>
</select>
Expand Down
4 changes: 2 additions & 2 deletions deps/rabbitmq_management/priv/www/js/tmpl/permissions.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ for (var i = 0; i < permissions.length; i++) {
<td>
<input type="hidden" name="vhost" value="<%= fmt_string(parent.name) %>"/>
<select name="username">
<% for (var i = 0; i < users.length; i++) { %>
<option value="<%= fmt_string(users[i].name) %>"><%= fmt_string(users[i].name) %></option>
<% for (var i = 0; i < users.items.length; i++) { %>
<option value="<%= fmt_string(users.items[i].name) %>"><%= fmt_string(users.items[i].name) %></option>
<% } %>
</select>
</td>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ for (var i = 0; i < topic_permissions.length; i++) {
<td>
<input type="hidden" name="vhost" value="<%= fmt_string(parent.name) %>"/>
<select name="username">
<% for (var i = 0; i < users.length; i++) { %>
<option value="<%= fmt_string(users[i].name) %>"><%= fmt_string(users[i].name) %></option>
<% for (var i = 0; i < users.items.length; i++) { %>
<option value="<%= fmt_string(users.items[i].name) %>"><%= fmt_string(users.items[i].name) %></option>
<% } %>
</select>
</td>
Expand Down
15 changes: 7 additions & 8 deletions deps/rabbitmq_management/priv/www/js/tmpl/users.ejs
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
<h1>Users</h1>
<div class="section" id="users-section">
<h2>All users</h2>
<div class="hider">
<%= filter_ui(users) %>
<div class="updatable">
<% if (users.length > 0) { %>
<div class="section">
<%= paginate_ui(users, 'users') %>
</div>
<div class="updatable">
<% if (users.items.length > 0) { %>
<table class="list">
<thead>
<tr>
Expand All @@ -16,8 +15,8 @@
</thead>
<tbody>
<%
for (var i = 0; i < users.length; i++) {
var user = users[i];
for (var i = 0; i < users.items.length; i++) {
var user = users.items[i];
%>
<tr<%= alt_rows(i)%>>
<td><%= link_user(user.name) %></td>
Expand Down
10 changes: 7 additions & 3 deletions deps/rabbitmq_management/selenium/test/pageobjects/AdminTab.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const OverviewPage = require('./OverviewPage')

const ALL_USERS_SECTION = By.css('div#users-section')
const USER_LINK = By.css('div#menu ul#tabs li a[href="#/connections"]')
const FILTER_USER = By.css('input#filter')
const FILTER_USER = By.css('input#users-name')
const CHECKBOX_REGEX = By.css('input#filter-regex-mode')
const FILTERED_USER = By.css('span.filter-highlight')

Expand All @@ -14,13 +14,17 @@ module.exports = class AdminTab extends OverviewPage {
}

async searchForUser(user, regex = false) {

var filtered_user = By.css('a[href="#/users/' + user + '"]')

await this.sendKeys(FILTER_USER, user)
await this.sendKeys(FILTER_USER, Key.RETURN)
if (regex) {
await this.click(CHECKBOX_REGEX)
}
await this.driver.sleep(250)
await this.waitForDisplayed(FILTERED_USER)
return await this.driver.findElement(FILTERED_USER) != undefined
await this.waitForDisplayed(filtered_user)
return await this.driver.findElement(filtered_user) != undefined
}

}
24 changes: 23 additions & 1 deletion deps/rabbitmq_management/src/rabbit_mgmt_wm_users.erl
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,15 @@
-include_lib("rabbitmq_management_agent/include/rabbit_mgmt_records.hrl").
-include_lib("rabbit_common/include/rabbit.hrl").

-define(BASIC_COLUMNS, ["hashing_algorithm",
"rabbit_password_hashing_sha256",
"limits",
"name",
"password_hash",
"tags"]).

-define(DEFAULT_SORT, ["name"]).

%%--------------------------------------------------------------------

init(Req, [Mode]) ->
Expand All @@ -33,7 +42,17 @@ allowed_methods(ReqData, Context) ->
{[<<"HEAD">>, <<"GET">>, <<"OPTIONS">>], ReqData, Context}.

to_json(ReqData, {Mode, Context}) ->
rabbit_mgmt_util:reply_list(users(Mode), ReqData, Context).
try
Basic = users(Mode),
Data = rabbit_mgmt_util:augment_resources(Basic, ?DEFAULT_SORT,
?BASIC_COLUMNS, ReqData,
Context, fun augment/2),
rabbit_mgmt_util:reply(Data, ReqData, Context)
catch
{error, invalid_range_parameters, Reason} ->
rabbit_mgmt_util:bad_request(iolist_to_binary(Reason), ReqData,
Context)
end.

is_authorized(ReqData, {Mode, Context}) ->
{Res, Req2, Context2} = rabbit_mgmt_util:is_authorized_admin(ReqData, Context),
Expand All @@ -57,3 +76,6 @@ users(without_permissions) ->
Acc
end
end, [], rabbit_auth_backend_internal:list_users()).

augment(Basic, _ReqData) ->
Basic.

0 comments on commit e4f1486

Please sign in to comment.