@@ -30,6 +30,7 @@ const internalCertificate = {
30
30
intervalTimeout : 1000 * 60 * 60 , // 1 hour
31
31
interval : null ,
32
32
intervalProcessing : false ,
33
+ renewBeforeExpirationBy : [ 7 , 'days' ] ,
33
34
34
35
initTimer : ( ) => {
35
36
logger . info ( 'Let\'s Encrypt Renewal Timer initialized' ) ;
@@ -46,58 +47,41 @@ const internalCertificate = {
46
47
internalCertificate . intervalProcessing = true ;
47
48
logger . info ( 'Renewing SSL certs close to expiry...' ) ;
48
49
49
- const cmd = certbotCommand + ' renew --non-interactive --quiet ' +
50
- '--config "' + letsencryptConfig + '" ' +
51
- '--work-dir "/tmp/letsencrypt-lib" ' +
52
- '--logs-dir "/tmp/letsencrypt-log" ' +
53
- '--preferred-challenges "dns,http" ' +
54
- '--disable-hook-validation ' +
55
- ( letsencryptStaging ? '--staging' : '' ) ;
56
-
57
- return utils . exec ( cmd )
58
- . then ( ( result ) => {
59
- if ( result ) {
60
- logger . info ( 'Renew Result: ' + result ) ;
50
+ const expirationThreshold = moment ( ) . add ( internalCertificate . renewBeforeExpirationBy [ 0 ] , internalCertificate . renewBeforeExpirationBy [ 1 ] ) . format ( 'YYYY-MM-DD HH:mm:ss' ) ;
51
+
52
+ // Fetch all the letsencrypt certs from the db that will expire within 7 days
53
+ certificateModel
54
+ . query ( )
55
+ . where ( 'is_deleted' , 0 )
56
+ . andWhere ( 'provider' , 'letsencrypt' )
57
+ . andWhere ( 'expires_on' , '<' , expirationThreshold )
58
+ . then ( ( certificates ) => {
59
+ if ( ! certificates || ! certificates . length ) {
60
+ return null ;
61
61
}
62
62
63
- return internalNginx . reload ( )
64
- . then ( ( ) => {
65
- logger . info ( 'Renew Complete' ) ;
66
- return result ;
67
- } ) ;
68
- } )
69
- . then ( ( ) => {
70
- // Now go and fetch all the letsencrypt certs from the db and query the files and update expiry times
71
- return certificateModel
72
- . query ( )
73
- . where ( 'is_deleted' , 0 )
74
- . andWhere ( 'provider' , 'letsencrypt' )
75
- . then ( ( certificates ) => {
76
- if ( certificates && certificates . length ) {
77
- let promises = [ ] ;
78
-
79
- certificates . map ( function ( certificate ) {
80
- promises . push (
81
- internalCertificate . getCertificateInfoFromFile ( '/etc/letsencrypt/live/npm-' + certificate . id + '/fullchain.pem' )
82
- . then ( ( cert_info ) => {
83
- return certificateModel
84
- . query ( )
85
- . where ( 'id' , certificate . id )
86
- . andWhere ( 'provider' , 'letsencrypt' )
87
- . patch ( {
88
- expires_on : moment ( cert_info . dates . to , 'X' ) . format ( 'YYYY-MM-DD HH:mm:ss' )
89
- } ) ;
90
- } )
91
- . catch ( ( err ) => {
92
- // Don't want to stop the train here, just log the error
93
- logger . error ( err . message ) ;
94
- } )
95
- ) ;
96
- } ) ;
63
+ let promises = [ ] ;
64
+
65
+ certificates . forEach ( function ( certificate ) {
66
+ const promise = internalCertificate
67
+ . renew (
68
+ {
69
+ can : ( ) =>
70
+ Promise . resolve ( {
71
+ permission_visibility : 'all' ,
72
+ } ) ,
73
+ } ,
74
+ { id : certificate . id } ,
75
+ )
76
+ . catch ( ( err ) => {
77
+ // Don't want to stop the train here, just log the error
78
+ logger . error ( err . message ) ;
79
+ } ) ;
97
80
98
- return Promise . all ( promises ) ;
99
- }
100
- } ) ;
81
+ promises . push ( promise ) ;
82
+ } ) ;
83
+
84
+ return Promise . all ( promises ) ;
101
85
} )
102
86
. then ( ( ) => {
103
87
internalCertificate . intervalProcessing = false ;
0 commit comments