From cb014027bb9412d20913b296e30d613da53d413f Mon Sep 17 00:00:00 2001
From: chaptergy <26956711+chaptergy@users.noreply.github.com>
Date: Wed, 4 Nov 2020 19:31:40 +0100
Subject: [PATCH] Makes sure credentials folder exist every time before saving
 credentials

---
 backend/internal/certificate.js | 2 +-
 backend/setup.js                | 2 +-
 docker/Dockerfile               | 1 -
 docker/dev/Dockerfile           | 1 -
 4 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/backend/internal/certificate.js b/backend/internal/certificate.js
index 6f1fc4d..19e0592 100644
--- a/backend/internal/certificate.js
+++ b/backend/internal/certificate.js
@@ -789,7 +789,7 @@ const internalCertificate = {
 		logger.info(`Requesting Let'sEncrypt certificates via ${dns_plugin.display_name} for Cert #${certificate.id}: ${certificate.domain_names.join(', ')}`);
 
 		const credentials_loc = '/etc/letsencrypt/credentials/credentials-' + certificate.id;
-		const credentials_cmd = 'echo \'' + certificate.meta.dns_provider_credentials.replace('\'', '\\\'') + '\' > \'' + credentials_loc + '\' && chmod 600 \'' + credentials_loc + '\'';
+		const credentials_cmd = 'mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo \'' + certificate.meta.dns_provider_credentials.replace('\'', '\\\'') + '\' > \'' + credentials_loc + '\' && chmod 600 \'' + credentials_loc + '\'';
 		const prepare_cmd     = 'pip3 install ' + dns_plugin.package_name + '==' + dns_plugin.package_version + ' ' + dns_plugin.dependencies;
 
 		// Whether the plugin has a --<name>-credentials argument
diff --git a/backend/setup.js b/backend/setup.js
index 76957be..2a5ba96 100644
--- a/backend/setup.js
+++ b/backend/setup.js
@@ -182,7 +182,7 @@ const setupCertbotPlugins = () => {
 
 						// Make sure credentials file exists
 						const credentials_loc = '/etc/letsencrypt/credentials/credentials-' + certificate.id; 
-						const credentials_cmd = '[ -f \'' + credentials_loc + '\' ] || { mkdir /etc/letsencrypt/credentials; echo \'' + certificate.meta.dns_provider_credentials.replace('\'', '\\\'') + '\' > \'' + credentials_loc + '\' && chmod 600 \'' + credentials_loc + '\'; }';
+						const credentials_cmd = '[ -f \'' + credentials_loc + '\' ] || { mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo \'' + certificate.meta.dns_provider_credentials.replace('\'', '\\\'') + '\' > \'' + credentials_loc + '\' && chmod 600 \'' + credentials_loc + '\'; }';
 						promises.push(utils.exec(credentials_cmd));
 					}
 				});
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 011f5d6..acac5fa 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -38,7 +38,6 @@ COPY global							/app/global
 
 WORKDIR /app
 RUN yarn install
-RUN mkdir -p /etc/letsencrypt/credentials
 
 # Remove frontend service not required for prod, dev nginx config as well
 RUN rm -rf /etc/services.d/frontend RUN rm -f /etc/nginx/conf.d/dev.conf
diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile
index 2d06d16..45ee534 100644
--- a/docker/dev/Dockerfile
+++ b/docker/dev/Dockerfile
@@ -18,7 +18,6 @@ RUN cd /usr \
 
 COPY rootfs /
 RUN rm -f /etc/nginx/conf.d/production.conf
-RUN mkdir -p /etc/letsencrypt/credentials
 
 # s6 overlay
 RUN curl -L -o /tmp/s6-overlay-amd64.tar.gz "https://github.com/just-containers/s6-overlay/releases/download/v1.22.1.0/s6-overlay-amd64.tar.gz" \