@@ -4,8 +4,12 @@ const utils = require('../lib/utils');
4
4
const proxyHostModel = require ( '../models/proxy_host' ) ;
5
5
const internalHost = require ( './host' ) ;
6
6
const internalNginx = require ( './nginx' ) ;
7
+ const internalNginxOpenappsec = require ( './nginx-openappsec' ) ;
7
8
const internalAuditLog = require ( './audit-log' ) ;
8
9
const internalCertificate = require ( './certificate' ) ;
10
+ const fs = require ( 'fs' ) ;
11
+ const path = require ( 'path' ) ;
12
+ const yaml = require ( 'js-yaml' ) ;
9
13
10
14
function omissions ( ) {
11
15
return [ 'is_deleted' ] ;
@@ -48,9 +52,15 @@ const internalProxyHost = {
48
52
data . owner_user_id = access . token . getUserId ( 1 ) ;
49
53
data = internalHost . cleanSslHstsData ( data ) ;
50
54
55
+ let db_data = _ . assign ( { } , data ) ;
56
+ // Remove the openappsec fields from data. they are not in the database.
57
+ delete db_data . use_openappsec ;
58
+ delete db_data . openappsec_mode ;
59
+ delete db_data . minimum_confidence ;
60
+
51
61
return proxyHostModel
52
62
. query ( )
53
- . insertAndFetch ( data )
63
+ . insertAndFetch ( db_data )
54
64
. then ( utils . omitRow ( omissions ( ) ) ) ;
55
65
} )
56
66
. then ( ( row ) => {
@@ -84,6 +94,10 @@ const internalProxyHost = {
84
94
return row ;
85
95
} ) ;
86
96
} )
97
+ . then ( row => {
98
+ internalNginxOpenappsec . generateConfig ( access , row , data )
99
+ return row ;
100
+ } )
87
101
. then ( ( row ) => {
88
102
// Audit log
89
103
data . meta = _ . assign ( { } , data . meta || { } , row . meta ) ;
@@ -159,6 +173,11 @@ const internalProxyHost = {
159
173
return row ;
160
174
}
161
175
} )
176
+ . then ( row => {
177
+ internalNginxOpenappsec . generateConfig ( access , row , data ) ;
178
+ // internalNginxOpenappsec.updateConfig(row, data)
179
+ return row ;
180
+ } )
162
181
. then ( ( row ) => {
163
182
// Add domain_names to the data in case it isn't there, so that the audit log renders correctly. The order is important here.
164
183
data = _ . assign ( { } , {
@@ -167,6 +186,11 @@ const internalProxyHost = {
167
186
168
187
data = internalHost . cleanSslHstsData ( data , row ) ;
169
188
189
+ // Remove the openappsec fields from data. they are not in the database
190
+ delete data . use_openappsec ;
191
+ delete data . openappsec_mode ;
192
+ delete data . minimum_confidence ;
193
+
170
194
return proxyHostModel
171
195
. query ( )
172
196
. where ( { id : data . id } )
@@ -247,6 +271,22 @@ const internalProxyHost = {
247
271
if ( typeof data . omit !== 'undefined' && data . omit !== null ) {
248
272
row = _ . omit ( row , data . omit ) ;
249
273
}
274
+ return row ;
275
+ } )
276
+ . then ( ( row ) => {
277
+ // add openappsec fields to row
278
+ try {
279
+ const configFilePath = internalNginxOpenappsec . getConfigFilePath ( access ) ;
280
+ const openappsecConfig = yaml . load ( fs . readFileSync ( configFilePath , 'utf8' ) ) ;
281
+ let result = internalNginxOpenappsec . getOpenappsecFields ( openappsecConfig , row . id ) ;
282
+ row . use_openappsec = result . use_openappsec ;
283
+ row . openappsec_mode = result . mode ;
284
+ row . minimum_confidence = result . minimum_confidence ;
285
+ }
286
+ catch ( e ) {
287
+ console . log ( "Error reading openappsec config file: " + e ) ;
288
+ }
289
+
250
290
return row ;
251
291
} ) ;
252
292
} ,
@@ -274,6 +314,10 @@ const internalProxyHost = {
274
314
. patch ( {
275
315
is_deleted : 1
276
316
} )
317
+ . then ( ( ) => {
318
+ // Delete openappsec config
319
+ internalNginxOpenappsec . deleteConfig ( access , row ) ;
320
+ } )
277
321
. then ( ( ) => {
278
322
// Delete Nginx Config
279
323
return internalNginx . deleteConfig ( 'proxy_host' , row )
@@ -430,6 +474,21 @@ const internalProxyHost = {
430
474
return query . then ( utils . omitRows ( omissions ( ) ) ) ;
431
475
} )
432
476
. then ( ( rows ) => {
477
+ // add openappsec fields to rows
478
+ try {
479
+ const configFilePath = internalNginxOpenappsec . getConfigFilePath ( access ) ;
480
+ const openappsecConfig = yaml . load ( fs . readFileSync ( configFilePath , 'utf8' ) ) ;
481
+ rows . map ( function ( row , idx ) {
482
+ let result = internalNginxOpenappsec . getOpenappsecFields ( openappsecConfig , row . id ) ;
483
+ rows [ idx ] . use_openappsec = result . use_openappsec ;
484
+ rows [ idx ] . openappsec_mode = result . mode ;
485
+ rows [ idx ] . minimum_confidence = result . minimum_confidence ;
486
+ } ) ;
487
+ }
488
+ catch ( e ) {
489
+ console . log ( "Error reading openappsec config file: " + e ) ;
490
+ }
491
+
433
492
if ( typeof expand !== 'undefined' && expand !== null && expand . indexOf ( 'certificate' ) !== - 1 ) {
434
493
return internalHost . cleanAllRowsCertificateMeta ( rows ) ;
435
494
}
0 commit comments