1- 'use strict' ;
2-
31const fs = require ( 'fs' ) ;
42const _ = require ( 'lodash' ) ;
53const logger = require ( '../logger' ) . ssl ;
@@ -9,7 +7,7 @@ const internalAuditLog = require('./audit-log');
97const tempWrite = require ( 'temp-write' ) ;
108const utils = require ( '../lib/utils' ) ;
119const moment = require ( 'moment' ) ;
12- const debug_mode = process . env . NODE_ENV !== 'production' ;
10+ const debug_mode = process . env . NODE_ENV !== 'production' || ! ! process . env . DEBUG ;
1311const internalNginx = require ( './nginx' ) ;
1412const internalHost = require ( './host' ) ;
1513const certbot_command = '/usr/bin/certbot' ;
@@ -21,7 +19,7 @@ function omissions () {
2119const internalCertificate = {
2220
2321 allowed_ssl_files : [ 'certificate' , 'certificate_key' , 'intermediate_certificate' ] ,
24- interval_timeout : 1000 * 60 * 60 * 12 , // 12 hours
22+ interval_timeout : 1000 * 60 * 60 , // 1 hour
2523 interval : null ,
2624 interval_processing : false ,
2725
@@ -205,7 +203,7 @@ const internalCertificate = {
205203 /**
206204 * @param {Access } access
207205 * @param {Object } data
208- * @param {Integer } data.id
206+ * @param {Number } data.id
209207 * @param {String } [data.email]
210208 * @param {String } [data.name]
211209 * @return {Promise }
@@ -251,7 +249,7 @@ const internalCertificate = {
251249 /**
252250 * @param {Access } access
253251 * @param {Object } data
254- * @param {Integer } data.id
252+ * @param {Number } data.id
255253 * @param {Array } [data.expand]
256254 * @param {Array } [data.omit]
257255 * @return {Promise }
@@ -297,7 +295,7 @@ const internalCertificate = {
297295 /**
298296 * @param {Access } access
299297 * @param {Object } data
300- * @param {Integer } data.id
298+ * @param {Number } data.id
301299 * @param {String } [data.reason]
302300 * @returns {Promise }
303301 */
@@ -381,7 +379,7 @@ const internalCertificate = {
381379 /**
382380 * Report use
383381 *
384- * @param {Integer } user_id
382+ * @param {Number } user_id
385383 * @param {String } visibility
386384 * @returns {Promise }
387385 */
@@ -522,7 +520,7 @@ const internalCertificate = {
522520 /**
523521 * @param {Access } access
524522 * @param {Object } data
525- * @param {Integer } data.id
523+ * @param {Number } data.id
526524 * @param {Object } data.files
527525 * @returns {Promise }
528526 */
@@ -734,6 +732,36 @@ const internalCertificate = {
734732 } ) ;
735733 } ,
736734
735+ /**
736+ * @param {Access } access
737+ * @param {Object } data
738+ * @param {Number } data.id
739+ * @returns {Promise }
740+ */
741+ renew : ( access , data ) => {
742+ return access . can ( 'certificates:update' , data )
743+ . then ( ( ) => {
744+ return internalCertificate . get ( access , data ) ;
745+ } )
746+ . then ( ( certificate ) => {
747+ if ( certificate . provider === 'letsencrypt' ) {
748+ return internalCertificate . renewLetsEncryptSsl ( certificate )
749+ . then ( ( ) => {
750+ return internalCertificate . getCertificateInfoFromFile ( '/etc/letsencrypt/live/npm-' + certificate . id + '/fullchain.pem' )
751+ } )
752+ . then ( cert_info => {
753+ return certificateModel
754+ . query ( )
755+ . patchAndFetchById ( certificate . id , {
756+ expires_on : certificateModel . raw ( 'FROM_UNIXTIME(' + cert_info . dates . to + ')' )
757+ } ) ;
758+ } ) ;
759+ } else {
760+ throw new error . ValidationError ( 'Only Let\'sEncrypt certificates can be renewed' ) ;
761+ }
762+ } )
763+ } ,
764+
737765 /**
738766 * @param {Object } certificate the certificate row
739767 * @returns {Promise }
@@ -762,17 +790,29 @@ const internalCertificate = {
762790 revokeLetsEncryptSsl : ( certificate , throw_errors ) => {
763791 logger . info ( 'Revoking Let\'sEncrypt certificates for Cert #' + certificate . id + ': ' + certificate . domain_names . join ( ', ' ) ) ;
764792
765- let cmd = certbot_command + ' revoke --cert-path "/etc/letsencrypt/live/npm-' + certificate . id + '/fullchain.pem" ' + ( debug_mode ? '--staging' : '' ) ;
793+ let revoke_cmd = certbot_command + ' revoke --cert-path "/etc/letsencrypt/live/npm-' + certificate . id + '/fullchain.pem" ' + ( debug_mode ? '--staging' : '' ) ;
794+ let delete_cmd = certbot_command + ' delete --cert-name "npm-' + certificate . id + '" ' + ( debug_mode ? '--staging' : '' ) ;
766795
767796 if ( debug_mode ) {
768- logger . info ( 'Command:' , cmd ) ;
797+ logger . info ( 'Command:' , revoke_cmd ) ;
769798 }
770799
771- return utils . exec ( cmd )
772- . then ( result => {
800+ return utils . exec ( revoke_cmd )
801+ . then ( ( result ) => {
773802 logger . info ( result ) ;
774803 return result ;
775804 } )
805+ . then ( ( ) => {
806+ if ( debug_mode ) {
807+ logger . info ( 'Command:' , delete_cmd ) ;
808+ }
809+
810+ return utils . exec ( delete_cmd )
811+ . then ( ( result ) => {
812+ logger . info ( result ) ;
813+ return result ;
814+ } )
815+ } )
776816 . catch ( err => {
777817 if ( debug_mode ) {
778818 logger . error ( err . message ) ;
@@ -796,7 +836,7 @@ const internalCertificate = {
796836
797837 /**
798838 * @param {Object } in_use_result
799- * @param {Integer } in_use_result.total_count
839+ * @param {Number } in_use_result.total_count
800840 * @param {Array } in_use_result.proxy_hosts
801841 * @param {Array } in_use_result.redirection_hosts
802842 * @param {Array } in_use_result.dead_hosts
@@ -826,7 +866,7 @@ const internalCertificate = {
826866
827867 /**
828868 * @param {Object } in_use_result
829- * @param {Integer } in_use_result.total_count
869+ * @param {Number } in_use_result.total_count
830870 * @param {Array } in_use_result.proxy_hosts
831871 * @param {Array } in_use_result.redirection_hosts
832872 * @param {Array } in_use_result.dead_hosts
0 commit comments