diff --git a/backend/internal/certificate.js b/backend/internal/certificate.js index 351b9b3de..7c8fddeea 100644 --- a/backend/internal/certificate.js +++ b/backend/internal/certificate.js @@ -388,7 +388,7 @@ const internalCertificate = { zipFiles(source, out) { const archive = archiver('zip', { zlib: { level: 9 } }); const stream = fs.createWriteStream(out); - + return new Promise((resolve, reject) => { source .map((fl) => { @@ -399,7 +399,7 @@ const internalCertificate = { archive .on('error', (err) => reject(err)) .pipe(stream); - + stream.on('close', () => resolve()); archive.finalize(); }); @@ -477,7 +477,7 @@ const internalCertificate = { // Query is used for searching if (typeof search_query === 'string') { query.where(function () { - this.where('name', 'like', '%' + search_query + '%'); + this.where('nice_name', 'like', '%' + search_query + '%'); }); } @@ -1140,7 +1140,7 @@ const internalCertificate = { if (domains.length === 0) { throw new error.InternalValidationError('No domains provided'); } - + // Create a test challenge file const testChallengeDir = '/data/letsencrypt-acme-challenge/.well-known/acme-challenge'; const testChallengeFile = testChallengeDir + '/test-challenge'; @@ -1215,7 +1215,7 @@ const internalCertificate = { // Remove the test challenge file fs.unlinkSync(testChallengeFile); - + return results; } }; diff --git a/frontend/js/app/audit-log/main.ejs b/frontend/js/app/audit-log/main.ejs index acaa8b490..8d182b595 100644 --- a/frontend/js/app/audit-log/main.ejs +++ b/frontend/js/app/audit-log/main.ejs @@ -2,6 +2,16 @@

<%- i18n('audit-log', 'title') %>

+
+ +
diff --git a/frontend/js/app/audit-log/main.js b/frontend/js/app/audit-log/main.js index ec9b53682..0d03c5ca8 100644 --- a/frontend/js/app/audit-log/main.js +++ b/frontend/js/app/audit-log/main.js @@ -12,39 +12,68 @@ module.exports = Mn.View.extend({ ui: { list_region: '.list-region', - dimmer: '.dimmer' + dimmer: '.dimmer', + search: '.search-form', + query: 'input[name="source-query"]' + }, + + fetch: App.Api.AuditLog.getAll, + + showData: function(response) { + this.showChildView('list_region', new ListView({ + collection: new AuditLogModel.Collection(response) + })); + }, + + showError: function(err) { + this.showChildView('list_region', new ErrorView({ + code: err.code, + message: err.message, + retry: function () { + App.Controller.showAuditLog(); + } + })); + + 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; - App.Api.AuditLog.getAll(['user']) + view.fetch(['user']) .then(response => { if (!view.isDestroyed() && response && response.length) { - view.showChildView('list_region', new ListView({ - collection: new AuditLogModel.Collection(response) - })); + view.showData(response); } else { - view.showChildView('list_region', new EmptyView({ - title: App.i18n('audit-log', 'empty'), - subtitle: App.i18n('audit-log', 'empty-subtitle') - })); + view.showEmpty(); } }) .catch(err => { - view.showChildView('list_region', new ErrorView({ - code: err.code, - message: err.message, - retry: function () { - App.Controller.showAuditLog(); - } - })); - - console.error(err); + view.showError(err); }) .then(() => { view.ui.dimmer.removeClass('active'); diff --git a/frontend/js/app/nginx/access/main.ejs b/frontend/js/app/nginx/access/main.ejs index c245ff4ae..975859364 100644 --- a/frontend/js/app/nginx/access/main.ejs +++ b/frontend/js/app/nginx/access/main.ejs @@ -3,6 +3,14 @@

<%- i18n('access-lists', 'title') %>

+ <% if (showAddButton) { %> <%- i18n('access-lists', 'add') %> diff --git a/frontend/js/app/nginx/access/main.js b/frontend/js/app/nginx/access/main.js index d14a9eb49..513f58659 100644 --- a/frontend/js/app/nginx/access/main.js +++ b/frontend/js/app/nginx/access/main.js @@ -14,7 +14,44 @@ module.exports = Mn.View.extend({ list_region: '.list-region', add: '.add-item', help: '.help', - dimmer: '.dimmer' + dimmer: '.dimmer', + search: '.search-form', + query: 'input[name="source-query"]' + }, + + fetch: App.Api.Nginx.AccessLists.getAll, + + showData: function(response) { + this.showChildView('list_region', new ListView({ + collection: new AccessListModel.Collection(response) + })); + }, + + showError: function(err) { + this.showChildView('list_region', new ErrorView({ + code: err.code, + message: err.message, + retry: function () { + App.Controller.showNginxAccess(); + } + })); + + console.error(err); + }, + + showEmpty: function() { + let manage = App.Cache.User.canManage('access_lists'); + + this.showChildView('list_region', new EmptyView({ + title: App.i18n('access-lists', 'empty'), + subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}), + link: manage ? App.i18n('access-lists', 'add') : null, + btn_color: 'teal', + permission: 'access_lists', + action: function () { + App.Controller.showNginxAccessListForm(); + } + })); }, regions: { @@ -30,6 +67,17 @@ module.exports = Mn.View.extend({ 'click @ui.help': function (e) { e.preventDefault(); App.Controller.showHelp(App.i18n('access-lists', 'help-title'), App.i18n('access-lists', 'help-content')); + }, + + 'submit @ui.search': function (e) { + e.preventDefault(); + let query = this.ui.query.val(); + + this.fetch(['owner', 'items', 'clients'], query) + .then(response => this.showData(response)) + .catch(err => { + this.showError(err); + }); } }, @@ -40,39 +88,18 @@ module.exports = Mn.View.extend({ onRender: function () { let view = this; - App.Api.Nginx.AccessLists.getAll(['owner', 'items', 'clients']) + view.fetch(['owner', 'items', 'clients']) .then(response => { if (!view.isDestroyed()) { if (response && response.length) { - view.showChildView('list_region', new ListView({ - collection: new AccessListModel.Collection(response) - })); + view.showData(response); } else { - let manage = App.Cache.User.canManage('access_lists'); - - view.showChildView('list_region', new EmptyView({ - title: App.i18n('access-lists', 'empty'), - subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}), - link: manage ? App.i18n('access-lists', 'add') : null, - btn_color: 'teal', - permission: 'access_lists', - action: function () { - App.Controller.showNginxAccessListForm(); - } - })); + view.showEmpty(); } } }) .catch(err => { - view.showChildView('list_region', new ErrorView({ - code: err.code, - message: err.message, - retry: function () { - App.Controller.showNginxAccess(); - } - })); - - console.error(err); + view.showError(err); }) .then(() => { view.ui.dimmer.removeClass('active'); diff --git a/frontend/js/app/nginx/certificates/main.ejs b/frontend/js/app/nginx/certificates/main.ejs index cc3624d54..dbd6fa85d 100644 --- a/frontend/js/app/nginx/certificates/main.ejs +++ b/frontend/js/app/nginx/certificates/main.ejs @@ -3,6 +3,14 @@

<%- i18n('certificates', 'title') %>

+ <% if (showAddButton) { %>