From e4f219a2861e3f7a98c1022b6ac275d2b4ca3c27 Mon Sep 17 00:00:00 2001 From: MattIPv4 Date: Thu, 11 Jun 2020 15:03:52 +0100 Subject: [PATCH] Don't use duplicated computed value for nginx dir, watch initial value --- src/nginxconfig/templates/app.vue | 5 +---- .../templates/domain_sections/https.vue | 21 +++++++------------ .../templates/global_sections/nginx.vue | 11 ++++++++++ src/nginxconfig/templates/setup.vue | 5 +---- .../templates/setup_sections/certbot.vue | 8 +++---- .../templates/setup_sections/download.vue | 6 ++++-- .../templates/setup_sections/ssl.vue | 7 ++----- 7 files changed, 30 insertions(+), 33 deletions(-) diff --git a/src/nginxconfig/templates/app.vue b/src/nginxconfig/templates/app.vue index 6acdb71..1504301 100644 --- a/src/nginxconfig/templates/app.vue +++ b/src/nginxconfig/templates/app.vue @@ -139,9 +139,6 @@ THE SOFTWARE. activeDomains() { return this.$data.domains.map((domain, index) => [domain, index]).filter(d => d[0] !== null); }, - nginxDir() { - return this.$data.global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, ''); - }, confFiles() { return generators(this.$data.domains.filter(d => d !== null), this.$data.global); }, @@ -217,7 +214,7 @@ THE SOFTWARE. updateDiff(newConf, oldConf) { // Calculate the diff & highlight after render this.$data.confFilesOutput = Object.values(diff(newConf, oldConf)).map(conf => { - const name = `${escape(this.nginxDir)}/${conf[0]}`; + const name = `${escape(this.$data.global.nginx.nginxConfigDirectory.computed)}/${conf[0]}`; return [ name, conf[1], diff --git a/src/nginxconfig/templates/domain_sections/https.vue b/src/nginxconfig/templates/domain_sections/https.vue index 7156ae0..e613f1a 100644 --- a/src/nginxconfig/templates/domain_sections/https.vue +++ b/src/nginxconfig/templates/domain_sections/https.vue @@ -165,7 +165,7 @@ THE SOFTWARE. @@ -182,7 +182,7 @@ THE SOFTWARE. @@ -247,28 +247,23 @@ THE SOFTWARE. }; export default { - name: 'DomainHTTPS', // Component name - display: i18n.common.https, // Display name for tab - key: 'https', // Key for data in parent - delegated: delegatedFromDefaults(defaults), // Data the parent will present here + name: 'DomainHTTPS', // Component name + display: i18n.common.https, // Display name for tab + key: 'https', // Key for data in parent + delegated: delegatedFromDefaults(defaults), // Data the parent will present here components: { PrettyCheck, PrettyRadio, }, props: { - data: Object, // Data delegated back to us from parent + data: Object, // Data delegated back to us from parent }, data () { return { i18n, }; }, - computed: { - ...computedFromDefaults(defaults, 'https'), // Getters & setters for the delegated data - nginxDir() { - return this.$parent.$parent.$data.global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, ''); - }, - }, + computed: computedFromDefaults(defaults, 'https'), // Getters & setters for the delegated data watch: { // Disable everything if https is disabled '$props.data.https': { diff --git a/src/nginxconfig/templates/global_sections/nginx.vue b/src/nginxconfig/templates/global_sections/nginx.vue index c33208e..a71ae2a 100644 --- a/src/nginxconfig/templates/global_sections/nginx.vue +++ b/src/nginxconfig/templates/global_sections/nginx.vue @@ -128,6 +128,7 @@ THE SOFTWARE. const defaults = { nginxConfigDirectory: { default: '/etc/nginx/', + computed: '/etc/nginx', // We use a watcher to trim trailing slashes enabled: true, }, workerProcesses: { @@ -170,6 +171,16 @@ THE SOFTWARE. }, computed: computedFromDefaults(defaults, 'nginx'), // Getters & setters for the delegated data watch: { + // Clean nginx directory of trailing slashes + '$props.data.nginxConfigDirectory': { + handler(data) { + // This might cause recursion, but seems not to + if (data.enabled) + if (data.computed.endsWith('/')) + data.computed = data.computed.replace(/\/+$/, ''); + }, + deep: true, + }, // Check worker processes selection is valid '$props.data.workerProcesses': { handler(data) { diff --git a/src/nginxconfig/templates/setup.vue b/src/nginxconfig/templates/setup.vue index 9b5ecd0..54dc5af 100644 --- a/src/nginxconfig/templates/setup.vue +++ b/src/nginxconfig/templates/setup.vue @@ -94,9 +94,6 @@ THE SOFTWARE. if (index >= 0) return tabs[index]; return false; }, - nginxDir() { - return this.$props.data.global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, ''); - }, tarName() { const domains = this.$props.data.domains.filter(d => d !== null).map(d => d.server.domain.computed); return `nginxconfig.io-${domains.join(',')}.tar.gz`; @@ -149,7 +146,7 @@ THE SOFTWARE. // Convert it to base64 string const b64 = btoa(String.fromCharCode(...contents)); - return `echo '${b64}' | base64 --decode > ${this.nginxDir}/${this.tarName}`; + return `echo '${b64}' | base64 --decode > ${this.$props.data.global.nginx.nginxConfigDirectory.computed}/${this.tarName}`; }, setupCopy() { const originalText = this.$refs.copyTar.textContent; diff --git a/src/nginxconfig/templates/setup_sections/certbot.vue b/src/nginxconfig/templates/setup_sections/certbot.vue index 811f58d..8b787eb 100644 --- a/src/nginxconfig/templates/setup_sections/certbot.vue +++ b/src/nginxconfig/templates/setup_sections/certbot.vue @@ -113,9 +113,6 @@ THE SOFTWARE. }; }, computed: { - nginxDir() { - return this.$props.data.global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, ''); - }, letsEncryptDir() { return this.$props.data.global.https.letsEncryptRoot.computed.replace(/\/+$/, ''); }, @@ -128,12 +125,13 @@ THE SOFTWARE. return false; }, sitesAvailable() { - if (!this.$props.data.global.tools.modularizedStructure.computed) return `${this.nginxDir}/nginx.conf`; + if (!this.$props.data.global.tools.modularizedStructure.computed) + return `${this.$props.data.global.nginx.nginxConfigDirectory.computed}/nginx.conf`; const enabledAvailable = this.$props.data.global.tools.symlinkVhost.computed ? 'available' : 'enabled'; return this.$props.data.domains .filter(domain => domain.https.certType.computed === 'letsEncrypt') - .map(domain => `${this.nginxDir}/sites-${enabledAvailable}/${domain.server.domain.computed}.conf`) + .map(domain => `${this.$props.data.global.nginx.nginxConfigDirectory.computed}/sites-${enabledAvailable}/${domain.server.domain.computed}.conf`) .join(' '); }, certbotCmds() { diff --git a/src/nginxconfig/templates/setup_sections/download.vue b/src/nginxconfig/templates/setup_sections/download.vue index 5e606ab..233f8ee 100644 --- a/src/nginxconfig/templates/setup_sections/download.vue +++ b/src/nginxconfig/templates/setup_sections/download.vue @@ -33,7 +33,7 @@ THE SOFTWARE.  {{ $parent.tarName }}
- {{ $parent.nginxDir }} + {{ $props.data.global.nginx.nginxConfigDirectory.computed }} {{ i18n.templates.setupSections.download.directory }}

@@ -50,7 +50,9 @@ THE SOFTWARE.


- +

diff --git a/src/nginxconfig/templates/setup_sections/ssl.vue b/src/nginxconfig/templates/setup_sections/ssl.vue index 2156dcf..4948759 100644 --- a/src/nginxconfig/templates/setup_sections/ssl.vue +++ b/src/nginxconfig/templates/setup_sections/ssl.vue @@ -31,8 +31,8 @@ THE SOFTWARE.


-

@@ -83,9 +83,6 @@ THE SOFTWARE. }; }, computed: { - nginxDir() { - return this.$props.data.global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, ''); - }, letsEncryptDir() { return this.$props.data.global.https.letsEncryptRoot.computed.replace(/\/+$/, ''); },