1
1
'use strict' ;
2
2
3
- const _ = require ( 'lodash' ) ;
4
- const error = require ( '../lib/error' ) ;
5
- const deadHostModel = require ( '../models/dead_host' ) ;
6
- const internalHost = require ( './host' ) ;
7
- const internalNginx = require ( './nginx' ) ;
8
- const internalAuditLog = require ( './audit-log' ) ;
3
+ const _ = require ( 'lodash' ) ;
4
+ const error = require ( '../lib/error' ) ;
5
+ const deadHostModel = require ( '../models/dead_host' ) ;
6
+ const internalHost = require ( './host' ) ;
7
+ const internalNginx = require ( './nginx' ) ;
8
+ const internalAuditLog = require ( './audit-log' ) ;
9
+ const internalCertificate = require ( './certificate' ) ;
9
10
10
11
function omissions ( ) {
11
12
return [ 'is_deleted' ] ;
@@ -19,6 +20,12 @@ const internalDeadHost = {
19
20
* @returns {Promise }
20
21
*/
21
22
create : ( access , data ) => {
23
+ let create_certificate = data . certificate_id === 'new' ;
24
+
25
+ if ( create_certificate ) {
26
+ delete data . certificate_id ;
27
+ }
28
+
22
29
return access . can ( 'dead_hosts:create' , data )
23
30
. then ( access_data => {
24
31
// Get a list of the ___domain names and check each of them against existing records
@@ -46,14 +53,40 @@ const internalDeadHost = {
46
53
. omit ( omissions ( ) )
47
54
. insertAndFetch ( data ) ;
48
55
} )
56
+ . then ( row => {
57
+ if ( create_certificate ) {
58
+ return internalCertificate . createQuickCertificate ( access , data )
59
+ . then ( cert => {
60
+ // update host with cert id
61
+ return internalDeadHost . update ( access , {
62
+ id : row . id ,
63
+ certificate_id : cert . id
64
+ } ) ;
65
+ } )
66
+ . then ( ( ) => {
67
+ return row ;
68
+ } ) ;
69
+ } else {
70
+ return row ;
71
+ }
72
+ } )
73
+ . then ( row => {
74
+ // re-fetch with cert
75
+ return internalDeadHost . get ( access , {
76
+ id : row . id ,
77
+ expand : [ 'certificate' , 'owner' ]
78
+ } ) ;
79
+ } )
49
80
. then ( row => {
50
81
// Configure nginx
51
82
return internalNginx . configure ( deadHostModel , 'dead_host' , row )
52
83
. then ( ( ) => {
53
- return internalDeadHost . get ( access , { id : row . id , expand : [ 'owner' ] } ) ;
84
+ return row ;
54
85
} ) ;
55
86
} )
56
87
. then ( row => {
88
+ data . meta = _ . assign ( { } , data . meta || { } , row . meta ) ;
89
+
57
90
// Add to audit log
58
91
return internalAuditLog . add ( access , {
59
92
action : 'created' ,
@@ -71,11 +104,15 @@ const internalDeadHost = {
71
104
* @param {Access } access
72
105
* @param {Object } data
73
106
* @param {Integer } data.id
74
- * @param {String } [data.email]
75
- * @param {String } [data.name]
76
107
* @return {Promise }
77
108
*/
78
109
update : ( access , data ) => {
110
+ let create_certificate = data . certificate_id === 'new' ;
111
+
112
+ if ( create_certificate ) {
113
+ delete data . certificate_id ;
114
+ }
115
+
79
116
return access . can ( 'dead_hosts:update' , data . id )
80
117
. then ( access_data => {
81
118
// Get a list of the ___domain names and check each of them against existing records
@@ -105,13 +142,33 @@ const internalDeadHost = {
105
142
throw new error . InternalValidationError ( '404 Host could not be updated, IDs do not match: ' + row . id + ' !== ' + data . id ) ;
106
143
}
107
144
145
+ if ( create_certificate ) {
146
+ return internalCertificate . createQuickCertificate ( access , {
147
+ domain_names : data . domain_names || row . domain_names ,
148
+ meta : _ . assign ( { } , row . meta , data . meta )
149
+ } )
150
+ . then ( cert => {
151
+ // update host with cert id
152
+ data . certificate_id = cert . id ;
153
+ } )
154
+ . then ( ( ) => {
155
+ return row ;
156
+ } ) ;
157
+ } else {
158
+ return row ;
159
+ }
160
+ } )
161
+ . then ( row => {
162
+ // Add domain_names to the data in case it isn't there, so that the audit log renders correctly. The order is important here.
163
+ data = _ . assign ( { } , {
164
+ domain_names : row . domain_names
165
+ } , data ) ;
166
+
108
167
return deadHostModel
109
168
. query ( )
110
- . omit ( omissions ( ) )
111
- . patchAndFetchById ( row . id , data )
169
+ . where ( { id : data . id } )
170
+ . patch ( data )
112
171
. then ( saved_row => {
113
- saved_row . meta = internalHost . cleanMeta ( saved_row . meta ) ;
114
-
115
172
// Add to audit log
116
173
return internalAuditLog . add ( access , {
117
174
action : 'updated' ,
@@ -123,6 +180,19 @@ const internalDeadHost = {
123
180
return _ . omit ( saved_row , omissions ( ) ) ;
124
181
} ) ;
125
182
} ) ;
183
+ } )
184
+ . then ( ( ) => {
185
+ return internalDeadHost . get ( access , {
186
+ id : data . id ,
187
+ expand : [ 'owner' , 'certificate' ]
188
+ } )
189
+ . then ( row => {
190
+ // Configure nginx
191
+ return internalNginx . configure ( deadHostModel , 'dead_host' , row )
192
+ . then ( ( ) => {
193
+ return _ . omit ( row , omissions ( ) ) ;
194
+ } ) ;
195
+ } ) ;
126
196
} ) ;
127
197
} ,
128
198
@@ -165,7 +235,6 @@ const internalDeadHost = {
165
235
} )
166
236
. then ( row => {
167
237
if ( row ) {
168
- row . meta = internalHost . cleanMeta ( row . meta ) ;
169
238
return _ . omit ( row , omissions ( ) ) ;
170
239
} else {
171
240
throw new error . ItemNotFoundError ( data . id ) ;
@@ -205,8 +274,6 @@ const internalDeadHost = {
205
274
} )
206
275
. then ( ( ) => {
207
276
// Add to audit log
208
- row . meta = internalHost . cleanMeta ( row . meta ) ;
209
-
210
277
return internalAuditLog . add ( access , {
211
278
action : 'deleted' ,
212
279
object_type : 'dead-host' ,
@@ -220,40 +287,6 @@ const internalDeadHost = {
220
287
} ) ;
221
288
} ,
222
289
223
- /**
224
- * @param {Access } access
225
- * @param {Object } data
226
- * @param {Integer } data.id
227
- * @param {Object } data.files
228
- * @returns {Promise }
229
- */
230
- setCerts : ( access , data ) => {
231
- return internalDeadHost . get ( access , { id : data . id } )
232
- . then ( row => {
233
- _ . map ( data . files , ( file , name ) => {
234
- if ( internalHost . allowed_ssl_files . indexOf ( name ) !== - 1 ) {
235
- row . meta [ name ] = file . data . toString ( ) ;
236
- }
237
- } ) ;
238
-
239
- return internalDeadHost . update ( access , {
240
- id : data . id ,
241
- meta : row . meta
242
- } ) ;
243
- } )
244
- . then ( row => {
245
- return internalAuditLog . add ( access , {
246
- action : 'updated' ,
247
- object_type : 'dead-host' ,
248
- object_id : row . id ,
249
- meta : data
250
- } )
251
- . then ( ( ) => {
252
- return _ . pick ( row . meta , internalHost . allowed_ssl_files ) ;
253
- } ) ;
254
- } ) ;
255
- } ,
256
-
257
290
/**
258
291
* All Hosts
259
292
*
@@ -289,13 +322,6 @@ const internalDeadHost = {
289
322
}
290
323
291
324
return query ;
292
- } )
293
- . then ( rows => {
294
- rows . map ( row => {
295
- row . meta = internalHost . cleanMeta ( row . meta ) ;
296
- } ) ;
297
-
298
- return rows ;
299
325
} ) ;
300
326
} ,
301
327
0 commit comments