mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-08-08 02:13:34 +00:00
Supporting open-appsec
This commit is contained in:
77
frontend/js/app/openappsec-log/list/item.ejs
Executable file
77
frontend/js/app/openappsec-log/list/item.ejs
Executable file
@@ -0,0 +1,77 @@
|
||||
|
||||
<td>
|
||||
<div <div class="text-nowrap">
|
||||
<% var sevirityClass = 'bg-success';
|
||||
switch (eventSeverity) {
|
||||
case 'Critical':
|
||||
sevirityClass = 'bg-danger';
|
||||
break;
|
||||
case 'Warning':
|
||||
sevirityClass = 'bg-warning';
|
||||
break;
|
||||
case 'Info':
|
||||
sevirityClass = 'bg-success';
|
||||
//sevirityClass = 'bg-info';
|
||||
break;
|
||||
case 'Debug':
|
||||
sevirityClass = 'bg-success';
|
||||
break;
|
||||
}
|
||||
%>
|
||||
<span class="status-icon <%- sevirityClass %>"></span> <%- eventSeverity %>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>
|
||||
<%
|
||||
var items = [];
|
||||
object_type = "test";
|
||||
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;
|
||||
case 'certificate':
|
||||
%> <span class="text-pink"><i class="fe fe-shield"></i></span> <%
|
||||
if (meta.provider === 'letsencrypt') {
|
||||
items = meta.domain_names;
|
||||
} else {
|
||||
//items.push(meta.nice_name);
|
||||
items.push("test");
|
||||
}
|
||||
break;
|
||||
}
|
||||
%><%- eventName %>
|
||||
</div>
|
||||
<div class="small text-muted">
|
||||
<%- formatDbDate(eventTime, 'Do MMMM YYYY, h:mm a') %>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>
|
||||
<%- serviceName %>
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
<a href="#" class="meta btn btn-secondary btn-sm">open</a>
|
||||
</td>
|
32
frontend/js/app/openappsec-log/list/item.js
Executable file
32
frontend/js/app/openappsec-log/list/item.js
Executable file
@@ -0,0 +1,32 @@
|
||||
const Mn = require('backbone.marionette');
|
||||
const Controller = require('../../controller');
|
||||
const template = require('./item.ejs');
|
||||
|
||||
module.exports = Mn.View.extend({
|
||||
template: template,
|
||||
tagName: 'tr',
|
||||
|
||||
ui: {
|
||||
meta: 'a.meta'
|
||||
},
|
||||
|
||||
events: {
|
||||
'click @ui.meta': function (e) {
|
||||
e.preventDefault();
|
||||
Controller.showOpenappsecMeta(this.model);
|
||||
}
|
||||
},
|
||||
|
||||
templateContext: {
|
||||
more: function() {
|
||||
switch (this.object_type) {
|
||||
case 'redirection-host':
|
||||
case 'stream':
|
||||
case 'proxy-host':
|
||||
return this.meta.domain_names.join(', ');
|
||||
}
|
||||
|
||||
return '#' + (this.object_id || '?');
|
||||
}
|
||||
}
|
||||
});
|
9
frontend/js/app/openappsec-log/list/main.ejs
Executable file
9
frontend/js/app/openappsec-log/list/main.ejs
Executable file
@@ -0,0 +1,9 @@
|
||||
<thead>
|
||||
<th>Severity</th>
|
||||
<th>Event</th>
|
||||
<th>Handler</th>
|
||||
<th> </th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- items -->
|
||||
</tbody>
|
27
frontend/js/app/openappsec-log/list/main.js
Executable file
27
frontend/js/app/openappsec-log/list/main.js
Executable file
@@ -0,0 +1,27 @@
|
||||
const Mn = require('backbone.marionette');
|
||||
const ItemView = require('./item');
|
||||
const template = require('./main.ejs');
|
||||
|
||||
const TableBody = Mn.CollectionView.extend({
|
||||
tagName: 'tbody',
|
||||
childView: ItemView
|
||||
});
|
||||
|
||||
module.exports = Mn.View.extend({
|
||||
tagName: 'table',
|
||||
className: 'table table-hover table-outline table-vcenter card-table',
|
||||
template: template,
|
||||
|
||||
regions: {
|
||||
body: {
|
||||
el: 'tbody',
|
||||
replaceElement: true
|
||||
}
|
||||
},
|
||||
|
||||
onRender: function () {
|
||||
this.showChildView('body', new TableBody({
|
||||
collection: this.collection
|
||||
}));
|
||||
}
|
||||
});
|
25
frontend/js/app/openappsec-log/main.ejs
Executable file
25
frontend/js/app/openappsec-log/main.ejs
Executable file
@@ -0,0 +1,25 @@
|
||||
<div class="card">
|
||||
<div class="card-status bg-teal"></div>
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">Security Log</h3>
|
||||
<div class="card-options">
|
||||
<form class="search-form" role="search">
|
||||
<div class="input-icon">
|
||||
<span class="input-icon-addon">
|
||||
<i class="fe fe-search"></i>
|
||||
</span>
|
||||
<input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="<%- i18n('audit-log', 'search') %>" aria-label="<%- i18n('audit-log', 'search') %>">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body no-padding min-100">
|
||||
<div class="dimmer active">
|
||||
<div class="loader"></div>
|
||||
<div class="dimmer-content list-region">
|
||||
<!-- List Region -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
82
frontend/js/app/openappsec-log/main.js
Executable file
82
frontend/js/app/openappsec-log/main.js
Executable file
@@ -0,0 +1,82 @@
|
||||
const Mn = require('backbone.marionette');
|
||||
const App = require('../main');
|
||||
const OpenappsecLogModel = require('../../models/openappsec-log');
|
||||
const ListView = require('./list/main');
|
||||
const template = require('./main.ejs');
|
||||
const ErrorView = require('../error/main');
|
||||
const EmptyView = require('../empty/main');
|
||||
|
||||
module.exports = Mn.View.extend({
|
||||
id: 'openappsec-log',
|
||||
template: template,
|
||||
|
||||
ui: {
|
||||
list_region: '.list-region',
|
||||
dimmer: '.dimmer',
|
||||
search: '.search-form',
|
||||
query: 'input[name="source-query"]'
|
||||
},
|
||||
|
||||
fetch: App.Api.OpenappsecLog.getAll,
|
||||
|
||||
showData: function(response) {
|
||||
this.showChildView('list_region', new ListView({
|
||||
collection: new OpenappsecLogModel.Collection(response)
|
||||
}));
|
||||
},
|
||||
|
||||
showError: function(err) {
|
||||
this.showChildView('list_region', new ErrorView({
|
||||
code: err.code,
|
||||
message: err.message,
|
||||
retry: function () {
|
||||
App.Controller.showOpenappsecLog();
|
||||
}
|
||||
}));
|
||||
|
||||
console.error(err);
|
||||
},
|
||||
|
||||
showEmpty: function() {
|
||||
this.showChildView('list_region', new EmptyView({
|
||||
title: App.i18n('audit-log', 'empty'),
|
||||
subtitle: App.i18n('audit-log', 'empty-subtitle')
|
||||
}));
|
||||
},
|
||||
|
||||
regions: {
|
||||
list_region: '@ui.list_region'
|
||||
},
|
||||
|
||||
events: {
|
||||
'submit @ui.search': function (e) {
|
||||
e.preventDefault();
|
||||
let query = this.ui.query.val();
|
||||
|
||||
this.fetch(['user'], query)
|
||||
.then(response => this.showData(response))
|
||||
.catch(err => {
|
||||
this.showError(err);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onRender: function () {
|
||||
let view = this;
|
||||
|
||||
view.fetch(['user'])
|
||||
.then(response => {
|
||||
if (!view.isDestroyed() && response && response.length) {
|
||||
view.showData(response);
|
||||
} else {
|
||||
view.showEmpty();
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
view.showError(err);
|
||||
})
|
||||
.then(() => {
|
||||
view.ui.dimmer.removeClass('active');
|
||||
});
|
||||
}
|
||||
});
|
27
frontend/js/app/openappsec-log/meta.ejs
Executable file
27
frontend/js/app/openappsec-log/meta.ejs
Executable file
@@ -0,0 +1,27 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title"><%- eventName %></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">
|
||||
Handler
|
||||
<span class="tag-addon tag-orange"><%- serviceName %></span>
|
||||
</div>
|
||||
<div class="tag tag-dark">
|
||||
Severity
|
||||
<span class="tag-addon tag-teal"><%- eventSeverity %></span>
|
||||
</div>
|
||||
<div class="tag tag-dark">
|
||||
<%- i18n('audit-log', 'date') %>
|
||||
<span class="tag-addon tag-primary"><%- formatDbDate(eventTime, '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>
|
7
frontend/js/app/openappsec-log/meta.js
Executable file
7
frontend/js/app/openappsec-log/meta.js
Executable file
@@ -0,0 +1,7 @@
|
||||
const Mn = require('backbone.marionette');
|
||||
const template = require('./meta.ejs');
|
||||
|
||||
module.exports = Mn.View.extend({
|
||||
template: template,
|
||||
className: 'modal-dialog wide'
|
||||
});
|
18
frontend/js/models/openappsec-log.js
Executable file
18
frontend/js/models/openappsec-log.js
Executable file
@@ -0,0 +1,18 @@
|
||||
const Backbone = require('backbone');
|
||||
|
||||
const model = Backbone.Model.extend({
|
||||
idAttribute: 'id',
|
||||
|
||||
defaults: function () {
|
||||
return {
|
||||
name: ''
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
Model: model,
|
||||
Collection: Backbone.Collection.extend({
|
||||
model: model
|
||||
})
|
||||
};
|
Reference in New Issue
Block a user