diff --git a/dist/cert.paths.d.ts b/dist/cert.paths.d.ts index bd036c5..399955e 100644 --- a/dist/cert.paths.d.ts +++ b/dist/cert.paths.d.ts @@ -1,4 +1,6 @@ export declare let certHook: string; export declare let config: string; +export declare let leShConfig: string; export declare let letsencryptSh: string; export declare let certDir: string; +export declare let assetDir: string; diff --git a/dist/cert.paths.js b/dist/cert.paths.js index 1c81f71..6f9f18b 100644 --- a/dist/cert.paths.js +++ b/dist/cert.paths.js @@ -1,7 +1,11 @@ "use strict"; var plugins = require("./cert.plugins"); +// files exports.certHook = plugins.path.join(__dirname, "cert.hook.js"); exports.config = plugins.path.join(__dirname, "assets/config.json"); +exports.leShConfig = plugins.path.join(__dirname, "assets/leshconfig.json"); exports.letsencryptSh = plugins.path.join(__dirname, "assets/letsencrypt.sh"); +//dirs exports.certDir = plugins.path.join(__dirname, "/assets/certs"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5wYXRocy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NlcnQucGF0aHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLElBQVksT0FBTyxXQUFNLGdCQUFnQixDQUFDLENBQUE7QUFFL0IsZ0JBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUMsY0FBYyxDQUFDLENBQUM7QUFDdkQsY0FBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQzNELHFCQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDckUsZUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxlQUFlLENBQUMsQ0FBQyJ9 \ No newline at end of file +exports.assetDir = plugins.path.join(__dirname, "/assets/"); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5wYXRocy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NlcnQucGF0aHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLElBQVksT0FBTyxXQUFNLGdCQUFnQixDQUFDLENBQUE7QUFFMUMsUUFBUTtBQUNHLGdCQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3ZELGNBQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUMzRCxrQkFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQ25FLHFCQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFDLHVCQUF1QixDQUFDLENBQUM7QUFFaEYsTUFBTTtBQUNLLGVBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUMsZUFBZSxDQUFDLENBQUM7QUFDdkQsZ0JBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUMsVUFBVSxDQUFDLENBQUMifQ== \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index 531ac65..491fc9f 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -4,20 +4,23 @@ export declare class Cert { private _cfEmail; private _cfKey; private _sslDir; + private _gitOriginRepo; + private _testMode; certificatesPresent: Certificate[]; certificatesValid: Certificate[]; - private _gitOriginRepo; constructor(optionsArg: { cfEmail: string; cfKey: string; sslDir: string; gitOriginRepo?: string; + testMode?: boolean; }); sslGitOriginPull: () => void; sslGitOriginAddCommitPush: () => void; getDomainCert(domainNameArg: string, optionsArg?: { force: boolean; }): plugins.q.Promise<{}>; + cleanOldCertificates(): void; } export declare class Certificate { domainName: string; diff --git a/dist/index.js b/dist/index.js index 6a664d0..27b32ca 100644 --- a/dist/index.js +++ b/dist/index.js @@ -20,25 +20,40 @@ var Cert = (function () { this._cfKey = optionsArg.cfKey; this._sslDir = optionsArg.sslDir; this._gitOriginRepo = optionsArg.gitOriginRepo; + this._testMode = optionsArg.testMode; + // write hook config var config = { cfEmail: this._cfEmail, cfKey: this._cfKey }; plugins.smartfile.memory.toFsSync(JSON.stringify(config), plugins.path.join(__dirname, "assets/config.json")); + // setup Git if (this._gitOriginRepo) { plugins.smartgit.init(this._sslDir); plugins.smartgit.remote.add(this._sslDir, "origin", this._gitOriginRepo); this.sslGitOriginPull(); } + // setup leSh config; + var leShConfigString; + if (this._testMode) { + leShConfigString = "CA=\"https://acme-staging.api.letsencrypt.org/directory\"\n"; + } + else { + leShConfigString = " "; + } + ; + plugins.smartfile.memory.toFsSync(leShConfigString, paths.leShConfig); } ; Cert.prototype.getDomainCert = function (domainNameArg, optionsArg) { + if (optionsArg === void 0) { optionsArg = { force: false }; } var done = plugins.q.defer(); this.sslGitOriginPull(); - if (!checkDomainsStillValid(domainNameArg) || optionsArg.force) { + if (!checkDomainsStillValid(domainNameArg, this._sslDir) || optionsArg.force) { plugins.shelljs.exec("chmod 700 " + paths.letsencryptSh); plugins.shelljs.exec("chmod 700 " + paths.certHook); - plugins.shelljs.exec("bash -c \"" + paths.letsencryptSh + " -c -d " + domainNameArg + " -t dns-01 -k " + paths.certHook + " -o " + paths.certDir + "\""); + plugins.smartfile.fs.ensureDir(paths.certDir); + plugins.shelljs.exec("bash -c \"" + paths.letsencryptSh + " -c -f " + paths.leShConfig + " -d " + domainNameArg + " -t dns-01 -k " + paths.certHook + " -o " + paths.certDir + "\""); var fetchedCertsArray = plugins.smartfile.fs.listFoldersSync(paths.certDir); if (fetchedCertsArray.indexOf(domainNameArg) != -1) { updateSslDirSync(this._sslDir, domainNameArg); @@ -54,6 +69,9 @@ var Cert = (function () { return done.promise; }; ; + Cert.prototype.cleanOldCertificates = function () { + }; + ; return Cert; }()); exports.Cert = Cert; @@ -64,8 +82,20 @@ var Certificate = (function () { return Certificate; }()); exports.Certificate = Certificate; -var checkDomainsStillValid = function (domainNameArg) { - return false; +var checkDomainsStillValid = function (domainNameArg, sslDirArg) { + var domainConfigPath = plugins.path.join(sslDirArg, domainNameArg, "config.json"); + if (plugins.smartfile.fs.fileExistsSync(domainConfigPath)) { + var domainConfig = plugins.smartfile.fs.toObjectSync(domainConfigPath, "json"); + if (Date.now() >= ((domainConfig.expires - 604800) * 1000)) { + return false; + } + else { + return true; + } + } + else { + return false; + } }; var updateSslDirSync = function (sslDirArg, domainNameArg) { plugins.smartfile.fs.ensureDirSync(sslDirArg); @@ -82,11 +112,11 @@ var updateSslDirSync = function (sslDirArg, domainNameArg) { created: certTime, expires: certTime + 7776000 }; - plugins.smartfile.memory.toFs(JSON.stringify(certConfig), plugins.path.join(sslDirArg, domainNameArg, "config.json")); + plugins.smartfile.memory.toFsSync(JSON.stringify(certConfig), plugins.path.join(sslDirArg, domainNameArg, "config.json")); } ; }; var updateGitOrigin = function (syncDirectionArg) { }; updateGitOrigin(0 /* toOrigin */); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsSUFBWSxPQUFPLFdBQU0sZ0JBQWdCLENBQUMsQ0FBQTtBQUMxQyxJQUFZLEtBQUssV0FBTSxjQUFjLENBQUMsQ0FBQTtBQUV0QztJQU9JLGNBQVksVUFLWDtRQVpMLGlCQTJEQztRQS9CRyxxQkFBZ0IsR0FBRztZQUNmLEVBQUUsQ0FBQSxDQUFDLEtBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQSxDQUFDO2dCQUNwQixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0YsOEJBQXlCLEdBQUc7WUFDeEIsRUFBRSxDQUFBLENBQUMsS0FBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUksQ0FBQyxPQUFPLEVBQUMsdURBQXVELENBQUMsQ0FBQztnQkFDOUYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNMLENBQUMsQ0FBQztRQTFCRSxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDL0MsSUFBSSxN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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsSUFBWSxPQUFPLFdBQU0sZ0JBQWdCLENBQUMsQ0FBQTtBQUMxQyxJQUFZLEtBQUssV0FBTSxjQUFjLENBQUMsQ0FBQTtBQUV0QztJQVFJLGNBQVksVUFNWDtRQWRMLGlCQW9GQztRQXJDRyxxQkFBZ0IsR0FBRztZQUNmLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM1RCxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0YsOEJBQXlCLEdBQUc7WUFDeEIsRUFBRSxDQUFDLENBQUMsS0FBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUksQ0FBQyxPQUFPLEVBQUUsdURBQXVELENBQUMsQ0FBQztnQkFDL0YsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUQsQ0FBQztRQUNMLENBQUMsQ0FBQztRQTNDRSxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDL0MsSUFBSSxD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 \ No newline at end of file diff --git a/package.json b/package.json index e5e0af5..f443947 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "Easily obain SSL certificates from LetsEncrypt. Supports DNS-01 challenge. TypeScript ready.", "main": "dist/index.js", "scripts": { - "test": "(npmts)", + "test": "(npm run cleanTest && npmts)", + "cleanTest":"(rm -rf ./test/assets)", "install": "node dist/install.js install", "compile":"(npmts --notest)" }, @@ -35,7 +36,7 @@ "shelljs": "^0.7.0", "smartcli": "^1.0.4", "smartfile": "^4.0.10", - "smartgit": "0.1.7", + "smartgit": "0.1.8", "smartstring": "^2.0.10", "typings-global": "^1.0.6" }, diff --git a/test/test.js b/test/test.js index 193dee3..c2bce4a 100644 --- a/test/test.js +++ b/test/test.js @@ -23,16 +23,17 @@ describe("cert", function () { cfEmail: process.env.CF_EMAIL, cfKey: process.env.CF_KEY, sslDir: path.join(process.cwd(), "test/assets"), - gitOriginRepo: "git@gitlab.com:philkunz/sandbox-sslorigin.git" + gitOriginRepo: "git@gitlab.com:philkunz/sandbox-sslorigin.git", + testMode: true }); testCert.should.be.instanceof(cert.Cert); }); it("should get a valid certificate", function (done) { this.timeout(120000); - testCert.getDomainCert("sub11.bleu.de").then(function () { + testCert.getDomainCert("sub13.bleu.de").then(function () { done(); }); }); }); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQixxQkFBbUIsTUFBTSxDQUFDLENBQUE7QUFDMUIsSUFBTyxJQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFFOUIsd0JBQTJCLGlCQUFpQixDQUFDLENBQUE7QUFDN0MsSUFBWSxJQUFJLFdBQU0sZUFBZSxDQUFDLENBQUE7QUFHdEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxXQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUVsRSxJQUFJLFFBQWtCLENBQUM7QUFFdkIsUUFBUSxDQUFDLE1BQU0sRUFBQztJQUNaLFFBQVEsQ0FBQyxTQUFTLEVBQUM7UUFDZixFQUFFLENBQUMsZ0NBQWdDLEVBQUMsVUFBUyxJQUFJO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsc0JBQVksRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDaEIsSUFBSSxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7SUFDRixRQUFRLENBQUMsTUFBTSxFQUFDO1FBQ1osRUFBRSxDQUFDLDRDQUE0QyxFQUFDO1lBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtnQkFDN0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTTtnQkFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFDLGFBQWEsQ0FBQztnQkFDOUMsYUFBYSxFQUFDLCtDQUErQzthQUNoRSxDQUFDLENBQUM7WUFDSCxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsRUFBRSxDQUFDLGdDQUFnQyxFQUFDLFVBQVMsSUFBSTtZQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JCLFFBQVEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN6QyxJQUFJLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQixxQkFBbUIsTUFBTSxDQUFDLENBQUE7QUFDMUIsSUFBTyxJQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFFOUIsd0JBQTJCLGlCQUFpQixDQUFDLENBQUE7QUFDN0MsSUFBWSxJQUFJLFdBQU0sZUFBZSxDQUFDLENBQUE7QUFHdEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxXQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUVsRSxJQUFJLFFBQWtCLENBQUM7QUFFdkIsUUFBUSxDQUFDLE1BQU0sRUFBQztJQUNaLFFBQVEsQ0FBQyxTQUFTLEVBQUM7UUFDZixFQUFFLENBQUMsZ0NBQWdDLEVBQUMsVUFBUyxJQUFJO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsc0JBQVksRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDaEIsSUFBSSxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7SUFDRixRQUFRLENBQUMsTUFBTSxFQUFDO1FBQ1osRUFBRSxDQUFDLDRDQUE0QyxFQUFDO1lBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtnQkFDN0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTTtnQkFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFDLGFBQWEsQ0FBQztnQkFDOUMsYUFBYSxFQUFDLCtDQUErQztnQkFDN0QsUUFBUSxFQUFDLElBQUk7YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQTtRQUNGLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBQyxVQUFTLElBQUk7WUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQixRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDekMsSUFBSSxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index 037cead..98bce67 100644 --- a/test/test.ts +++ b/test/test.ts @@ -27,13 +27,14 @@ describe("cert",function(){ cfEmail: process.env.CF_EMAIL, cfKey: process.env.CF_KEY, sslDir: path.join(process.cwd(),"test/assets"), - gitOriginRepo:"git@gitlab.com:philkunz/sandbox-sslorigin.git" + gitOriginRepo:"git@gitlab.com:sandboxzone/sandbox-sslorigin.git", + testMode:true }); testCert.should.be.instanceof(cert.Cert); }) it("should get a valid certificate",function(done){ this.timeout(120000); - testCert.getDomainCert("sub11.bleu.de").then(() => { + testCert.getDomainCert("sub13.bleu.de").then(() => { done(); }); }) diff --git a/ts/cert.paths.ts b/ts/cert.paths.ts index ca89431..f58ec5b 100644 --- a/ts/cert.paths.ts +++ b/ts/cert.paths.ts @@ -1,6 +1,11 @@ import * as plugins from "./cert.plugins"; +// files export let certHook = plugins.path.join(__dirname,"cert.hook.js"); export let config = plugins.path.join(__dirname,"assets/config.json"); +export let leShConfig = plugins.path.join(__dirname,"assets/leshconfig.json"); export let letsencryptSh = plugins.path.join(__dirname,"assets/letsencrypt.sh"); -export let certDir = plugins.path.join(__dirname,"/assets/certs"); \ No newline at end of file + +//dirs +export let certDir = plugins.path.join(__dirname,"/assets/certs"); +export let assetDir = plugins.path.join(__dirname,"/assets/"); \ No newline at end of file diff --git a/ts/index.ts b/ts/index.ts index 81d86f1..c4f5099 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -5,52 +5,74 @@ export class Cert { private _cfEmail: string; private _cfKey: string; private _sslDir: string; - certificatesPresent:Certificate[]; - certificatesValid:Certificate[]; - private _gitOriginRepo; + private _gitOriginRepo: string; + private _testMode: boolean + certificatesPresent: Certificate[]; + certificatesValid: Certificate[]; constructor(optionsArg: { cfEmail: string, cfKey: string, sslDir: string, - gitOriginRepo?: string + gitOriginRepo?: string, + testMode?: boolean }) { this._cfEmail = optionsArg.cfEmail; this._cfKey = optionsArg.cfKey; this._sslDir = optionsArg.sslDir; this._gitOriginRepo = optionsArg.gitOriginRepo; + this._testMode = optionsArg.testMode; + // write hook config let config = { cfEmail: this._cfEmail, cfKey: this._cfKey } - plugins.smartfile.memory.toFsSync(JSON.stringify(config),plugins.path.join(__dirname, "assets/config.json")); - if(this._gitOriginRepo){ + plugins.smartfile.memory.toFsSync( + JSON.stringify(config), + plugins.path.join(__dirname, "assets/config.json") + ); + // setup Git + if (this._gitOriginRepo) { plugins.smartgit.init(this._sslDir); - plugins.smartgit.remote.add(this._sslDir,"origin",this._gitOriginRepo); + plugins.smartgit.remote.add(this._sslDir, "origin", this._gitOriginRepo); this.sslGitOriginPull(); } + // setup leSh config; + let leShConfigString; + if (this._testMode) { + leShConfigString = `CA="https://acme-staging.api.letsencrypt.org/directory"\n`; + } else { + leShConfigString = " "; + }; + plugins.smartfile.memory.toFsSync( + leShConfigString, + paths.leShConfig + ); }; sslGitOriginPull = () => { - if(this._gitOriginRepo){ - plugins.smartgit.pull(this._sslDir,"origin","master"); + if (this._gitOriginRepo) { + plugins.smartgit.pull(this._sslDir, "origin", "master"); } }; sslGitOriginAddCommitPush = () => { - if(this._gitOriginRepo){ + if (this._gitOriginRepo) { plugins.smartgit.add.addAll(this._sslDir); - plugins.smartgit.commit(this._sslDir,"added new SSL certificates and deleted obsolete ones."); - plugins.smartgit.push(this._sslDir,"origin","master"); + plugins.smartgit.commit(this._sslDir, "added new SSL certificates and deleted obsolete ones."); + plugins.smartgit.push(this._sslDir, "origin", "master"); } }; - getDomainCert(domainNameArg: string,optionsArg?:{force:boolean}) { + getDomainCert(domainNameArg: string, optionsArg: { force: boolean } = { force: false }) { let done = plugins.q.defer(); this.sslGitOriginPull(); - if (!checkDomainsStillValid(domainNameArg) || optionsArg.force) { + if (!checkDomainsStillValid(domainNameArg, this._sslDir) || optionsArg.force) { plugins.shelljs.exec("chmod 700 " + paths.letsencryptSh); plugins.shelljs.exec("chmod 700 " + paths.certHook); - plugins.shelljs.exec("bash -c \"" + paths.letsencryptSh + " -c -d " + domainNameArg + " -t dns-01 -k " + paths.certHook + " -o " + paths.certDir + "\""); - let fetchedCertsArray:string[] = plugins.smartfile.fs.listFoldersSync(paths.certDir); - if(fetchedCertsArray.indexOf(domainNameArg) != -1){ - updateSslDirSync(this._sslDir,domainNameArg); + plugins.smartfile.fs.ensureDir(paths.certDir); + plugins.shelljs.exec( + `bash -c "${paths.letsencryptSh} -c -f ${paths.leShConfig} -d ${domainNameArg} -t dns-01 -k ${paths.certHook} -o ${paths.certDir}"` + ); + let fetchedCertsArray: string[] = plugins.smartfile.fs.listFoldersSync(paths.certDir); + if (fetchedCertsArray.indexOf(domainNameArg) != -1) { + updateSslDirSync(this._sslDir, domainNameArg); } this.sslGitOriginAddCommitPush(); done.resolve(); @@ -60,6 +82,9 @@ export class Cert { }; return done.promise; }; + cleanOldCertificates() { + + }; } export class Certificate { @@ -72,39 +97,53 @@ export class Certificate { } interface certConfig { - domainName:string; - created:number; - expires:number; + domainName: string; + created: number; + expires: number; } -let checkDomainsStillValid = (domainNameArg: string): boolean => { - return false; +let checkDomainsStillValid = (domainNameArg: string, sslDirArg: string): boolean => { + let domainConfigPath = plugins.path.join(sslDirArg, domainNameArg,"config.json"); + if (plugins.smartfile.fs.fileExistsSync(domainConfigPath)){ + let domainConfig = plugins.smartfile.fs.toObjectSync( + domainConfigPath, + "json" + ); + if (Date.now() >= ((domainConfig.expires - 604800) * 1000)) { + return false; + } else { + return true; + } + } else { + return false; + } + } -let updateSslDirSync = (sslDirArg:string,domainNameArg:string) => { +let updateSslDirSync = (sslDirArg: string, domainNameArg: string) => { plugins.smartfile.fs.ensureDirSync(sslDirArg); - let domainCertFolder = plugins.path.join(paths.certDir,domainNameArg) - if(plugins.smartfile.fs.listFoldersSync(paths.certDir).indexOf(domainNameArg) != -1) { + let domainCertFolder = plugins.path.join(paths.certDir, domainNameArg) + if (plugins.smartfile.fs.listFoldersSync(paths.certDir).indexOf(domainNameArg) != -1) { plugins.smartfile.fs.copySync( - plugins.path.join(domainCertFolder,"fullchain.pem"), - plugins.path.join(sslDirArg,domainNameArg,"fullchain.pem") + plugins.path.join(domainCertFolder, "fullchain.pem"), + plugins.path.join(sslDirArg, domainNameArg, "fullchain.pem") ); plugins.smartfile.fs.copySync( - plugins.path.join(domainCertFolder,"privkey.pem"), - plugins.path.join(sslDirArg,domainNameArg,"privkey.pem") + plugins.path.join(domainCertFolder, "privkey.pem"), + plugins.path.join(sslDirArg, domainNameArg, "privkey.pem") ); // create cert config let certRegex = /.*\-([0-9]*)\.pem/; - let certFileNameWithTime:string = plugins.smartfile.fs.listFilesSync(domainCertFolder,certRegex)[0]; + let certFileNameWithTime: string = plugins.smartfile.fs.listFilesSync(domainCertFolder, certRegex)[0]; let certTime = parseInt(certRegex.exec(certFileNameWithTime)[1]); - let certConfig:certConfig = { + let certConfig: certConfig = { domainName: domainNameArg, created: certTime, expires: certTime + 7776000 }; - plugins.smartfile.memory.toFs( + plugins.smartfile.memory.toFsSync( JSON.stringify(certConfig), - plugins.path.join(sslDirArg,domainNameArg,"config.json") + plugins.path.join(sslDirArg, domainNameArg, "config.json") ); }; } @@ -114,7 +153,7 @@ const enum gitSyncDirection { fromOrigin } -let updateGitOrigin = (syncDirectionArg:gitSyncDirection) => { +let updateGitOrigin = (syncDirectionArg: gitSyncDirection) => { };