From fd89e54295beec8775afa182b9fa74dd1f4be34d Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Sun, 1 Jan 2017 05:18:50 +0100 Subject: [PATCH] fix --- dist/cert.classes.cert.d.ts | 6 +++ dist/cert.classes.cert.js | 18 +++++--- dist/cert.classes.certrepo.d.ts | 9 +++- dist/cert.classes.certrepo.js | 34 +++++++++------ dist/cert.classes.letsencrypt.js | 71 +++++++++++++++++++++----------- dist/cert.plugins.js | 2 +- package.json | 18 ++++---- test/test.js | 9 +++- test/test.ts | 7 +++- ts/cert.classes.cert.ts | 16 +++++-- ts/cert.classes.certrepo.ts | 40 +++++++++++------- ts/cert.classes.letsencrypt.ts | 71 +++++++++++++++++++++----------- 12 files changed, 203 insertions(+), 98 deletions(-) diff --git a/dist/cert.classes.cert.d.ts b/dist/cert.classes.cert.d.ts index 68d0ccc..496d5df 100644 --- a/dist/cert.classes.cert.d.ts +++ b/dist/cert.classes.cert.d.ts @@ -20,6 +20,12 @@ export declare class Cert { * Constructor for Cert object */ constructor(optionsArg: ICertConstructorOptions); + /** + * setup the Cert instanceof + * @executes ASYNC + * @return Promise + */ + setup(): q.Promise<{}>; /** * adds a Certificate for a given domain */ diff --git a/dist/cert.classes.cert.js b/dist/cert.classes.cert.js index a2cf4ce..09b377e 100644 --- a/dist/cert.classes.cert.js +++ b/dist/cert.classes.cert.js @@ -3,6 +3,7 @@ const q = require("q"); const lik_1 = require("lik"); // classes const cert_classes_certificate_1 = require("./cert.classes.certificate"); +const cert_classes_certrepo_1 = require("./cert.classes.certrepo"); const cert_classes_letsencrypt_1 = require("./cert.classes.letsencrypt"); const cert_classes_challengehandler_1 = require("./cert.classes.challengehandler"); class Cert { @@ -23,12 +24,19 @@ class Cert { sslDir: optionsArg.sslDirPath, challengeHandler: this._challengeHandler }); - // setup CertRpo - /* this._certRepo = new CertRepo({ + this._certRepo = new cert_classes_certrepo_1.CertRepo({ sslDirPath: optionsArg.sslDirPath, - gitOriginRepo: optionsArg.gitOriginRepo, + remoteGitUrl: optionsArg.gitOriginRepo, certInstance: this - }) */ + }); + } + /** + * setup the Cert instanceof + * @executes ASYNC + * @return Promise + */ + setup() { + return this._certRepo.setup(); } /** * adds a Certificate for a given domain @@ -64,4 +72,4 @@ class Cert { } } exports.Cert = Cert; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5jbGFzc2VzLmNlcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jZXJ0LmNsYXNzZXMuY2VydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsdUJBQXNCO0FBQ3RCLDZCQUEwQztBQUsxQyxVQUFVO0FBQ1YseUVBQXdEO0FBRXhELHlFQUFnRTtBQUNoRSxtRkFBa0U7QUFXbEU7SUFPSTs7T0FFRztJQUNILFlBQVksVUFBbUM7UUFUL0MsMkJBQXNCLEdBQUcsSUFBSSxlQUFTLEVBQUUsQ0FBQTtRQUN4QyxtQkFBYyxHQUFHLElBQUksZUFBUyxFQUFlLENBQUE7UUFVekMsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLGdEQUFnQixDQUFDO1lBQzFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztZQUMzQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7U0FDMUIsQ0FBQyxDQUFBO1FBRUYsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxzQ0FBVyxDQUFDO1lBQy9CLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztZQUN2QixNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVU7WUFDN0IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtTQUMzQyxDQUFDLENBQUE7UUFFRixnQkFBZ0I7UUFDaEI7Ozs7YUFJSztJQUNULENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxhQUFxQixFQUFFLGFBQWlDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtRQUNuRixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDcEIsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVc7WUFDNUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUFBO1FBQ25ELENBQUMsQ0FBQyxDQUFBO1FBQ0YsRUFBRSxDQUFDLENBQUMsb0JBQW9CLFlBQVksc0NBQVcsQ0FBQyxDQUFDLENBQUM7WUFDOUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFO2lCQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzNCLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLG9CQUFvQixHQUFHLElBQUksc0NBQVcsQ0FBQztnQkFDbkMsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFVBQVUsRUFBRSxhQUFhO2FBQzVCLENBQUMsQ0FBQTtZQUNGLG9CQUFvQixDQUFDLEtBQUssRUFBRTtpQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQixDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO0lBRXBCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07SUFFTixDQUFDO0NBQ0o7QUFwRUQsb0JBb0VDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5jbGFzc2VzLmNlcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jZXJ0LmNsYXNzZXMuY2VydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsdUJBQXNCO0FBQ3RCLDZCQUEwQztBQUsxQyxVQUFVO0FBQ1YseUVBQXdEO0FBQ3hELG1FQUFrRDtBQUNsRCx5RUFBZ0U7QUFDaEUsbUZBQWtFO0FBV2xFO0lBT0k7O09BRUc7SUFDSCxZQUFZLFVBQW1DO1FBVC9DLDJCQUFzQixHQUFHLElBQUksZUFBUyxFQUFFLENBQUE7UUFDeEMsbUJBQWMsR0FBRyxJQUFJLGVBQVMsRUFBZSxDQUFBO1FBVXpDLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxnREFBZ0IsQ0FBQztZQUMxQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87WUFDM0IsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1NBQzFCLENBQUMsQ0FBQTtRQUVGLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksc0NBQVcsQ0FBQztZQUMvQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDdkIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxVQUFVO1lBQzdCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7U0FDM0MsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGdDQUFRLENBQUM7WUFDMUIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO1lBQ2pDLFlBQVksRUFBRSxVQUFVLENBQUMsYUFBYTtZQUN0QyxZQUFZLEVBQUUsSUFBSTtTQUNyQixDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUs7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsYUFBcUIsRUFBRSxhQUFpQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDbkYsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ3BCLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxLQUFLLGFBQWEsQ0FBQTtRQUNuRCxDQUFDLENBQUMsQ0FBQTtRQUNGLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixZQUFZLHNDQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzlDLG9CQUFvQixDQUFDLEtBQUssRUFBRTtpQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixvQkFBb0IsR0FBRyxJQUFJLHNDQUFXLENBQUM7Z0JBQ25DLFlBQVksRUFBRSxJQUFJO2dCQUNsQixVQUFVLEVBQUUsYUFBYTthQUM1QixDQUFDLENBQUE7WUFDRixvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7aUJBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0IsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQjtJQUVwQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO0lBRU4sQ0FBQztDQUNKO0FBNUVELG9CQTRFQyJ9 \ No newline at end of file diff --git a/dist/cert.classes.certrepo.d.ts b/dist/cert.classes.certrepo.d.ts index 3937125..1cb0e25 100644 --- a/dist/cert.classes.certrepo.d.ts +++ b/dist/cert.classes.certrepo.d.ts @@ -3,14 +3,19 @@ import * as q from 'q'; import { Cert } from './cert.classes.cert'; export interface ICertRepoConstructorOptions { sslDirPath: string; - gitOriginRepo: string; + remoteGitUrl: string; certInstance: Cert; } export declare class CertRepo { private _sslDirPath; - private _gitOriginRepo; + private _remoteGitUrl; + private gitRepo; private _certInstance; constructor(optionsArg: ICertRepoConstructorOptions); + /** + * setup the Cert instance + */ + setup(): q.Promise<{}>; /** * syncs an objectmap of Certificates with repo */ diff --git a/dist/cert.classes.certrepo.js b/dist/cert.classes.certrepo.js index 9581f91..e68c7e5 100644 --- a/dist/cert.classes.certrepo.js +++ b/dist/cert.classes.certrepo.js @@ -8,33 +8,43 @@ class CertRepo { * Pulls already requested certificates from git origin */ this.sslGitOriginPull = () => { - if (this._gitOriginRepo) { - plugins.smartgit.pull(this._sslDirPath, 'origin', 'master'); + if (this.gitRepo) { + this.gitRepo.pull('origin', 'master'); } }; /** * Pushes all new requested certificates to git origin */ this.sslGitOriginAddCommitPush = () => { - if (this._gitOriginRepo) { - plugins.smartgit.add.addAll(this._sslDirPath); - plugins.smartgit.commit(this._sslDirPath, 'added new SSL certificates and deleted obsolete ones.'); - plugins.smartgit.push(this._sslDirPath, 'origin', 'master'); + if (this._remoteGitUrl) { + this.gitRepo.addAll(); + this.gitRepo.commit('added new SSL certificates and deleted obsolete ones.'); + this.gitRepo.push('origin', 'master'); } }; this._sslDirPath = optionsArg.sslDirPath; - this._gitOriginRepo = optionsArg.gitOriginRepo; + this._remoteGitUrl = optionsArg.remoteGitUrl; this._certInstance = optionsArg.certInstance; // setup sslDir if (!this._sslDirPath) { this._sslDirPath = paths.defaultSslDir; } + } + /** + * setup the Cert instance + */ + setup() { // setup Git - if (this._gitOriginRepo) { - plugins.smartgit.init(this._sslDirPath); - plugins.smartgit.remote.add(this._sslDirPath, 'origin', this._gitOriginRepo); - this.sslGitOriginPull(); + let done = q.defer(); + if (this._remoteGitUrl) { + plugins.smartfile.fs.ensureEmptyDirSync(paths.defaultSslDir); + plugins.smartgit.createRepoFromClone(this._remoteGitUrl, paths.defaultSslDir) + .then(gitRepoArg => { + this.gitRepo = gitRepoArg; + done.resolve(); + }); } + return done.promise; } /** * syncs an objectmap of Certificates with repo @@ -46,4 +56,4 @@ class CertRepo { } } exports.CertRepo = CertRepo; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5jbGFzc2VzLmNlcnRyZXBvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2VydC5jbGFzc2VzLmNlcnRyZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx1QkFBc0I7QUFFdEIsMENBQXlDO0FBQ3pDLHNDQUFxQztBQVdyQztJQUlJLFlBQVksVUFBdUM7UUEyQm5EOztXQUVHO1FBQ0gscUJBQWdCLEdBQUc7WUFDZixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDL0QsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQUVEOztXQUVHO1FBQ0gsOEJBQXlCLEdBQUc7WUFDeEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7Z0JBQzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsdURBQXVELENBQUMsQ0FBQTtnQkFDbEcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDL0QsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQTVDRyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUE7UUFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFBO1FBQzlDLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQTtRQUU1QyxlQUFlO1FBQ2YsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUEsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUE7UUFDMUMsQ0FBQztRQUVELFlBQVk7UUFDWixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN0QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDdkMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUM1RSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNGLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNwQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0NBcUJKO0FBbERELDRCQWtEQyJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5jbGFzc2VzLmNlcnRyZXBvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2VydC5jbGFzc2VzLmNlcnRyZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx1QkFBc0I7QUFHdEIsMENBQXlDO0FBQ3pDLHNDQUFxQztBQVdyQztJQUtJLFlBQVksVUFBdUM7UUFxQ25EOztXQUVHO1FBQ0gscUJBQWdCLEdBQUc7WUFDZixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDekMsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQUVEOztXQUVHO1FBQ0gsOEJBQXlCLEdBQUc7WUFDeEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUE7Z0JBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLHVEQUF1RCxDQUFDLENBQUE7Z0JBQzVFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUN6QyxDQUFDO1FBQ0wsQ0FBQyxDQUFBO1FBdERHLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQTtRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUE7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFBO1FBRTVDLGVBQWU7UUFDZixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQTtRQUMxQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNELFlBQVk7UUFDWixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDcEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDckIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQzVELE9BQU8sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDO2lCQUN4RSxJQUFJLENBQUMsVUFBVTtnQkFDWixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQTtnQkFDekIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBQ2xCLENBQUMsQ0FBQyxDQUFBO1FBQ1YsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDRixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDdkIsQ0FBQztDQXFCSjtBQTdERCw0QkE2REMifQ== \ No newline at end of file diff --git a/dist/cert.classes.letsencrypt.js b/dist/cert.classes.letsencrypt.js index 149f262..6bf1175 100644 --- a/dist/cert.classes.letsencrypt.js +++ b/dist/cert.classes.letsencrypt.js @@ -1,12 +1,20 @@ "use strict"; const q = require("q"); +let letsencrypt = require('letsencrypt'); +let leStore = require('le-store-certbot'); const plugins = require("./cert.plugins"); const paths = require("./cert.paths"); -let letsencrypt = require('letsencrypt'); -let leStore = require('le-store-certbot').create({ +let leStoreConfig = { configDir: paths.leConfigDir, - debug: false -}); + privkeyPath: ':configDir/:hostname/privkey.pem', + fullchainPath: ':configDir/:hostname/fullchain.pem', + certPath: ':configDir/:hostname/cert.pem', + chainPath: ':configDir/:hostname/chain.pem', + workDir: ':configDir/letsencrypt/var/lib', + logsDir: ':configDir/letsencrypt/var/log', + debug: true +}; +let leStoreInstance = leStore.create(leStoreConfig); class Letsencrypt { constructor(optionsArg) { // determine leEnv @@ -27,11 +35,14 @@ class Letsencrypt { 'dns-01': this._leChallengeHandler() }, challengeType: 'dns-01', - store: leStore, + store: leStoreInstance, agreeToTerms: (opts, agreeCb) => { agreeCb(null, opts.tosUrl); }, - debug: true + debug: true, + log: function (debug) { + console.info(arguments); + } }); console.log(); } @@ -41,22 +52,34 @@ class Letsencrypt { registerDomain(domainNameArg) { plugins.beautylog.log(`trying to register domain ${domainNameArg}`); let done = q.defer(); - console.log('test'); - console.log(this._leServerUrl); - this._leInstance.register({ - domains: [domainNameArg], - email: 'office@lossless.com', - agreeTos: true, - rsaKeySize: 2048, - challengeType: 'dns-01' - }).then(results => { - plugins.beautylog.success(`Got certificates for ${domainNameArg}`); - this._leCopyToDestination(domainNameArg).then(done.resolve); - }, (err) => { - console.error('[Error]: node-letsencrypt/examples/standalone'); - console.error(err.stack); - done.resolve(); - }).catch(err => { console.log(err); }); + plugins.smartfile.fs.ensureDirSync(plugins.path.join(paths.leConfigDir, 'live', domainNameArg)); + this._leInstance.check({ domains: [domainNameArg] }).then((cert) => { + console.log(cert); + let opts = { + domains: [domainNameArg], + email: 'domains@lossless.org', + agreeTos: true, + rsaKeySize: 2048, + challengeType: 'dns-01', + duplicate: true + }; + if (cert) { + if (true) { + return this._leInstance.renew(opts, cert).catch((err) => { + console.log(err); + }); + } + else { + return cert; + } + } + else { + // Register Certificate manually + return this._leInstance.register(opts).catch((err) => { + console.log(err); + }); + } + }); return done.promise; } // -------------------------------------------- @@ -100,7 +123,7 @@ class Letsencrypt { cb(); }); }, - loopback: (defaults, domain, challenge, done) => { + loopback: (defaults, domain, token, keyAuthorization, done) => { done(); }, test: (defaults, domain, challenge, cb) => { @@ -110,4 +133,4 @@ class Letsencrypt { } } exports.Letsencrypt = Letsencrypt; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5jbGFzc2VzLmxldHNlbmNyeXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2VydC5jbGFzc2VzLmxldHNlbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx1QkFBc0I7QUFFdEIsMENBQXlDO0FBQ3pDLHNDQUFxQztBQUVyQyxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUE7QUFDeEMsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdDLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVztJQUM1QixLQUFLLEVBQUUsS0FBSztDQUNmLENBQUMsQ0FBQTtBQVlGO0lBUUksWUFBWSxVQUEwQztRQUNsRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFBO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUE7UUFDbkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFBO1FBRS9CLDhCQUE4QjtRQUM5QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsbUJBQW1CLENBQUE7UUFDdkQsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUE7UUFDcEQsQ0FBQztRQUVELG9CQUFvQjtRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3pCLFVBQVUsRUFBRTtnQkFDUixRQUFR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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5jbGFzc2VzLmxldHNlbmNyeXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2VydC5jbGFzc2VzLmxldHNlbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx1QkFBc0I7QUFDdEIsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0FBQ3hDLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0FBRXpDLDBDQUF5QztBQUN6QyxzQ0FBcUM7QUFZckMsSUFBSSxhQUFhLEdBQUc7SUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXO0lBQzVCLFdBQVcsRUFBRSxrQ0FBa0M7SUFDL0MsYUFBYSxFQUFFLG9DQUFvQztJQUNuRCxRQUFRLEVBQUUsK0JBQStCO0lBQ3pDLFNBQVMsRUFBRSxnQ0FBZ0M7SUFFM0MsT0FBTyxFQUFFLGdDQUFnQztJQUN6QyxPQUFPLEVBQUUsZ0NBQWdDO0lBRXpDLEtBQUssRUFBRSxJQUFJO0NBQ2QsQ0FBQTtBQUVELElBQUksZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUE7QUFFbkQ7SUFRSSxZQUFZLFVBQTBDO1FBQ2xELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUE7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQTtRQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUE7UUFFL0IsOEJBQThCO1FBQzlCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQTtRQUN2RCxDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFL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 \ No newline at end of file diff --git a/dist/cert.plugins.js b/dist/cert.plugins.js index b8205f1..0dcdd0e 100644 --- a/dist/cert.plugins.js +++ b/dist/cert.plugins.js @@ -22,4 +22,4 @@ const smartgit = require("smartgit"); exports.smartgit = smartgit; const smartstring = require("smartstring"); exports.smartstring = smartstring; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2VydC5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwwQkFBdUI7QUFDdkIsdUNBQXNDO0FBYWxDLG9CQWJRLFNBQVMsQ0FhUjtBQVpiLGlDQUFnQztBQWE1QixpQkFiUSxNQUFNLENBYVI7QUFaVixJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7QUFheEIsYUFiQSxFQUFFLENBYUE7QUFaTiwyQkFBMEI7QUFhdEIsY0FiUSxHQUFHLENBYVI7QUFaUCw2QkFBNEI7QUFheEIsZUFiUSxJQUFJLENBYVI7QUFaUix1QkFBc0I7QUFhbEIsWUFiUSxDQUFDLENBYVI7QUFaTCxtQ0FBa0M7QUFhOUIsa0JBYlEsT0FBTyxDQWFSO0FBWlgscUNBQW9DO0FBYWhDLG1CQWJRLFFBQVEsQ0FhUjtBQVpaLHVDQUFzQztBQWFsQyxvQkFiUSxTQUFTLENBYVI7QUFaYixxQ0FBb0M7QUFhaEMsbUJBYlEsUUFBUSxDQWFSO0FBWlosMkNBQTBDO0FBYXRDLHNCQWJRLFdBQVcsQ0FhUiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2VydC5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwwQkFBdUI7QUFDdkIsdUNBQXNDO0FBYWxDLDhCQUFTO0FBWmIsaUNBQWdDO0FBYTVCLHdCQUFNO0FBWlYsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBYXhCLGdCQUFFO0FBWk4sMkJBQTBCO0FBYXRCLGtCQUFHO0FBWlAsNkJBQTRCO0FBYXhCLG9CQUFJO0FBWlIsdUJBQXNCO0FBYWxCLGNBQUM7QUFaTCxtQ0FBa0M7QUFhOUIsMEJBQU87QUFaWCxxQ0FBb0M7QUFhaEMsNEJBQVE7QUFaWix1Q0FBc0M7QUFhbEMsOEJBQVM7QUFaYixxQ0FBb0M7QUFhaEMsNEJBQVE7QUFaWiwyQ0FBMEM7QUFhdEMsa0NBQVcifQ== \ No newline at end of file diff --git a/package.json b/package.json index 86c4997..32144b5 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "scripts": { - "test": "(npm run cleanTest && npmts)", + "test": "(npm run cleanTest && npmts --nodocs)", "cleanTest": "(rm -rf ./test/assets)", "compile": "(npmts --notest)" }, @@ -30,22 +30,22 @@ "@types/q": "0.0.32", "beautylog": "^6.0.0", "cflare": "0.0.10", - "fs-extra": "^0.30.0", + "fs-extra": "^1.0.0", "le-store-certbot": "^2.0.3", "letsencrypt": "^2.1.8", - "lik": "^1.0.24", + "lik": "^1.0.27", "q": "^1.4.1", - "smartcli": "^1.0.10", - "smartfile": "^4.0.24", - "smartgit": "0.1.9", - "smartstring": "^2.0.17", + "smartcli": "^2.0.1", + "smartfile": "^4.1.1", + "smartgit": "1.0.5", + "smartstring": "^2.0.22", "typings-global": "^1.0.14" }, "devDependencies": { "@types/should": "^8.1.30", - "npmts-g": "^5.2.8", + "npmts-g": "^5.2.10", "qenv": "^1.1.1", - "should": "^11.1.1", + "should": "^11.1.2", "typings-test": "^1.0.3" } } diff --git a/test/test.js b/test/test.js index 3cac396..575cbbc 100644 --- a/test/test.js +++ b/test/test.js @@ -10,7 +10,6 @@ let testCert; describe('cert', function () { describe('Cert', function () { it('should create a new Cert object from class', function () { - this.timeout(40000); testCert = new cert.Cert({ cfEmail: process.env.CF_EMAIL, cfKey: process.env.CF_KEY, @@ -20,6 +19,12 @@ describe('cert', function () { }); should(testCert).be.instanceof(cert.Cert); }); + it('should run class Cert.setup() successful', function (done) { + this.timeout(40000); + testCert.setup().then(() => { + done(); + }); + }); it('should get a valid certificate', function (done) { this.timeout(1200000); let promiseArray = []; @@ -35,4 +40,4 @@ describe('cert', function () { }); }); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUFxQjtBQUNyQixpQ0FBZ0M7QUFDaEMsK0JBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qix1QkFBdUI7QUFDdkIsc0NBQXFDO0FBR3JDLElBQUksUUFBUSxHQUFHLElBQUksV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUE7QUFFakUsSUFBSSxRQUFtQixDQUFBO0FBRXZCLFFBQVEsQ0FBQyxNQUFNLEVBQUM7SUFDWixRQUFRLENBQUMsTUFBTSxFQUFDO1FBQ1osRUFBRSxDQUFDLDRDQUE0QyxFQUFDO1lBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDbkIsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtnQkFDN0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTTtnQkFDekIsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFDLGFBQWEsQ0FBQztnQkFDbEQsYUFBYSxFQUFFLGtEQUFrRDtnQkFDakUsS0FBSyxFQUFFLFNBQVM7YUFDbkIsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzdDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsRUFBRSxDQUFDLGdDQUFnQyxFQUFDLFVBQVMsSUFBSTtZQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3JCLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQTtZQUNyQiw0QkFBNEIsR0FBRyxFQUFFLEdBQUc7Z0JBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQTtZQUN4RCxDQUFDO1lBQ0QsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsa0JBQWtCLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1lBQzVGLCtGQUErRjtZQUMvRiwrRkFBK0Y7WUFDL0YsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxDQUFBO1lBQ1YsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFDLENBQUEifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUFxQjtBQUNyQixpQ0FBZ0M7QUFDaEMsK0JBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qix1QkFBdUI7QUFDdkIsc0NBQXFDO0FBR3JDLElBQUksUUFBUSxHQUFHLElBQUksV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUE7QUFFakUsSUFBSSxRQUFtQixDQUFBO0FBRXZCLFFBQVEsQ0FBQyxNQUFNLEVBQUM7SUFDWixRQUFRLENBQUMsTUFBTSxFQUFDO1FBQ1osRUFBRSxDQUFDLDRDQUE0QyxFQUFDO1lBQzVDLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7Z0JBQzdCLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU07Z0JBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBQyxhQUFhLENBQUM7Z0JBQ2xELGFBQWEsRUFBRSxrREFBa0Q7Z0JBQ2pFLEtBQUssRUFBRSxTQUFTO2FBQ25CLENBQUMsQ0FBQTtZQUNGLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM3QyxDQUFDLENBQUMsQ0FBQTtRQUNGLEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxVQUFTLElBQUk7WUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNuQixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNsQixJQUFJLEVBQUUsQ0FBQTtZQUNWLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7UUFDRixFQUFFLENBQUMsZ0NBQWdDLEVBQUMsVUFBUyxJQUFJO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDckIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFBO1lBQ3JCLDRCQUE0QixHQUFHLEVBQUUsR0FBRztnQkFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO1lBQ3hELENBQUM7WUFDRCxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxrQkFBa0IsQ0FBQyxDQUFDLEVBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7WUFDNUYsK0ZBQStGO1lBQy9GLCtGQUErRjtZQUMvRixDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDckIsSUFBSSxFQUFFLENBQUE7WUFDVixDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index 827f4ae..8b071af 100644 --- a/test/test.ts +++ b/test/test.ts @@ -13,7 +13,6 @@ let testCert: cert.Cert describe('cert',function(){ describe('Cert',function(){ it('should create a new Cert object from class',function(){ - this.timeout(40000) testCert = new cert.Cert({ cfEmail: process.env.CF_EMAIL, cfKey: process.env.CF_KEY, @@ -23,6 +22,12 @@ describe('cert',function(){ }) should(testCert).be.instanceof(cert.Cert) }) + it('should run class Cert.setup() successful', function(done){ + this.timeout(40000) + testCert.setup().then(() => { + done() + }) + }) it('should get a valid certificate',function(done){ this.timeout(1200000) let promiseArray = [] diff --git a/ts/cert.classes.cert.ts b/ts/cert.classes.cert.ts index ecc2970..430c915 100644 --- a/ts/cert.classes.cert.ts +++ b/ts/cert.classes.cert.ts @@ -44,12 +44,20 @@ export class Cert { challengeHandler: this._challengeHandler }) - // setup CertRpo - /* this._certRepo = new CertRepo({ + this._certRepo = new CertRepo({ sslDirPath: optionsArg.sslDirPath, - gitOriginRepo: optionsArg.gitOriginRepo, + remoteGitUrl: optionsArg.gitOriginRepo, certInstance: this - }) */ + }) + } + + /** + * setup the Cert instanceof + * @executes ASYNC + * @return Promise + */ + setup() { + return this._certRepo.setup() } /** diff --git a/ts/cert.classes.certrepo.ts b/ts/cert.classes.certrepo.ts index 5f8f756..bcbfe5f 100644 --- a/ts/cert.classes.certrepo.ts +++ b/ts/cert.classes.certrepo.ts @@ -1,4 +1,5 @@ import * as q from 'q' +import { GitRepo } from 'smartgit' import * as plugins from './cert.plugins' import * as paths from './cert.paths' @@ -8,30 +9,41 @@ import { Certificate } from './cert.classes.certificate' export interface ICertRepoConstructorOptions { sslDirPath: string - gitOriginRepo: string + remoteGitUrl: string certInstance: Cert } export class CertRepo { private _sslDirPath: string - private _gitOriginRepo: string + private _remoteGitUrl: string + private gitRepo: GitRepo private _certInstance: Cert constructor(optionsArg: ICertRepoConstructorOptions) { this._sslDirPath = optionsArg.sslDirPath - this._gitOriginRepo = optionsArg.gitOriginRepo + this._remoteGitUrl = optionsArg.remoteGitUrl this._certInstance = optionsArg.certInstance // setup sslDir - if (!this._sslDirPath){ + if (!this._sslDirPath) { this._sslDirPath = paths.defaultSslDir } + } + /** + * setup the Cert instance + */ + setup() { // setup Git - if (this._gitOriginRepo) { - plugins.smartgit.init(this._sslDirPath) - plugins.smartgit.remote.add(this._sslDirPath, 'origin', this._gitOriginRepo) - this.sslGitOriginPull() + let done = q.defer() + if (this._remoteGitUrl) { + plugins.smartfile.fs.ensureEmptyDirSync(paths.defaultSslDir) + plugins.smartgit.createRepoFromClone(this._remoteGitUrl, paths.defaultSslDir) + .then(gitRepoArg => { + this.gitRepo = gitRepoArg + done.resolve() + }) } + return done.promise } /** @@ -47,8 +59,8 @@ export class CertRepo { * Pulls already requested certificates from git origin */ sslGitOriginPull = () => { - if (this._gitOriginRepo) { - plugins.smartgit.pull(this._sslDirPath, 'origin', 'master') + if (this.gitRepo) { + this.gitRepo.pull('origin', 'master') } } @@ -56,10 +68,10 @@ export class CertRepo { * Pushes all new requested certificates to git origin */ sslGitOriginAddCommitPush = () => { - if (this._gitOriginRepo) { - plugins.smartgit.add.addAll(this._sslDirPath) - plugins.smartgit.commit(this._sslDirPath, 'added new SSL certificates and deleted obsolete ones.') - plugins.smartgit.push(this._sslDirPath, 'origin', 'master') + if (this._remoteGitUrl) { + this.gitRepo.addAll() + this.gitRepo.commit('added new SSL certificates and deleted obsolete ones.') + this.gitRepo.push('origin', 'master') } } } diff --git a/ts/cert.classes.letsencrypt.ts b/ts/cert.classes.letsencrypt.ts index 538002b..3547215 100644 --- a/ts/cert.classes.letsencrypt.ts +++ b/ts/cert.classes.letsencrypt.ts @@ -15,6 +15,21 @@ export interface ILetsencryptConstructorOptions { sslDir: string } +let leStoreConfig = { + configDir: paths.leConfigDir, + privkeyPath: ':configDir/:hostname/privkey.pem', + fullchainPath: ':configDir/:hostname/fullchain.pem', + certPath: ':configDir/:hostname/cert.pem', + chainPath: ':configDir/:hostname/chain.pem', + + workDir: ':configDir/letsencrypt/var/lib', + logsDir: ':configDir/letsencrypt/var/log', + + debug: true +} + +let leStoreInstance = leStore.create(leStoreConfig) + export class Letsencrypt { leEnv: TLeEnv challengeHandler: ChallengeHandler // this is the format we use @@ -43,14 +58,14 @@ export class Letsencrypt { 'dns-01': this._leChallengeHandler() }, challengeType: 'dns-01', - store: leStore.create({ - configDir: paths.leConfigDir, - debug: true - }), + store: leStoreInstance, agreeToTerms: (opts, agreeCb) => { agreeCb(null, opts.tosUrl) }, - debug: true + debug: true, + log: function (debug) { + console.info(arguments) + } }) console.log() } @@ -61,25 +76,33 @@ export class Letsencrypt { registerDomain(domainNameArg: string) { plugins.beautylog.log(`trying to register domain ${domainNameArg}`) let done = q.defer() - console.log('test') - console.log(this._leServerUrl) - this._leInstance.register({ - domains: [domainNameArg], - email: 'office@lossless.com', - agreeTos: true, - rsaKeySize: 2048, - challengeType: 'dns-01' - }).then( - results => { - plugins.beautylog.success(`Got certificates for ${domainNameArg}`) - this._leCopyToDestination(domainNameArg).then(done.resolve) - }, - (err) => { - console.error('[Error]: node-letsencrypt/examples/standalone') - console.error(err.stack) - done.resolve() + plugins.smartfile.fs.ensureDirSync(plugins.path.join(paths.leConfigDir, 'live', domainNameArg)) + this._leInstance.check({ domains: [domainNameArg] }).then((cert) => { + console.log(cert) + let opts = { + domains: [domainNameArg], + email: 'domains@lossless.org', + agreeTos: true, + rsaKeySize: 2048, // 2048 or higher + challengeType: 'dns-01', + duplicate: true } - ).catch(err => { console.log(err) }) + + if (cert) { + if (true) { + return this._leInstance.renew(opts, cert).catch((err) => { + console.log(err) + }) + } else { + return cert + } + } else { + // Register Certificate manually + return this._leInstance.register(opts).catch((err) => { + console.log(err) + }) + } + }) return done.promise } @@ -126,7 +149,7 @@ export class Letsencrypt { cb() }) }, - loopback: (defaults, domain, challenge, done) => { + loopback: (defaults, domain, token, keyAuthorization, done) => { done() }, test: (defaults, domain, challenge, cb) => {