diff --git a/dist/cert.classes.cert.d.ts b/dist/cert.classes.cert.d.ts new file mode 100644 index 0000000..a739484 --- /dev/null +++ b/dist/cert.classes.cert.d.ts @@ -0,0 +1,44 @@ +/// +import * as plugins from "./cert.plugins"; +export interface ICertConstructorOptions { + cfEmail: string; + cfKey: string; + sslDir?: string; + gitOriginRepo?: string; + testMode?: boolean; +} +export declare class Cert { + private _cfEmail; + private _cfKey; + private _sslDir; + private _gitOriginRepo; + private _testMode; + domainCertRequestMap: plugins.lik.Stringmap; + certificatesPresent: Certificate[]; + certificatesValid: Certificate[]; + /** + * Constructor for Cert object + */ + constructor(optionsArg: ICertConstructorOptions); + /** + * Pulls already requested certificates from git origin + */ + sslGitOriginPull: () => void; + /** + * Pushes all new requested certificates to git origin + */ + sslGitOriginAddCommitPush: () => void; + /** + * gets a ssl cert for a given domain + */ + getDomainCert(domainNameArg: string, optionsArg?: { + force: boolean; + }): plugins.q.Promise<{}>; + cleanOldCertificates(): void; +} +export declare class Certificate { + domainName: string; + creationDate: Date; + expiryDate: Date; + constructor(); +} diff --git a/dist/cert.classes.cert.helpers.d.ts b/dist/cert.classes.cert.helpers.d.ts new file mode 100644 index 0000000..6806147 --- /dev/null +++ b/dist/cert.classes.cert.helpers.d.ts @@ -0,0 +1,20 @@ +/// +import { Cert } from "./index.ts"; +import * as plugins from "./cert.plugins"; +/** + * schedule a retry of certificate request + */ +export declare let scheduleRetry: (domainArg: string, certClassArg: Cert) => plugins.q.Promise<{}>; +/** + * check if a given domainCert is still valid + */ +export declare let checkDomainsStillValid: (domainNameArg: string, sslDirArg: string) => boolean; +export interface certConfig { + domainName: string; + created: number; + expires: number; +} +/** + * update a ssl directory + */ +export declare let updateSslDirSync: (sslDirArg: string, domainNameArg: string) => void; diff --git a/dist/cert.classes.cert.helpers.js b/dist/cert.classes.cert.helpers.js new file mode 100644 index 0000000..6d0d10a --- /dev/null +++ b/dist/cert.classes.cert.helpers.js @@ -0,0 +1,59 @@ +"use strict"; +const plugins = require("./cert.plugins"); +const paths = require("./cert.paths"); +/** + * schedule a retry of certificate request + */ +exports.scheduleRetry = (domainArg, certClassArg) => { + let done = plugins.q.defer(); + setTimeout(() => { + certClassArg.getDomainCert(domainArg) + .then(done.resolve); + }, 20000); + return done.promise; +}; +/** + * check if a given domainCert is still valid + */ +exports.checkDomainsStillValid = (domainNameArg, sslDirArg) => { + 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; + } +}; +; +/** + * update a ssl directory + */ +exports.updateSslDirSync = (sslDirArg, domainNameArg) => { + plugins.smartfile.fs.ensureDirSync(sslDirArg); + 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.smartfile.fs.copySync(plugins.path.join(domainCertFolder, "privkey.pem"), plugins.path.join(sslDirArg, domainNameArg, "privkey.pem")); + // create cert config + let certRegex = /.*\-([0-9]*)\.pem/; + let certFileNameWithTime = plugins.smartfile.fs.listFilesSync(domainCertFolder, certRegex)[0]; + let certTime = parseInt(certRegex.exec(certFileNameWithTime)[1]); + let certConfig = { + domainName: domainNameArg, + created: certTime, + expires: certTime + 7776000 + }; + plugins.smartfile.memory.toFsSync(JSON.stringify(certConfig), plugins.path.join(sslDirArg, domainNameArg, "config.json")); + } + ; +}; +let updateGitOrigin = (syncDirectionArg) => { +}; +updateGitOrigin(0 /* toOrigin */); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5jbGFzc2VzLmNlcnQuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NlcnQuY2xhc3Nlcy5jZXJ0LmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE1BQVksT0FBTyxXQUFNLGdCQUFnQixDQUFDLENBQUE7QUFDMUMsTUFBWSxLQUFLLFdBQU0sY0FBYyxDQUFDLENBQUE7QUFJdEM7O0dBRUc7QUFDUSxxQkFBYSxHQUFHLENBQUMsU0FBZ0IsRUFBQyxZQUFpQjtJQUMxRCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLFVBQVUsQ0FBQztRQUNQLFlBQVksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO2FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQyxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ1QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDUSw4QkFBc0IsR0FBRyxDQUFDLGFBQXFCLEVBQUUsU0FBaUI7SUFDekUsSUFBSSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2xGLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ2hELGdCQUFnQixFQUNoQixNQUFNLENBQ1QsQ0FBQztRQUNGLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxJ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 \ No newline at end of file diff --git a/dist/cert.classes.cert.js b/dist/cert.classes.cert.js new file mode 100644 index 0000000..a11ea23 --- /dev/null +++ b/dist/cert.classes.cert.js @@ -0,0 +1,137 @@ +"use strict"; +const plugins = require("./cert.plugins"); +const paths = require("./cert.paths"); +const helpers = require("./cert.classes.cert.helpers"); +; +class Cert { + /** + * Constructor for Cert object + */ + constructor(optionsArg) { + this.domainCertRequestMap = new plugins.lik.Stringmap(); + /** + * Pulls already requested certificates from git origin + */ + this.sslGitOriginPull = () => { + if (this._gitOriginRepo) { + plugins.smartgit.pull(this._sslDir, "origin", "master"); + } + }; + /** + * Pushes all new requested certificates to git origin + */ + this.sslGitOriginAddCommitPush = () => { + 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"); + } + }; + 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")); + // setup sslDir + if (!this._sslDir) + this._sslDir = paths.defaultSslDir; + // setup Git + if (this._gitOriginRepo) { + plugins.smartgit.init(this._sslDir); + 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); + plugins.shelljs.exec("chmod 700 " + paths.letsencryptSh); + plugins.shelljs.exec("chmod 700 " + paths.certHook); + plugins.shelljs.exec(`bash -c "${paths.letsencryptSh} -c --no-lock -f ${paths.leShConfig} -d notthere.notthere -t dns-01 -k ${paths.certHook} -o ${paths.certDir}"`, { + silent: true + }); + } + ; + /** + * gets a ssl cert for a given domain + */ + getDomainCert(domainNameArg, optionsArg = { force: false }) { + let done = plugins.q.defer(); + let domainStringData = new plugins.smartstring.Domain(domainNameArg); + let sameZoneRequesting = this.domainCertRequestMap.checkMinimatch("*" + domainStringData.zoneName); + // make sure no one else requires the same domain at the same time + if (!this.domainCertRequestMap.checkString(domainNameArg)) { + this.domainCertRequestMap.addString(domainNameArg); + if (!helpers.checkDomainsStillValid(domainNameArg, this._sslDir) || optionsArg.force) { + if (!sameZoneRequesting) { + plugins.smartfile.fs.ensureDir(paths.certDir); + plugins.beautylog.info(`getting cert for ${domainNameArg}`); + plugins.shelljs.exec(`bash -c "${paths.letsencryptSh} -c --no-lock -f ${paths.leShConfig} -d ${domainNameArg} -t dns-01 -k ${paths.certHook} -o ${paths.certDir}"`, { + silent: true + }, (codeArg, stdoutArg) => { + if (codeArg == 0) { + console.log(stdoutArg); + let fetchedCertsArray = plugins.smartfile.fs.listFoldersSync(paths.certDir); + if (fetchedCertsArray.indexOf(domainNameArg) != -1) { + helpers.updateSslDirSync(this._sslDir, domainNameArg); + plugins.smartfile.fs.removeSync(plugins.path.join(paths.certDir, domainNameArg)); + } + ; + done.resolve(); + } + else { + plugins.beautylog.warn(`${domainNameArg} scheduled for retry`); + helpers.scheduleRetry(domainNameArg, this).then(done.resolve); + } + this.domainCertRequestMap.removeString(domainNameArg); + }); + } + else { + plugins.beautylog.info(`${domainNameArg} is waiting for domains names of same zone to finish`); + this.domainCertRequestMap.removeString(domainNameArg); + this.domainCertRequestMap.registerUntilTrue(() => { + return !this.domainCertRequestMap.checkMinimatch("*" + domainStringData.zoneName); + }, () => { + this.getDomainCert(domainNameArg).then(done.resolve); + }); + } + } + else { + plugins.beautylog.info("certificate for " + domainNameArg + " is still valid! Not fetching new one!"); + this.domainCertRequestMap.removeString(domainNameArg); + done.resolve(); + } + ; + } + else { + plugins.beautylog.warn(`${domainNameArg} is already requesting`); + } + ; + return done.promise; + } + ; + cleanOldCertificates() { + } + ; +} +exports.Cert = Cert; +class Certificate { + constructor() { + } + ; +} +exports.Certificate = Certificate; +; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5jbGFzc2VzLmNlcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jZXJ0LmNsYXNzZXMuY2VydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBWSxPQUFPLFdBQU0sZ0JBQWdCLENBQUMsQ0FBQTtBQUMxQyxNQUFZLEtBQUssV0FBTSxjQUFjLENBQUMsQ0FBQTtBQUN0QyxNQUFZLE9BQU8sV0FBTSw2QkFFekIsQ0FBQyxDQUZxRDtBQVFyRCxDQUFDO0FBRUY7SUFVSTs7T0FFRztJQUNILFlBQVksVUFBbUM7UUFQL0MseUJBQW9CLEdBQTBCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQWtEMUU7O1dBRUc7UUFDSCxxQkFBZ0IsR0FBRztZQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM1RCxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUY7O1dBRUc7UUFDSCw4QkFBeUIsR0FBRztZQUN4QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSx1REFBdUQsQ0FBQyxDQUFDO2dCQUMvRixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM1RCxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBNURFLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLE9BQU8s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 \ No newline at end of file diff --git a/dist/cert.helpers.d.ts b/dist/cert.helpers.d.ts deleted file mode 100644 index 612c343..0000000 --- a/dist/cert.helpers.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { Cert } from "./index.ts"; -import * as plugins from "./cert.plugins"; -export declare let accountsKeyPresent: () => plugins.q.Promise<{}>; -export declare let scheduleRetry: (domainArg: string, certClassArg: Cert) => plugins.q.Promise<{}>; diff --git a/dist/cert.helpers.js b/dist/cert.helpers.js deleted file mode 100644 index 43153ba..0000000 --- a/dist/cert.helpers.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -const plugins = require("./cert.plugins"); -let firstCall = true; -let enoughTime = false; -exports.accountsKeyPresent = () => { - let done = plugins.q.defer(); - if (firstCall) { - done.resolve(); - firstCall = false; - } - else { - setTimeout(done.resolve, 5000); - } - ; - return done.promise; -}; -exports.scheduleRetry = (domainArg, certClassArg) => { - let done = plugins.q.defer(); - setTimeout(() => { - certClassArg.getDomainCert(domainArg) - .then(done.resolve); - }, 20000); - return done.promise; -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2VydC5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxNQUFZLE9BQU8sV0FBTSxnQkFBZ0IsQ0FBQyxDQUFBO0FBRzFDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDWiwwQkFBa0IsR0FBRztJQUM1QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFBRSxJQUFJLENBQUMsQ0FBQztRQUNMLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFBQSxDQUFDO0lBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRVMscUJBQWEsR0FBRyxDQUFDLFNBQWdCLEVBQUMsWUFBaUI7SUFDMUQsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixVQUFVLENBQUM7UUFDUCxZQUFZLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQzthQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVCLENBQUMsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/dist/cert.hook.js b/dist/cert.hook.js index 9483691..8f496ae 100755 --- a/dist/cert.hook.js +++ b/dist/cert.hook.js @@ -29,7 +29,7 @@ let cleanChallenge = (domainNameArg) => { }; let cooldown = () => { let done = plugins.q.defer(); - let cooldowntime = 120000; + let cooldowntime = 40000; let passedTime = 0; plugins.beautylog.log("Cooling down! " + (cooldowntime / 1000).toString() + " seconds left"); let coolDownCounter = () => { @@ -62,4 +62,4 @@ smartcli.addCommand({ cleanChallenge(argv._[1]); }); smartcli.startParse(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5ob29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2VydC5ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsTUFBWSxPQUFPLFdBQU0sZ0JBQWdCLENBQUMsQ0FBQTtBQUMxQyxNQUFZLEtBQUssV0FBTSxjQUFjLENBQUMsQ0FBQTtBQUV0QyxJQUFJLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7QUFFL0MsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RCxJQUFJLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDaEQsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNSLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTztJQUNyQixHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUs7Q0FDcEIsQ0FBQyxDQUFDO0FBRUgsSUFBSSxZQUFZLEdBQUcsQ0FBQyxhQUFxQixFQUFFLFlBQW9CO0lBQzNELElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEdBQUcsYUFBYSxDQUFDLENBQUM7SUFDaEUsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNyRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDdkYsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ1osSUFBSSxDQUFDLE9BQU8sRUFB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5ob29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2VydC5ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsTUFBWSxPQUFPLFdBQU0sZ0JBQWdCLENBQUMsQ0FBQTtBQUMxQyxNQUFZLEtBQUssV0FBTSxjQUFjLENBQUMsQ0FBQTtBQUV0QyxJQUFJLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7QUFFL0MsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RCxJQUFJLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDaEQsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNSLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTztJQUNyQixHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUs7Q0FDcEIsQ0FBQyxDQUFDO0FBRUgsSUFBSSxZQUFZLEdBQUcsQ0FBQyxhQUFxQixFQUFFLFlBQW9CO0lBQzNELElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEdBQUcsYUFBYSxDQUFDLENBQUM7SUFDaEUsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNyRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDdkYsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ1osSUFBSSxDQUFDLE9BQU8sRUFB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 \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index 0ce6043..b406cb4 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,44 +1 @@ -/// -import * as plugins from "./cert.plugins"; -export interface ICertConstructorOptions { - cfEmail: string; - cfKey: string; - sslDir?: string; - gitOriginRepo?: string; - testMode?: boolean; -} -export declare class Cert { - private _cfEmail; - private _cfKey; - private _sslDir; - private _gitOriginRepo; - private _testMode; - domainsCurrentlyRequesting: plugins.lik.Stringmap; - certificatesPresent: Certificate[]; - certificatesValid: Certificate[]; - /** - * Constructor for Cert object - */ - constructor(optionsArg: ICertConstructorOptions); - /** - * Pulls already requested certificates from git origin - */ - sslGitOriginPull: () => void; - /** - * Pushes all new requested certificates to git origin - */ - sslGitOriginAddCommitPush: () => void; - /** - * gets a ssl cert for a given domain - */ - getDomainCert(domainNameArg: string, optionsArg?: { - force: boolean; - }): plugins.q.Promise<{}>; - cleanOldCertificates(): void; -} -export declare class Certificate { - domainName: string; - creationDate: Date; - expiryDate: Date; - constructor(); -} +export * from "./cert.classes.cert"; diff --git a/dist/index.js b/dist/index.js index 55f9a9d..bf83e15 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,159 +1,6 @@ "use strict"; -const plugins = require("./cert.plugins"); -const paths = require("./cert.paths"); -const helpers = require("./cert.helpers"); -; -class Cert { - /** - * Constructor for Cert object - */ - constructor(optionsArg) { - this.domainsCurrentlyRequesting = new plugins.lik.Stringmap(); - /** - * Pulls already requested certificates from git origin - */ - this.sslGitOriginPull = () => { - if (this._gitOriginRepo) { - plugins.smartgit.pull(this._sslDir, "origin", "master"); - } - }; - /** - * Pushes all new requested certificates to git origin - */ - this.sslGitOriginAddCommitPush = () => { - 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"); - } - }; - 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")); - // setup sslDir - if (!this._sslDir) - this._sslDir = paths.defaultSslDir; - // setup Git - if (this._gitOriginRepo) { - plugins.smartgit.init(this._sslDir); - 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); - plugins.shelljs.exec("chmod 700 " + paths.letsencryptSh); - plugins.shelljs.exec("chmod 700 " + paths.certHook); - } - ; - /** - * gets a ssl cert for a given domain - */ - getDomainCert(domainNameArg, optionsArg = { force: false }) { - let done = plugins.q.defer(); - // make sure no one else requires the same domain at the same time - helpers.accountsKeyPresent().then(() => { - if (!this.domainsCurrentlyRequesting.checkString(domainNameArg)) { - this.domainsCurrentlyRequesting.addString(domainNameArg); - if (!checkDomainsStillValid(domainNameArg, this._sslDir) || optionsArg.force) { - plugins.smartfile.fs.ensureDir(paths.certDir); - plugins.beautylog.info(`getting cert for ${domainNameArg}`); - plugins.shelljs.exec(`bash -c "${paths.letsencryptSh} -c --no-lock -f ${paths.leShConfig} -d ${domainNameArg} -t dns-01 -k ${paths.certHook} -o ${paths.certDir}"`, { - silent: true - }, (codeArg, stdoutArg) => { - if (codeArg == 0) { - console.log(stdoutArg); - let fetchedCertsArray = plugins.smartfile.fs.listFoldersSync(paths.certDir); - if (fetchedCertsArray.indexOf(domainNameArg) != -1) { - updateSslDirSync(this._sslDir, domainNameArg); - plugins.smartfile.fs.removeSync(plugins.path.join(paths.certDir, domainNameArg)); - } - this.domainsCurrentlyRequesting.removeString(domainNameArg); - done.resolve(); - } - else { - this.domainsCurrentlyRequesting.removeString(domainNameArg); - plugins.beautylog.warn(`${domainNameArg} scheduled for retry`); - helpers.scheduleRetry(domainNameArg, this).then(done.resolve); - } - }); - } - else { - plugins.beautylog.info("certificate for " + domainNameArg + " is still valid! Not fetching new one!"); - this.domainsCurrentlyRequesting.removeString(domainNameArg); - done.resolve(); - } - ; - } - else { - plugins.beautylog.warn(`${domainNameArg} is already requesting`); - } - ; - }); - return done.promise; - } - ; - cleanOldCertificates() { - } - ; +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } -exports.Cert = Cert; -class Certificate { - constructor() { - } - ; -} -exports.Certificate = Certificate; -let checkDomainsStillValid = (domainNameArg, sslDirArg) => { - 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, domainNameArg) => { - plugins.smartfile.fs.ensureDirSync(sslDirArg); - 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.smartfile.fs.copySync(plugins.path.join(domainCertFolder, "privkey.pem"), plugins.path.join(sslDirArg, domainNameArg, "privkey.pem")); - // create cert config - let certRegex = /.*\-([0-9]*)\.pem/; - let certFileNameWithTime = plugins.smartfile.fs.listFilesSync(domainCertFolder, certRegex)[0]; - let certTime = parseInt(certRegex.exec(certFileNameWithTime)[1]); - let certConfig = { - domainName: domainNameArg, - created: certTime, - expires: certTime + 7776000 - }; - plugins.smartfile.memory.toFsSync(JSON.stringify(certConfig), plugins.path.join(sslDirArg, domainNameArg, "config.json")); - } - ; -}; -let updateGitOrigin = (syncDirectionArg) => { -}; -updateGitOrigin(0 /* toOrigin */); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBWSxPQUFPLFdBQU0sZ0JBQWdCLENBQUMsQ0FBQTtBQUMxQyxNQUFZLEtBQUssV0FBTSxjQUFjLENBQUMsQ0FBQTtBQUN0QyxNQUFZLE9BQU8sV0FBTSxnQkFFekIsQ0FBQyxDQUZ3QztBQVF4QyxDQUFDO0FBRUY7SUFVSTs7T0FFRztJQUNILFlBQVksVUFBbUM7UUFQL0MsK0JBQTBCLEdBQTBCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQTZDaEY7O1dBRUc7UUFDSCxxQkFBZ0IsR0FBRztZQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM1RCxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUY7O1dBRUc7UUFDSCw4QkFBeUIsR0FBRztZQUN4QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSx1REFBdUQsQ0FBQyxDQUFDO2dCQUMvRixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM1RCxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBdkRFLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFB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 \ No newline at end of file +__export(require("./cert.classes.cert")); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBR0EsaUJBQWMscUJBQXFCLENBQUMsRUFBQSJ9 \ No newline at end of file diff --git a/package.json b/package.json index ee2747f..60493a4 100644 --- a/package.json +++ b/package.json @@ -30,12 +30,12 @@ "@types/minimatch": "^2.0.28", "@types/q": "^0.0.27", "@types/shelljs": "^0.3.27", - "beautylog": "^5.0.14", + "beautylog": "^5.0.18", "cflare": "0.0.9", "fs-extra": "^0.30.0", - "lik": "^1.0.2", + "lik": "^1.0.5", "q": "^1.4.1", - "shelljs": "^0.7.0", + "shelljs": "^0.7.1", "smartcli": "^1.0.4", "smartfile": "^4.0.12", "smartgit": "0.1.9", diff --git a/test/test.js b/test/test.js index 981e373..47a3f91 100644 --- a/test/test.js +++ b/test/test.js @@ -36,12 +36,12 @@ describe("cert", function () { return Math.floor(Math.random() * (max - min) + min); } promiseArray.push(testCert.getDomainCert(`testing${getRandomArbitrary(1, 100000)}.bleu.de`)); - //promiseArray.push(testCert.getDomainCert(`testing${getRandomArbitrary(1,100000)}.bleu.de`)); - //promiseArray.push(testCert.getDomainCert(`testing${getRandomArbitrary(1,100000)}.bleu.de`)); + promiseArray.push(testCert.getDomainCert(`testing${getRandomArbitrary(1, 100000)}.bleu.de`)); + promiseArray.push(testCert.getDomainCert(`testing${getRandomArbitrary(1, 100000)}.bleu.de`)); q.all(promiseArray).then(() => { done(); }); }); }); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQix1QkFBbUIsTUFBTSxDQUFDLENBQUE7QUFDMUIsTUFBTyxJQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFDOUIsTUFBTyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDeEIsMEJBQTJCLGlCQUFpQixDQUFDLENBQUE7QUFDN0MsTUFBWSxJQUFJLFdBQU0sZUFBZSxDQUFDLENBQUE7QUFHdEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxXQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUVsRSxJQUFJLFFBQWtCLENBQUM7QUFFdkIsUUFBUSxDQUFDLE1BQU0sRUFBQztJQUNaLFFBQVEsQ0FBQyxTQUFTLEVBQUM7UUFDZixFQUFFLENBQUMsZ0NBQWdDLEVBQUMsVUFBUyxJQUFJO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsc0JBQVksRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDaEIsSUFBSSxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7SUFDRixRQUFRLENBQUMsTUFBTSxFQUFDO1FBQ1osRUFBRSxDQUFDLDRDQUE0QyxFQUFDO1lBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtnQkFDN0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTTtnQkFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFDLGFBQWEsQ0FBQztnQkFDOUMsYUFBYSxFQUFDLGtEQUFrRDtnQkFDaEUsUUFBUSxFQUFDLElBQUk7YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQTtRQUNGLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBQyxVQUFTLElBQUk7WUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdEIsNEJBQTRCLEdBQUcsRUFBRSxHQUFHO2dCQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDekQsQ0FBQztZQUNELFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLGtCQUFrQixDQUFDLENBQUMsRUFBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM1Riw4RkFBOEY7WUFDOUYsOEZBQThGO1lBQzlGLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQix1QkFBbUIsTUFBTSxDQUFDLENBQUE7QUFDMUIsTUFBTyxJQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFDOUIsTUFBTyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDeEIsMEJBQTJCLGlCQUFpQixDQUFDLENBQUE7QUFDN0MsTUFBWSxJQUFJLFdBQU0sZUFBZSxDQUFDLENBQUE7QUFHdEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxXQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUVsRSxJQUFJLFFBQWtCLENBQUM7QUFFdkIsUUFBUSxDQUFDLE1BQU0sRUFBQztJQUNaLFFBQVEsQ0FBQyxTQUFTLEVBQUM7UUFDZixFQUFFLENBQUMsZ0NBQWdDLEVBQUMsVUFBUyxJQUFJO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsc0JBQVksRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDaEIsSUFBSSxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7SUFDRixRQUFRLENBQUMsTUFBTSxFQUFDO1FBQ1osRUFBRSxDQUFDLDRDQUE0QyxFQUFDO1lBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtnQkFDN0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTTtnQkFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFDLGFBQWEsQ0FBQztnQkFDOUMsYUFBYSxFQUFDLGtEQUFrRDtnQkFDaEUsUUFBUSxFQUFDLElBQUk7YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQTtRQUNGLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBQyxVQUFTLElBQUk7WUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdEIsNEJBQTRCLEdBQUcsRUFBRSxHQUFHO2dCQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDekQsQ0FBQztZQUNELFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLGtCQUFrQixDQUFDLENBQUMsRUFBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM1RixZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxrQkFBa0IsQ0FBQyxDQUFDLEVBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDNUYsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsa0JBQWtCLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzVGLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFDIn0= \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index 85b40d9..cc25a7b 100644 --- a/test/test.ts +++ b/test/test.ts @@ -39,8 +39,8 @@ describe("cert",function(){ return Math.floor(Math.random() * (max - min) + min); } promiseArray.push(testCert.getDomainCert(`testing${getRandomArbitrary(1,100000)}.bleu.de`)); - //promiseArray.push(testCert.getDomainCert(`testing${getRandomArbitrary(1,100000)}.bleu.de`)); - //promiseArray.push(testCert.getDomainCert(`testing${getRandomArbitrary(1,100000)}.bleu.de`)); + promiseArray.push(testCert.getDomainCert(`testing${getRandomArbitrary(1,100000)}.bleu.de`)); + promiseArray.push(testCert.getDomainCert(`testing${getRandomArbitrary(1,100000)}.bleu.de`)); q.all(promiseArray).then(() => { done(); }); diff --git a/ts/cert.classes.cert.helpers.ts b/ts/cert.classes.cert.helpers.ts new file mode 100644 index 0000000..cbef911 --- /dev/null +++ b/ts/cert.classes.cert.helpers.ts @@ -0,0 +1,86 @@ +import {Cert} from "./index.ts"; +import * as plugins from "./cert.plugins"; +import * as paths from "./cert.paths"; + + + +/** + * schedule a retry of certificate request + */ +export let scheduleRetry = (domainArg:string,certClassArg:Cert) => { + let done = plugins.q.defer(); + setTimeout(() => { + certClassArg.getDomainCert(domainArg) + .then(done.resolve); + },20000); + return done.promise; +}; + +/** + * check if a given domainCert is still valid + */ +export 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; + } + +} + +export interface certConfig { + domainName: string; + created: number; + expires: number; +}; + +/** + * update a ssl directory + */ +export 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) { + plugins.smartfile.fs.copySync( + 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") + ); + // create cert config + let certRegex = /.*\-([0-9]*)\.pem/; + let certFileNameWithTime: string = plugins.smartfile.fs.listFilesSync(domainCertFolder, certRegex)[0]; + let certTime = parseInt(certRegex.exec(certFileNameWithTime)[1]); + let certConfig: certConfig = { + domainName: domainNameArg, + created: certTime, + expires: certTime + 7776000 + }; + plugins.smartfile.memory.toFsSync( + JSON.stringify(certConfig), + plugins.path.join(sslDirArg, domainNameArg, "config.json") + ); + }; +} + +const enum gitSyncDirection { + toOrigin, + fromOrigin +} + +let updateGitOrigin = (syncDirectionArg: gitSyncDirection) => { + +}; + +updateGitOrigin(gitSyncDirection.toOrigin); \ No newline at end of file diff --git a/ts/cert.classes.cert.ts b/ts/cert.classes.cert.ts new file mode 100644 index 0000000..d4730d9 --- /dev/null +++ b/ts/cert.classes.cert.ts @@ -0,0 +1,160 @@ +import * as plugins from "./cert.plugins"; +import * as paths from "./cert.paths"; +import * as helpers from "./cert.classes.cert.helpers" + +export interface ICertConstructorOptions { + cfEmail: string, + cfKey: string, + sslDir?: string, + gitOriginRepo?: string, + testMode?: boolean +}; + +export class Cert { + private _cfEmail: string; + private _cfKey: string; + private _sslDir: string; + private _gitOriginRepo: string; + private _testMode: boolean; + domainCertRequestMap: plugins.lik.Stringmap = new plugins.lik.Stringmap(); + certificatesPresent: Certificate[]; + certificatesValid: Certificate[]; + + /** + * Constructor for Cert object + */ + constructor(optionsArg: ICertConstructorOptions) { + 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") + ); + // setup sslDir + if (!this._sslDir) this._sslDir = paths.defaultSslDir; + // setup Git + if (this._gitOriginRepo) { + plugins.smartgit.init(this._sslDir); + 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 + ); + plugins.shelljs.exec("chmod 700 " + paths.letsencryptSh); + plugins.shelljs.exec("chmod 700 " + paths.certHook); + plugins.shelljs.exec( + `bash -c "${paths.letsencryptSh} -c --no-lock -f ${paths.leShConfig} -d notthere.notthere -t dns-01 -k ${paths.certHook} -o ${paths.certDir}"`, + { + silent: true + }); + }; + + /** + * Pulls already requested certificates from git origin + */ + sslGitOriginPull = () => { + if (this._gitOriginRepo) { + plugins.smartgit.pull(this._sslDir, "origin", "master"); + } + }; + + /** + * Pushes all new requested certificates to git origin + */ + sslGitOriginAddCommitPush = () => { + 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"); + } + }; + + /** + * gets a ssl cert for a given domain + */ + getDomainCert(domainNameArg: string, optionsArg: { force: boolean } = { force: false }) { + let done = plugins.q.defer(); + let domainStringData = new plugins.smartstring.Domain(domainNameArg); + let sameZoneRequesting: boolean = this.domainCertRequestMap.checkMinimatch("*" + domainStringData.zoneName) + // make sure no one else requires the same domain at the same time + if (!this.domainCertRequestMap.checkString(domainNameArg)) { + this.domainCertRequestMap.addString(domainNameArg); + if (!helpers.checkDomainsStillValid(domainNameArg, this._sslDir) || optionsArg.force) { + if (!sameZoneRequesting) { + plugins.smartfile.fs.ensureDir(paths.certDir); + plugins.beautylog.info(`getting cert for ${domainNameArg}`); + plugins.shelljs.exec( + `bash -c "${paths.letsencryptSh} -c --no-lock -f ${paths.leShConfig} -d ${domainNameArg} -t dns-01 -k ${paths.certHook} -o ${paths.certDir}"`, + { + silent: true + }, + (codeArg, stdoutArg) => { + if (codeArg == 0) { + console.log(stdoutArg); + let fetchedCertsArray: string[] = plugins.smartfile.fs.listFoldersSync(paths.certDir); + if (fetchedCertsArray.indexOf(domainNameArg) != -1) { + helpers.updateSslDirSync(this._sslDir, domainNameArg); + plugins.smartfile.fs.removeSync(plugins.path.join(paths.certDir, domainNameArg)); + }; + done.resolve(); + } else { + plugins.beautylog.warn(`${domainNameArg} scheduled for retry`); + helpers.scheduleRetry(domainNameArg, this).then(done.resolve); + } + this.domainCertRequestMap.removeString(domainNameArg); + } + ); + } else { + plugins.beautylog.info(`${domainNameArg} is waiting for domains names of same zone to finish`); + this.domainCertRequestMap.removeString(domainNameArg); + this.domainCertRequestMap.registerUntilTrue( + () => { + return !this.domainCertRequestMap.checkMinimatch("*" + domainStringData.zoneName); + }, + () => { + this.getDomainCert(domainNameArg).then(done.resolve); + } + ); + } + } else { + plugins.beautylog.info("certificate for " + domainNameArg + " is still valid! Not fetching new one!"); + this.domainCertRequestMap.removeString(domainNameArg); + done.resolve(); + }; + } else { + plugins.beautylog.warn(`${domainNameArg} is already requesting`); + }; + + return done.promise; + }; + cleanOldCertificates() { + + }; +} + +export class Certificate { + domainName: string; + creationDate: Date; + expiryDate: Date; + constructor() { + + }; +}; + diff --git a/ts/cert.helpers.ts b/ts/cert.helpers.ts deleted file mode 100644 index db9d150..0000000 --- a/ts/cert.helpers.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {Cert} from "./index.ts"; -import * as plugins from "./cert.plugins"; -import * as paths from "./cert.paths"; - -let firstCall = true; -let enoughTime = false; -export let accountsKeyPresent = () => { - let done = plugins.q.defer(); - if (firstCall) { - done.resolve(); - firstCall = false; - }  else { - setTimeout(done.resolve,5000); - }; - return done.promise; -}; - -export let scheduleRetry = (domainArg:string,certClassArg:Cert) => { - let done = plugins.q.defer(); - setTimeout(() => { - certClassArg.getDomainCert(domainArg) - .then(done.resolve); - },20000); - return done.promise; -}; \ No newline at end of file diff --git a/ts/index.ts b/ts/index.ts index 02c565d..6c686ef 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,205 +1,4 @@ import * as plugins from "./cert.plugins"; import * as paths from "./cert.paths"; -import * as helpers from "./cert.helpers" -export interface ICertConstructorOptions { - cfEmail: string, - cfKey: string, - sslDir?: string, - gitOriginRepo?: string, - testMode?: boolean -}; - -export class Cert { - private _cfEmail: string; - private _cfKey: string; - private _sslDir: string; - private _gitOriginRepo: string; - private _testMode: boolean; - domainsCurrentlyRequesting: plugins.lik.Stringmap = new plugins.lik.Stringmap(); - certificatesPresent: Certificate[]; - certificatesValid: Certificate[]; - - /** - * Constructor for Cert object - */ - constructor(optionsArg: ICertConstructorOptions) { - 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") - ); - // setup sslDir - if (!this._sslDir) this._sslDir = paths.defaultSslDir; - // setup Git - if (this._gitOriginRepo) { - plugins.smartgit.init(this._sslDir); - 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 - ); - plugins.shelljs.exec("chmod 700 " + paths.letsencryptSh); - plugins.shelljs.exec("chmod 700 " + paths.certHook); - }; - - /** - * Pulls already requested certificates from git origin - */ - sslGitOriginPull = () => { - if (this._gitOriginRepo) { - plugins.smartgit.pull(this._sslDir, "origin", "master"); - } - }; - - /** - * Pushes all new requested certificates to git origin - */ - sslGitOriginAddCommitPush = () => { - 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"); - } - }; - - /** - * gets a ssl cert for a given domain - */ - getDomainCert(domainNameArg: string, optionsArg: { force: boolean } = { force: false }) { - let done = plugins.q.defer(); - // make sure no one else requires the same domain at the same time - helpers.accountsKeyPresent().then(() => { - if (!this.domainsCurrentlyRequesting.checkString(domainNameArg)) { - this.domainsCurrentlyRequesting.addString(domainNameArg); - if (!checkDomainsStillValid(domainNameArg, this._sslDir) || optionsArg.force) { - plugins.smartfile.fs.ensureDir(paths.certDir); - plugins.beautylog.info(`getting cert for ${domainNameArg}`); - plugins.shelljs.exec( - `bash -c "${paths.letsencryptSh} -c --no-lock -f ${paths.leShConfig} -d ${domainNameArg} -t dns-01 -k ${paths.certHook} -o ${paths.certDir}"`, - { - silent: true - }, - (codeArg, stdoutArg) => { - if (codeArg == 0) { - console.log(stdoutArg); - let fetchedCertsArray: string[] = plugins.smartfile.fs.listFoldersSync(paths.certDir); - if (fetchedCertsArray.indexOf(domainNameArg) != -1) { - updateSslDirSync(this._sslDir, domainNameArg); - plugins.smartfile.fs.removeSync(plugins.path.join(paths.certDir, domainNameArg)); - } - this.domainsCurrentlyRequesting.removeString(domainNameArg); - done.resolve(); - } else { - this.domainsCurrentlyRequesting.removeString(domainNameArg); - plugins.beautylog.warn(`${domainNameArg} scheduled for retry`); - helpers.scheduleRetry(domainNameArg,this).then(done.resolve); - } - } - ); - } else { - plugins.beautylog.info("certificate for " + domainNameArg + " is still valid! Not fetching new one!"); - this.domainsCurrentlyRequesting.removeString(domainNameArg); - done.resolve(); - }; - } else { - plugins.beautylog.warn(`${domainNameArg} is already requesting`); - }; - }); - - return done.promise; - }; - cleanOldCertificates() { - - }; -} - -export class Certificate { - domainName: string; - creationDate: Date; - expiryDate: Date; - constructor() { - - }; -} - -interface certConfig { - domainName: string; - created: number; - expires: number; -} - -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) => { - plugins.smartfile.fs.ensureDirSync(sslDirArg); - 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.smartfile.fs.copySync( - 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 certTime = parseInt(certRegex.exec(certFileNameWithTime)[1]); - let certConfig: certConfig = { - domainName: domainNameArg, - created: certTime, - expires: certTime + 7776000 - }; - plugins.smartfile.memory.toFsSync( - JSON.stringify(certConfig), - plugins.path.join(sslDirArg, domainNameArg, "config.json") - ); - }; -} - -const enum gitSyncDirection { - toOrigin, - fromOrigin -} - -let updateGitOrigin = (syncDirectionArg: gitSyncDirection) => { - -}; - -updateGitOrigin(gitSyncDirection.toOrigin); \ No newline at end of file +export * from "./cert.classes.cert"; \ No newline at end of file