diff --git a/backend/internal/certificate.js b/backend/internal/certificate.js
index 34b8fdf5..bdbdb703 100644
--- a/backend/internal/certificate.js
+++ b/backend/internal/certificate.js
@@ -313,6 +313,7 @@ const internalCertificate = {
.where('is_deleted', 0)
.andWhere('id', data.id)
.allowGraph('[owner]')
+ .allowGraph('[proxy_hosts]')
.first();
if (access_data.permission_visibility !== 'all') {
@@ -464,6 +465,7 @@ const internalCertificate = {
.where('is_deleted', 0)
.groupBy('id')
.allowGraph('[owner]')
+ .allowGraph('[proxy_hosts]')
.orderBy('nice_name', 'ASC');
if (access_data.permission_visibility !== 'all') {
diff --git a/backend/models/certificate.js b/backend/models/certificate.js
index 534d927c..245dfda2 100644
--- a/backend/models/certificate.js
+++ b/backend/models/certificate.js
@@ -4,7 +4,6 @@
const db = require('../db');
const helpers = require('../lib/helpers');
const Model = require('objection').Model;
-const User = require('./user');
const now = require('./now_helper');
Model.knex(db);
@@ -68,6 +67,8 @@ class Certificate extends Model {
}
static get relationMappings () {
+ const ProxyHost = require('./proxy_host');
+ const User = require('./user');
return {
owner: {
relation: Model.HasOneRelation,
@@ -79,6 +80,17 @@ class Certificate extends Model {
modify: function (qb) {
qb.where('user.is_deleted', 0);
}
+ },
+ proxy_hosts: {
+ relation: Model.HasManyRelation,
+ modelClass: ProxyHost,
+ join: {
+ from: 'certificate.id',
+ to: 'proxy_host.certificate_id'
+ },
+ modify: function (qb) {
+ qb.where('proxy_host.is_deleted', 0);
+ }
}
};
}
diff --git a/frontend/js/app/nginx/certificates/list/item.ejs b/frontend/js/app/nginx/certificates/list/item.ejs
index 9a0d6b27..b3d0ab7a 100644
--- a/frontend/js/app/nginx/certificates/list/item.ejs
+++ b/frontend/js/app/nginx/certificates/list/item.ejs
@@ -33,6 +33,13 @@
<%- formatDbDate(expires_on, 'Do MMMM YYYY, h:mm a') %>
|
+
+ <% if (proxy_hosts.length > 0) { %>
+ <%- i18n('certificates', 'in-use') %>
+ <% } else { %>
+ <%- i18n('certificates', 'inactive') %>
+ <% } %>
+ |
<% if (canManage) { %>
|
diff --git a/frontend/js/app/nginx/certificates/list/item.js b/frontend/js/app/nginx/certificates/list/item.js
index 7fa1c681..d73466c3 100644
--- a/frontend/js/app/nginx/certificates/list/item.js
+++ b/frontend/js/app/nginx/certificates/list/item.js
@@ -44,12 +44,23 @@ module.exports = Mn.View.extend({
},
},
- templateContext: {
- canManage: App.Cache.User.canManage('certificates'),
- isExpired: function () {
- return moment(this.expires_on).isBefore(moment());
- },
- dns_providers: dns_providers
+ templateContext: function () {
+ return {
+ canManage: App.Cache.User.canManage('certificates'),
+ isExpired: function () {
+ return moment(this.expires_on).isBefore(moment());
+ },
+ dns_providers: dns_providers,
+ proxy_hosts: this.getProxyHosts()
+ };
+ },
+
+ getProxyHosts: function () {
+ const hosts = this.model.attributes.proxy_hosts || [];
+ return hosts.reduce((acc, host) => {
+ acc.push(...(host.domain_names || []));
+ return acc;
+ }, []);
},
initialize: function () {
diff --git a/frontend/js/app/nginx/certificates/list/main.ejs b/frontend/js/app/nginx/certificates/list/main.ejs
index f0623779..329b5843 100644
--- a/frontend/js/app/nginx/certificates/list/main.ejs
+++ b/frontend/js/app/nginx/certificates/list/main.ejs
@@ -2,8 +2,8 @@
|
<%- i18n('str', 'name') %> |
<%- i18n('all-hosts', 'cert-provider') %> |
- <%- i18n('str', 'active-hosts') %> |
<%- i18n('str', 'expires') %> |
+ <%- i18n('str', 'status') %> |
<% if (canManage) { %>
|
<% } %>
diff --git a/frontend/js/app/nginx/certificates/main.js b/frontend/js/app/nginx/certificates/main.js
index 89562768..1192873b 100644
--- a/frontend/js/app/nginx/certificates/main.js
+++ b/frontend/js/app/nginx/certificates/main.js
@@ -74,7 +74,7 @@ module.exports = Mn.View.extend({
e.preventDefault();
let query = this.ui.query.val();
- this.fetch(['owner'], query)
+ this.fetch(['owner','proxy_hosts'], query)
.then(response => this.showData(response))
.catch(err => {
this.showError(err);
@@ -89,7 +89,7 @@ module.exports = Mn.View.extend({
onRender: function () {
let view = this;
- view.fetch(['owner'])
+ view.fetch(['owner','proxy_hosts'])
.then(response => {
if (!view.isDestroyed()) {
if (response && response.length) {
diff --git a/frontend/js/i18n/messages.json b/frontend/js/i18n/messages.json
index 138e3d72..8eb68d18 100644
--- a/frontend/js/i18n/messages.json
+++ b/frontend/js/i18n/messages.json
@@ -35,8 +35,7 @@
"value": "Value",
"please-wait": "Please wait...",
"all": "All",
- "any": "Any",
- "active-hosts": "Active Hosts"
+ "any": "Any"
},
"login": {
"title": "Login to your account"
@@ -207,7 +206,10 @@
"reachability-other": "There is a server found at this domain but it returned an unexpected status code {code}. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.",
"download": "Download",
"renew-title": "Renew Let's Encrypt Certificate",
- "search": "Search Certificate…"
+ "search": "Search Certificate…",
+ "in-use" : "In use",
+ "inactive": "Inactive",
+ "active-domain_names": "Active domain names"
},
"access-lists": {
"title": "Access Lists",