Audit Log items, backend stuff, help pages
This commit is contained in:
@ -1,32 +1,72 @@
|
||||
<td class="text-center">
|
||||
<div class="avatar d-block" style="background-image: url(<%- avatar || '/images/default-avatar.jpg' %>)">
|
||||
<span class="avatar-status <%- is_disabled ? 'bg-red' : 'bg-green' %>"></span>
|
||||
<div class="avatar d-block" style="background-image: url(<%- user.avatar || '/images/default-avatar.jpg' %>)">
|
||||
<span class="avatar-status <%- user.is_disabled ? 'bg-red' : 'bg-green' %>"></span>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div><%- name %></div>
|
||||
<div>
|
||||
<% if (user.is_deleted) {
|
||||
%>
|
||||
<span class="mdi-format-strikethrough" title="Deleted"><%- user.name %></span>
|
||||
<%
|
||||
} else {
|
||||
%>
|
||||
<%- user.name %>
|
||||
<%
|
||||
}
|
||||
%>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>
|
||||
<%
|
||||
var items = [];
|
||||
switch (object_type) {
|
||||
case 'proxy-host':
|
||||
%> <span class="text-success"><i class="fe fe-zap"></i></span> <%
|
||||
items = meta.domain_names;
|
||||
break;
|
||||
case 'redirection-host':
|
||||
%> <span class="text-yellow"><i class="fe fe-shuffle"></i></span> <%
|
||||
items = meta.domain_names;
|
||||
break;
|
||||
case 'stream':
|
||||
%> <span class="text-blue"><i class="fe fe-radio"></i></span> <%
|
||||
items.push(meta.incoming_port);
|
||||
break;
|
||||
case 'dead-host':
|
||||
%> <span class="text-danger"><i class="fe fe-zap-off"></i></span> <%
|
||||
items = meta.domain_names;
|
||||
break;
|
||||
case 'access-list':
|
||||
%> <span class="text-teal"><i class="fe fe-lock"></i></span> <%
|
||||
items.push(meta.name);
|
||||
break;
|
||||
case 'user':
|
||||
%> <span class="text-teal"><i class="fe fe-user"></i></span> <%
|
||||
items.push(meta.name);
|
||||
break;
|
||||
}
|
||||
%> <%- i18n('audit-log', action, {name: i18n('audit-log', object_type)}) %>
|
||||
—
|
||||
<%
|
||||
if (items && items.length) {
|
||||
items.map(function(item) {
|
||||
%>
|
||||
<span class="tag"><%- item %></span>
|
||||
<%
|
||||
});
|
||||
} else {
|
||||
%>
|
||||
#<%- object_id %>
|
||||
<%
|
||||
}
|
||||
%>
|
||||
</div>
|
||||
<div class="small text-muted">
|
||||
Created: <%- formatDbDate(created_on, 'Do MMMM YYYY') %>
|
||||
<%- formatDbDate(created_on, 'Do MMMM YYYY, h:mm a') %>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div><%- email %></div>
|
||||
</td>
|
||||
<td>
|
||||
<div><%- roles.join(', ') %></div>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<div class="item-action dropdown">
|
||||
<a href="#" data-toggle="dropdown" class="icon"><i class="fe fe-more-vertical"></i></a>
|
||||
<div class="dropdown-menu dropdown-menu-right">
|
||||
<a href="#" class="edit-user dropdown-item"><i class="dropdown-icon fe fe-edit"></i> Edit Details</a>
|
||||
<a href="#" class="edit-permissions dropdown-item"><i class="dropdown-icon fe fe-shield"></i> Edit Permissions</a>
|
||||
<a href="#" class="set-password dropdown-item"><i class="dropdown-icon fe fe-lock"></i> Set Password</a>
|
||||
<% if (!isSelf()) { %>
|
||||
<a href="#" class="login dropdown-item"><i class="dropdown-icon fe fe-log-in"></i> Sign in as User</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="#" class="delete-user dropdown-item"><i class="dropdown-icon fe fe-trash-2"></i> Delete User</a>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
<td class="text-right">
|
||||
<a href="#" class="meta btn btn-secondary btn-sm"><%- i18n('audit-log', 'view-meta') %></a>
|
||||
</td>
|
||||
|
@ -2,9 +2,6 @@
|
||||
|
||||
const Mn = require('backbone.marionette');
|
||||
const Controller = require('../../controller');
|
||||
const Api = require('../../api');
|
||||
const Cache = require('../../cache');
|
||||
const Tokens = require('../../tokens');
|
||||
const template = require('./item.ejs');
|
||||
|
||||
module.exports = Mn.View.extend({
|
||||
@ -12,61 +9,26 @@ module.exports = Mn.View.extend({
|
||||
tagName: 'tr',
|
||||
|
||||
ui: {
|
||||
edit: 'a.edit-user',
|
||||
permissions: 'a.edit-permissions',
|
||||
password: 'a.set-password',
|
||||
login: 'a.login',
|
||||
delete: 'a.delete-user'
|
||||
meta: 'a.meta'
|
||||
},
|
||||
|
||||
events: {
|
||||
'click @ui.edit': function (e) {
|
||||
'click @ui.meta': function (e) {
|
||||
e.preventDefault();
|
||||
Controller.showUserForm(this.model);
|
||||
},
|
||||
|
||||
'click @ui.permissions': function (e) {
|
||||
e.preventDefault();
|
||||
Controller.showUserPermissions(this.model);
|
||||
},
|
||||
|
||||
'click @ui.password': function (e) {
|
||||
e.preventDefault();
|
||||
Controller.showUserPasswordForm(this.model);
|
||||
},
|
||||
|
||||
'click @ui.delete': function (e) {
|
||||
e.preventDefault();
|
||||
Controller.showUserDeleteConfirm(this.model);
|
||||
},
|
||||
|
||||
'click @ui.login': function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
if (Cache.User.get('id') !== this.model.get('id')) {
|
||||
this.ui.login.prop('disabled', true).addClass('btn-disabled');
|
||||
|
||||
Api.Users.loginAs(this.model.get('id'))
|
||||
.then(res => {
|
||||
Tokens.addToken(res.token, res.user.nickname || res.user.name);
|
||||
window.location = '/';
|
||||
window.location.reload();
|
||||
})
|
||||
.catch(err => {
|
||||
alert(err.message);
|
||||
this.ui.login.prop('disabled', false).removeClass('btn-disabled');
|
||||
});
|
||||
}
|
||||
Controller.showAuditMeta(this.model);
|
||||
}
|
||||
},
|
||||
|
||||
templateContext: {
|
||||
isSelf: function () {
|
||||
return Cache.User.get('id') === this.id;
|
||||
}
|
||||
},
|
||||
more: function() {
|
||||
switch (this.object_type) {
|
||||
case 'redirection-host':
|
||||
case 'stream':
|
||||
case 'proxy-host':
|
||||
return this.meta.domain_names.join(', ');
|
||||
}
|
||||
|
||||
initialize: function () {
|
||||
this.listenTo(this.model, 'change', this.render);
|
||||
return '#' + (this.object_id || '?');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -1,8 +1,7 @@
|
||||
<thead>
|
||||
<th width="30"> </th>
|
||||
<th>Name</th>
|
||||
<th>Email</th>
|
||||
<th>Roles</th>
|
||||
<th>User</th>
|
||||
<th>Event</th>
|
||||
<th> </th>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -24,7 +24,7 @@ module.exports = Mn.View.extend({
|
||||
onRender: function () {
|
||||
let view = this;
|
||||
|
||||
App.Api.AuditLog.getAll()
|
||||
App.Api.AuditLog.getAll(['user'])
|
||||
.then(response => {
|
||||
if (!view.isDestroyed() && response && response.length) {
|
||||
view.showChildView('list_region', new ListView({
|
||||
|
27
src/frontend/js/app/audit-log/meta.ejs
Normal file
27
src/frontend/js/app/audit-log/meta.ejs
Normal file
@ -0,0 +1,27 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title"><%- i18n('audit-log', 'meta-title') %></h5>
|
||||
<button type="button" class="close cancel" aria-label="Close" data-dismiss="modal"> </button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="mb-2">
|
||||
<div class="tag tag-dark">
|
||||
<%- i18n('audit-log', 'user') %>
|
||||
<span class="tag-addon tag-teal"><%- user.name %></span>
|
||||
</div>
|
||||
<div class="tag tag-dark">
|
||||
<%- i18n('audit-log', 'action') %>
|
||||
<span class="tag-addon tag-warning"><%- i18n('audit-log', action, {name: i18n('audit-log', object_type)}) %></span>
|
||||
</div>
|
||||
<div class="tag tag-dark">
|
||||
<%- i18n('audit-log', 'date') %>
|
||||
<span class="tag-addon tag-primary"><%- formatDbDate(created_on, 'Do MMMM YYYY, h:mm a') %></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<pre><%- JSON.stringify(meta, null, 2) %></pre>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary cancel" data-dismiss="modal"><%- i18n('str', 'close') %></button>
|
||||
</div>
|
||||
</div>
|
9
src/frontend/js/app/audit-log/meta.js
Normal file
9
src/frontend/js/app/audit-log/meta.js
Normal file
@ -0,0 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
const Mn = require('backbone.marionette');
|
||||
const template = require('./meta.ejs');
|
||||
|
||||
module.exports = Mn.View.extend({
|
||||
template: template,
|
||||
className: 'modal-dialog wide'
|
||||
});
|
Reference in New Issue
Block a user