From cc0bbad2b04403e2a52c76c48b98536ea2341aae Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Sat, 29 Dec 2018 23:19:32 -0800 Subject: [PATCH] updated certbot to 0.29.1 specs --- .../built/user/system/CertbotManager.js | 97 ++++++++++++--- .../built/user/system/CertbotManager.js.map | 2 +- app-backend/src/user/system/CertbotManager.ts | 113 ++++++++++++++---- 3 files changed, 174 insertions(+), 38 deletions(-) diff --git a/app-backend/built/user/system/CertbotManager.js b/app-backend/built/user/system/CertbotManager.js index 842a65f..3e02f25 100644 --- a/app-backend/built/user/system/CertbotManager.js +++ b/app-backend/built/user/system/CertbotManager.js @@ -3,7 +3,9 @@ const CaptainConstants = require("../../utils/CaptainConstants"); const Logger = require("../../utils/Logger"); const fs = require("fs-extra"); const ApiStatusCodes = require("../../api/ApiStatusCodes"); -const CAPTAIN_WEBROOT_PATH_CERTBOT = '/captain-webroot'; +const WEBROOT_PATH_IN_CERTBOT = '/captain-webroot'; +const WEBROOT_PATH_IN_CAPTAIN = CaptainConstants.captainStaticFilesDir + + CaptainConstants.nginxDomainSpecificHtmlDir; const shouldUseStaging = false; // CaptainConstants.isDebug; class CertbotManager { constructor(dockerApi) { @@ -33,14 +35,10 @@ class CertbotManager { const dockerApi = this.dockerApi; const self = this; Logger.d('Enabling SSL for ' + domainName); - self.domainValidOrThrow(domainName); return Promise.resolve() .then(function () { - const webrootInCaptainContainer = CaptainConstants.captainStaticFilesDir + - CaptainConstants.nginxDomainSpecificHtmlDir + - '/' + - domainName; - return fs.ensureDir(webrootInCaptainContainer); + self.domainValidOrThrow(domainName); + return self.ensureDomainHasDirectory(domainName); }) .then(function () { const cmd = [ @@ -48,7 +46,7 @@ class CertbotManager { 'certonly', '--webroot', '-w', - CAPTAIN_WEBROOT_PATH_CERTBOT + '/' + domainName, + WEBROOT_PATH_IN_CERTBOT + '/' + domainName, '-d', domainName, ]; @@ -162,6 +160,61 @@ class CertbotManager { } }); } + /* + Certificate Name: customdomain-another.hm2.captainduckduck.com + Domains: customdomain-another.hm2.captainduckduck.com + Expiry Date: 2019-03-22 04:22:55+00:00 (VALID: 81 days) + Certificate Path: /etc/letsencrypt/live/customdomain-another.hm2.captainduckduck.com/fullchain.pem + Private Key Path: /etc/letsencrypt/live/customdomain-another.hm2.captainduckduck.com/privkey.pem + Certificate Name: testing.cp.hm.captainduckduck.com + Domains: testing.cp.hm.captainduckduck.com + Expiry Date: 2019-03-21 18:42:17+00:00 (VALID: 81 days) + Certificate Path: /etc/letsencrypt/live/testing.cp.hm.captainduckduck.com/fullchain.pem + Private Key Path: /etc/letsencrypt/live/testing.cp.hm.captainduckduck.com/privkey.pem + Certificate Name: registry.cp.hm.captainduckduck.com + Domains: registry.cp.hm.captainduckduck.com + Expiry Date: 2019-03-25 04:56:45+00:00 (VALID: 84 days) + Certificate Path: /etc/letsencrypt/live/registry.cp.hm.captainduckduck.com/fullchain.pem + Private Key Path: /etc/letsencrypt/live/registry.cp.hm.captainduckduck.com/privkey.pem + Certificate Name: captain.cp.hm.captainduckduck.com + Domains: captain.cp.hm.captainduckduck.com + Expiry Date: 2019-03-20 22:25:50+00:00 (VALID: 80 days) + Certificate Path: /etc/letsencrypt/live/captain.cp.hm.captainduckduck.com/fullchain.pem + Private Key Path: /etc/letsencrypt/live/captain.cp.hm.captainduckduck.com/privkey.pem + Certificate Name: testing2.cp.hm.captainduckduck.com + Domains: testing2.cp.hm.captainduckduck.com + Expiry Date: 2019-03-21 18:42:55+00:00 (VALID: 81 days) + Certificate Path: /etc/letsencrypt/live/testing2.cp.hm.captainduckduck.com/fullchain.pem + Private Key Path: /etc/letsencrypt/live/testing2.cp.hm.captainduckduck.com/privkey.pem + +*/ + ensureAllCurrentlyRegisteredDomainsHaveDirs() { + const self = this; + return Promise.resolve() // + .then(function () { + return self + .runCommand(['certbot', 'certificates']) + .then(function (output) { + const lines = output.split('\n'); + const domains = []; + lines.forEach(l => { + if (l.indexOf('Certificate Name:') >= 0) { + domains.push(l.replace('Certificate Name:', '').trim()); + } + }); + return domains; + }); + }) + .then(function (allDomains) { + const p = Promise.resolve(); + allDomains.forEach(d => { + p.then(function () { + return self.ensureDomainHasDirectory(d); + }); + }); + return p; + }); + } runCommand(cmd) { const dockerApi = this.dockerApi; const self = this; @@ -170,6 +223,12 @@ class CertbotManager { return dockerApi.executeCommand(CaptainConstants.certbotServiceName, cmd); }); } + ensureDomainHasDirectory(domainName) { + return Promise.resolve() // + .then(function () { + return fs.ensureDir(WEBROOT_PATH_IN_CAPTAIN + '/' + domainName); + }); + } renewAllCerts() { const self = this; /* @@ -192,15 +251,20 @@ class CertbotManager { if (shouldUseStaging) { cmd.push('--staging'); } - return self.runCommand(cmd).then(function (output) { + return Promise.resolve() // + .then(function () { + return self.ensureAllCurrentlyRegisteredDomainsHaveDirs(); + }) + .then(function () { + return self.runCommand(cmd); + }) + .then(function (output) { // Ignore output :) }); } init(myNodeId) { const dockerApi = this.dockerApi; const self = this; - const domainSpecificRootDirectoryInHost = CaptainConstants.captainStaticFilesDir + - CaptainConstants.nginxDomainSpecificHtmlDir; function createCertbotServiceOnNode(nodeId) { return dockerApi .createServiceOnNodeId(CaptainConstants.certbotImageName, CaptainConstants.certbotServiceName, undefined, nodeId, undefined, undefined, undefined) @@ -224,7 +288,7 @@ class CertbotManager { return fs.ensureDir(CaptainConstants.letsEncryptLibPath); }) .then(function () { - return fs.ensureDir(domainSpecificRootDirectoryInHost); + return fs.ensureDir(WEBROOT_PATH_IN_CAPTAIN); }) .then(function () { return dockerApi.isServiceRunningByName(CaptainConstants.certbotServiceName); @@ -258,7 +322,7 @@ class CertbotManager { }) .then(function () { Logger.d('Updating Certbot service...'); - return dockerApi.updateService(CaptainConstants.certbotServiceName, undefined, [ + return dockerApi.updateService(CaptainConstants.certbotServiceName, CaptainConstants.certbotImageName, [ { hostPath: CaptainConstants.letsEncryptEtcPath, containerPath: '/etc/letsencrypt', @@ -268,12 +332,15 @@ class CertbotManager { containerPath: '/var/lib/letsencrypt', }, { - hostPath: domainSpecificRootDirectoryInHost, - containerPath: CAPTAIN_WEBROOT_PATH_CERTBOT, + hostPath: WEBROOT_PATH_IN_CAPTAIN, + containerPath: WEBROOT_PATH_IN_CERTBOT, }, ], // No need to certbot to be connected to the network undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined); + }) + .then(function () { + return self.ensureAllCurrentlyRegisteredDomainsHaveDirs(); }) .then(function () { // schedule the first attempt to renew certs in 1 minute diff --git a/app-backend/built/user/system/CertbotManager.js.map b/app-backend/built/user/system/CertbotManager.js.map index c42bff3..caeba91 100644 --- a/app-backend/built/user/system/CertbotManager.js.map +++ b/app-backend/built/user/system/CertbotManager.js.map @@ -1 +1 @@ -{"version":3,"file":"CertbotManager.js","sourceRoot":"","sources":["../../../src/user/system/CertbotManager.ts"],"names":[],"mappings":";AAAA,iEAAiE;AACjE,6CAA6C;AAC7C,+BAA+B;AAE/B,2DAA2D;AAG3D,MAAM,4BAA4B,GAAG,kBAAkB,CAAA;AAEvD,MAAM,gBAAgB,GAAG,KAAK,CAAA,CAAC,4BAA4B;AAE3D,MAAM,cAAc;IAChB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;QACpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC9B,CAAC;IAED,kBAAkB,CAAC,UAAkB;QACjC,IAAI,CAAC,UAAU,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;SAC1C;QAED,MAAM,aAAa,GAAG,iBAAiB,CAAA;QAEvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;SACtC;IACL,CAAC;IAED,4BAA4B,CAAC,UAAkB;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAA;QAEjB,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAA;QAEnC,OAAO,QAAQ,GAAG,UAAU,GAAG,gBAAgB,CAAA;IACnD,CAAC;IAED,2BAA2B,CAAC,UAAkB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAA;QAEjB,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAA;QAEnC,OAAO,QAAQ,GAAG,UAAU,GAAG,cAAc,CAAA;IACjD,CAAC;IAED,SAAS,CAAC,UAAkB;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAA;QAEjB,MAAM,CAAC,CAAC,CAAC,mBAAmB,GAAG,UAAU,CAAC,CAAA;QAE1C,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAA;QAEnC,OAAO,OAAO,CAAC,OAAO,EAAE;aACnB,IAAI,CAAC;YACF,MAAM,yBAAyB,GAC3B,gBAAgB,CAAC,qBAAqB;gBACtC,gBAAgB,CAAC,0BAA0B;gBAC3C,GAAG;gBACH,UAAU,CAAA;YAEd,OAAO,EAAE,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAA;QAClD,CAAC,CAAC;aACD,IAAI,CAAC;YACF,MAAM,GAAG,GAAG;gBACR,SAAS;gBACT,UAAU;gBACV,WAAW;gBACX,IAAI;gBACJ,4BAA4B,GAAG,GAAG,GAAG,UAAU;gBAC/C,IAAI;gBACJ,UAAU;aACb,CAAA;YAED,IAAI,gBAAgB,EAAE;gBAClB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;aACxB;YAED,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAS,MAAM;gBAC5C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;gBAEhB,IACI,MAAM,CAAC,OAAO,CACV,6DAA6D,CAChE,IAAI,CAAC,EACR;oBACE,OAAO,IAAI,CAAA;iBACd;gBAED,IACI,MAAM,CAAC,OAAO,CACV,sDAAsD,CACzD,IAAI,CAAC,EACR;oBACE,OAAO,IAAI,CAAA;iBACd;gBAED,MAAM,cAAc,CAAC,WAAW,CAC5B,cAAc,CAAC,mBAAmB,EAClC,yCAAyC;oBACrC,UAAU;oBACV,uBAAuB;oBACvB,MAAM,CACb,CAAA;YACL,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACV,CAAC;IAED,gBAAgB,CAAC,YAAoB;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAA;QAEjB,OAAO,OAAO,CAAC,OAAO,EAAE;aACnB,IAAI,CAAC;YACF,MAAM,WAAW,GACb,gBAAgB,CAAC,kBAAkB;gBACnC,iBAAiB;gBACjB,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtC,gCAAgC,CAAA;YAEpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;gBAC7B,MAAM,CAAC,CAAC,CACJ,8DAA8D,CACjE,CAAA;gBACD,OAAO,SAAS,CAAA;aACnB;YAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;YAEzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,MAAM,CAAC,CAAC,CACJ,0EAA0E,CAC7E,CAAA;gBACD,OAAO,SAAS,CAAA;aACnB;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,MAAM,IAAI,KAAK,CACX,uEAAuE;oBACnE,WAAW,CAClB,CAAA;aACJ;YAED,MAAM,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAA;YAE/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;gBAC7B,MAAM,IAAI,KAAK,CACX,mDAAmD;oBAC/C,WAAW,CAClB,CAAA;aACJ;YAED,OAAO,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QACnC,CAAC,CAAC;aACD,IAAI,CAAC,UAAS,WAAW;YACtB,IAAI,CAAC,WAAW,EAAE;gBACd,MAAM,GAAG,GAAG;oBACR,SAAS;oBACT,UAAU;oBACV,SAAS;oBACT,YAAY;oBACZ,aAAa;oBACb,gBAAgB;iBACnB,CAAA;gBAED,IAAI,gBAAgB,EAAE;oBAClB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;iBACxB;gBAED,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAS,cAAc;oBACpD,IACI,cAAc,CAAC,OAAO,CAClB,0DAA0D,CAC7D,IAAI,CAAC,EACR;wBACE,OAAO,IAAI,CAAA;qBACd;oBAED,MAAM,IAAI,KAAK,CACX,yDAAyD;wBACrD,cAAc,CACrB,CAAA;gBACL,CAAC,CAAC,CAAA;aACL;iBAAM;gBACH;;;;;;;;;;;;;;;;;;;;;mBAqBG;gBAEH,IAAI,OAAO,GAAG,SAAS,CAAA;gBAEvB,IACI,WAAW;oBACX,WAAW,CAAC,IAAI;oBAChB,WAAW,CAAC,IAAI,CAAC,OAAO;oBACxB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EACzC;oBACE,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAA;oBAClC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;wBAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,YAAY,EAAE;4BAC3C,OAAO,IAAI,CAAA;yBACd;qBACJ;iBACJ;gBAED,MAAM,IAAI,KAAK,CACX,kDAAkD;oBAClD,OAAO;oBACH,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;oBACzB,CAAC,CAAC,MAAM,CACf,CAAA;aACJ;QACL,CAAC,CAAC,CAAA;IACV,CAAC;IAED,UAAU,CAAC,GAAa;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAA;QAEjB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;YAC1B,MAAM,qBAAqB,GAAG,CAAC,GAAG,GAAG,EAAE,mBAAmB,CAAC,CAAA;YAC3D,OAAO,SAAS,CAAC,cAAc,CAC3B,gBAAgB,CAAC,kBAAkB,EACnC,GAAG,CACN,CAAA;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED,aAAa;QACT,MAAM,IAAI,GAAG,IAAI,CAAA;QAEjB;;;;;;;;;WASG;QAEH,mEAAmE;QACnE,mEAAmE;QACnE,wDAAwD;QAExD,UAAU,CAAC;YACP,IAAI,CAAC,aAAa,EAAE,CAAA;QACxB,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAA;QAEtB,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAEhC,IAAI,gBAAgB,EAAE;YAClB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;SACxB;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAS,MAAM;YAC5C,mBAAmB;QACvB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAAC,QAAgB;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAA;QAEjB,MAAM,iCAAiC,GACnC,gBAAgB,CAAC,qBAAqB;YACtC,gBAAgB,CAAC,0BAA0B,CAAA;QAE/C,SAAS,0BAA0B,CAAC,MAAc;YAC9C,OAAO,SAAS;iBACX,qBAAqB,CAClB,gBAAgB,CAAC,gBAAgB,EACjC,gBAAgB,CAAC,kBAAkB,EACnC,SAAS,EACT,MAAM,EACN,SAAS,EACT,SAAS,EACT,SAAS,CACZ;iBACA,IAAI,CAAC;gBACF,MAAM,gBAAgB,GAAG,IAAI,CAAA;gBAC7B,MAAM,CAAC,CAAC,CACJ,cAAc;oBACV,gBAAgB,GAAG,IAAI;oBACvB,kCAAkC,CACzC,CAAA;gBACD,OAAO,IAAI,OAAO,CAAU,UAAS,OAAO,EAAE,MAAM;oBAChD,UAAU,CAAC;wBACP,OAAO,CAAC,IAAI,CAAC,CAAA;oBACjB,CAAC,EAAE,gBAAgB,CAAC,CAAA;gBACxB,CAAC,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;QACV,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,EAAE;aACnB,IAAI,CAAC;YACF,OAAO,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAA;QAC5D,CAAC,CAAC;aACD,IAAI,CAAC;YACF,OAAO,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAA;QAC5D,CAAC,CAAC;aACD,IAAI,CAAC;YACF,OAAO,EAAE,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAA;QAC1D,CAAC,CAAC;aACD,IAAI,CAAC;YACF,OAAO,SAAS,CAAC,sBAAsB,CACnC,gBAAgB,CAAC,kBAAkB,CACtC,CAAA;QACL,CAAC,CAAC;aACD,IAAI,CAAC,UAAS,SAAS;YACpB,IAAI,SAAS,EAAE;gBACX,MAAM,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAA;gBAEjD,OAAO,SAAS,CAAC,sBAAsB,CACnC,gBAAgB,CAAC,kBAAkB,EACnC,CAAC,CACJ,CAAA;aACJ;iBAAM;gBACH,MAAM,CAAC,CAAC,CACJ,wDAAwD,CAC3D,CAAA;gBAED,OAAO,0BAA0B,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC5C;oBACI,OAAO,QAAQ,CAAA;gBACnB,CAAC,CACJ,CAAA;aACJ;QACL,CAAC,CAAC;aACD,IAAI,CAAC,UAAS,MAAM;YACjB,IAAI,MAAM,KAAK,QAAQ,EAAE;gBACrB,MAAM,CAAC,CAAC,CACJ,6DAA6D,CAChE,CAAA;gBAED,OAAO,SAAS;qBACX,mBAAmB,CAChB,gBAAgB,CAAC,kBAAkB,CACtC;qBACA,IAAI,CAAC;oBACF,OAAO,0BAA0B,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC5C;wBACI,OAAO,IAAI,CAAA;oBACf,CAAC,CACJ,CAAA;gBACL,CAAC,CAAC,CAAA;aACT;iBAAM;gBACH,OAAO,IAAI,CAAA;aACd;QACL,CAAC,CAAC;aACD,IAAI,CAAC;YACF,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAA;YAEvC,OAAO,SAAS,CAAC,aAAa,CAC1B,gBAAgB,CAAC,kBAAkB,EACnC,SAAS,EACT;gBACI;oBACI,QAAQ,EAAE,gBAAgB,CAAC,kBAAkB;oBAC7C,aAAa,EAAE,kBAAkB;iBACpC;gBACD;oBACI,QAAQ,EAAE,gBAAgB,CAAC,kBAAkB;oBAC7C,aAAa,EAAE,sBAAsB;iBACxC;gBACD;oBACI,QAAQ,EAAE,iCAAiC;oBAC3C,aAAa,EAAE,4BAA4B;iBAC9C;aACJ;YACD,oDAAoD;YACpD,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,CACZ,CAAA;QACL,CAAC,CAAC;aACD,IAAI,CAAC;YACF,wDAAwD;YACxD,UAAU,CAAC;gBACP,IAAI,CAAC,aAAa,EAAE,CAAA;YACxB,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACV,CAAC;CACJ;AAED,iBAAS,cAAc,CAAA"} \ No newline at end of file +{"version":3,"file":"CertbotManager.js","sourceRoot":"","sources":["../../../src/user/system/CertbotManager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/app-backend/src/user/system/CertbotManager.ts b/app-backend/src/user/system/CertbotManager.ts index 5da5654..878e5fe 100644 --- a/app-backend/src/user/system/CertbotManager.ts +++ b/app-backend/src/user/system/CertbotManager.ts @@ -5,7 +5,10 @@ import uuid = require('uuid/v4') import ApiStatusCodes = require('../../api/ApiStatusCodes') import DockerApi = require('../../docker/DockerApi') -const CAPTAIN_WEBROOT_PATH_CERTBOT = '/captain-webroot' +const WEBROOT_PATH_IN_CERTBOT = '/captain-webroot' +const WEBROOT_PATH_IN_CAPTAIN = + CaptainConstants.captainStaticFilesDir + + CaptainConstants.nginxDomainSpecificHtmlDir const shouldUseStaging = false // CaptainConstants.isDebug; @@ -48,17 +51,10 @@ class CertbotManager { Logger.d('Enabling SSL for ' + domainName) - self.domainValidOrThrow(domainName) - return Promise.resolve() .then(function() { - const webrootInCaptainContainer = - CaptainConstants.captainStaticFilesDir + - CaptainConstants.nginxDomainSpecificHtmlDir + - '/' + - domainName - - return fs.ensureDir(webrootInCaptainContainer) + self.domainValidOrThrow(domainName) + return self.ensureDomainHasDirectory(domainName) }) .then(function() { const cmd = [ @@ -66,7 +62,7 @@ class CertbotManager { 'certonly', '--webroot', '-w', - CAPTAIN_WEBROOT_PATH_CERTBOT + '/' + domainName, + WEBROOT_PATH_IN_CERTBOT + '/' + domainName, '-d', domainName, ] @@ -230,6 +226,66 @@ class CertbotManager { }) } + /* + Certificate Name: customdomain-another.hm2.captainduckduck.com + Domains: customdomain-another.hm2.captainduckduck.com + Expiry Date: 2019-03-22 04:22:55+00:00 (VALID: 81 days) + Certificate Path: /etc/letsencrypt/live/customdomain-another.hm2.captainduckduck.com/fullchain.pem + Private Key Path: /etc/letsencrypt/live/customdomain-another.hm2.captainduckduck.com/privkey.pem + Certificate Name: testing.cp.hm.captainduckduck.com + Domains: testing.cp.hm.captainduckduck.com + Expiry Date: 2019-03-21 18:42:17+00:00 (VALID: 81 days) + Certificate Path: /etc/letsencrypt/live/testing.cp.hm.captainduckduck.com/fullchain.pem + Private Key Path: /etc/letsencrypt/live/testing.cp.hm.captainduckduck.com/privkey.pem + Certificate Name: registry.cp.hm.captainduckduck.com + Domains: registry.cp.hm.captainduckduck.com + Expiry Date: 2019-03-25 04:56:45+00:00 (VALID: 84 days) + Certificate Path: /etc/letsencrypt/live/registry.cp.hm.captainduckduck.com/fullchain.pem + Private Key Path: /etc/letsencrypt/live/registry.cp.hm.captainduckduck.com/privkey.pem + Certificate Name: captain.cp.hm.captainduckduck.com + Domains: captain.cp.hm.captainduckduck.com + Expiry Date: 2019-03-20 22:25:50+00:00 (VALID: 80 days) + Certificate Path: /etc/letsencrypt/live/captain.cp.hm.captainduckduck.com/fullchain.pem + Private Key Path: /etc/letsencrypt/live/captain.cp.hm.captainduckduck.com/privkey.pem + Certificate Name: testing2.cp.hm.captainduckduck.com + Domains: testing2.cp.hm.captainduckduck.com + Expiry Date: 2019-03-21 18:42:55+00:00 (VALID: 81 days) + Certificate Path: /etc/letsencrypt/live/testing2.cp.hm.captainduckduck.com/fullchain.pem + Private Key Path: /etc/letsencrypt/live/testing2.cp.hm.captainduckduck.com/privkey.pem + +*/ + ensureAllCurrentlyRegisteredDomainsHaveDirs() { + const self = this + return Promise.resolve() // + .then(function() { + return self + .runCommand(['certbot', 'certificates']) + .then(function(output) { + const lines = output.split('\n') + const domains: string[] = [] + lines.forEach(l => { + if (l.indexOf('Certificate Name:') >= 0) { + domains.push( + l.replace('Certificate Name:', '').trim() + ) + } + }) + + return domains + }) + }) + .then(function(allDomains) { + const p = Promise.resolve() + allDomains.forEach(d => { + p.then(function() { + return self.ensureDomainHasDirectory(d) + }) + }) + + return p + }) + } + runCommand(cmd: string[]) { const dockerApi = this.dockerApi const self = this @@ -243,6 +299,13 @@ class CertbotManager { }) } + ensureDomainHasDirectory(domainName: string) { + return Promise.resolve() // + .then(function() { + return fs.ensureDir(WEBROOT_PATH_IN_CAPTAIN + '/' + domainName) + }) + } + renewAllCerts() { const self = this @@ -271,19 +334,22 @@ class CertbotManager { cmd.push('--staging') } - return self.runCommand(cmd).then(function(output) { - // Ignore output :) - }) + return Promise.resolve() // + .then(function() { + return self.ensureAllCurrentlyRegisteredDomainsHaveDirs() + }) + .then(function() { + return self.runCommand(cmd) + }) + .then(function(output) { + // Ignore output :) + }) } init(myNodeId: string) { const dockerApi = this.dockerApi const self = this - const domainSpecificRootDirectoryInHost = - CaptainConstants.captainStaticFilesDir + - CaptainConstants.nginxDomainSpecificHtmlDir - function createCertbotServiceOnNode(nodeId: string) { return dockerApi .createServiceOnNodeId( @@ -318,7 +384,7 @@ class CertbotManager { return fs.ensureDir(CaptainConstants.letsEncryptLibPath) }) .then(function() { - return fs.ensureDir(domainSpecificRootDirectoryInHost) + return fs.ensureDir(WEBROOT_PATH_IN_CAPTAIN) }) .then(function() { return dockerApi.isServiceRunningByName( @@ -371,7 +437,7 @@ class CertbotManager { return dockerApi.updateService( CaptainConstants.certbotServiceName, - undefined, + CaptainConstants.certbotImageName, [ { hostPath: CaptainConstants.letsEncryptEtcPath, @@ -382,8 +448,8 @@ class CertbotManager { containerPath: '/var/lib/letsencrypt', }, { - hostPath: domainSpecificRootDirectoryInHost, - containerPath: CAPTAIN_WEBROOT_PATH_CERTBOT, + hostPath: WEBROOT_PATH_IN_CAPTAIN, + containerPath: WEBROOT_PATH_IN_CERTBOT, }, ], // No need to certbot to be connected to the network @@ -399,6 +465,9 @@ class CertbotManager { undefined ) }) + .then(function() { + return self.ensureAllCurrentlyRegisteredDomainsHaveDirs() + }) .then(function() { // schedule the first attempt to renew certs in 1 minute setTimeout(function() {