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