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 @@
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 @@