@@ -12,7 +12,7 @@ def initialize(host, username = nil, password = nil, ssl_option = nil)
12
12
@connection = Net ::HTTP . new ( uri . host , uri . port )
13
13
@connection . use_ssl = true
14
14
if ssl_option == "ssl_verify"
15
- @connection . verify_mode = OpenSSL ::SSL ::VERIFY_PEER
15
+ @connection . verify_mode = OpenSSL ::SSL ::VERIFY_PEER
16
16
else
17
17
@connection . verify_mode = OpenSSL ::SSL ::VERIFY_NONE
18
18
end
@@ -27,13 +27,15 @@ def authenticate(username, password)
27
27
:password => password ,
28
28
:json => 1 ,
29
29
}
30
- request = Net ::HTTP ::Post . new ( "/session" )
31
- request . set_form_data ( payload )
32
- resp = @connection . request ( request )
33
- resp = JSON . parse ( resp . body )
30
+ resp = http_post ( :uri => '/session' , :data => payload )
34
31
@token = "token=#{ resp [ 'token' ] } "
35
32
true
36
33
end
34
+
35
+ def x_cookie
36
+ { 'X-Cookie' => @token }
37
+ end
38
+
37
39
alias_method :login , :authenticate
38
40
39
41
def authenticated
@@ -45,11 +47,7 @@ def authenticated
45
47
end
46
48
47
49
def get_server_properties
48
- request = Net ::HTTP ::Get . new ( "/server/properties" )
49
- request . add_field ( "X-Cookie" , @token )
50
- resp = @connection . request ( request )
51
- resp = JSON . parse ( resp . body )
52
- return resp
50
+ http_get ( :uri => '/server/properties' , :fields => x_cookie )
53
51
end
54
52
55
53
def user_add ( username , password , permissions , type )
@@ -60,114 +58,67 @@ def user_add(username, password, permissions, type)
60
58
:type => type ,
61
59
:json => 1 ,
62
60
}
63
- request = Net ::HTTP ::Post . new ( "/users" )
64
- request . set_form_data ( payload )
65
- request . add_field ( "X-Cookie" , @token )
66
- resp = @connection . request ( request )
67
- resp = JSON . parse ( resp . body )
68
- return resp
61
+ http_post ( :uri => '/users' , :fields => x_cookie , :data => payload )
69
62
end
70
63
71
64
def user_delete ( user_id )
72
- request = Net ::HTTP ::Delete . new ( "/users/#{ user_id } " )
73
- request . add_field ( "X-Cookie" , @token )
74
- resp = @connection . request ( request )
75
- return resp . code
65
+ res = http_delete ( :uri => "/users/#{ user_id } " , :fields => x_cookie )
66
+ return res . code
76
67
end
77
68
78
69
def user_chpasswd ( user_id , password )
79
70
payload = {
80
71
:password => password ,
81
72
:json => 1 ,
82
73
}
83
- request = Net ::HTTP ::Put . new ( "/users/#{ user_id } /chpasswd" )
84
- request . set_form_data ( payload )
85
- request . add_field ( "X-Cookie" , @token )
86
- resp = @connection . request ( request )
87
- return resp . code
74
+ res = http_put ( :uri => "/users/#{ user_id } /chpasswd" , :data => payload , :fields => x_cookie )
75
+ return res . code
88
76
end
89
77
90
78
def user_logout
91
- request = Net ::HTTP ::Delete . new ( "/session" )
92
- request . add_field ( "X-Cookie" , @token )
93
- resp = @connection . request ( request )
94
- return resp . code
79
+ res = http_delete ( :uri => '/session' , :fields => x_cookie )
80
+ return res . code
95
81
end
96
82
97
83
def list_policies
98
- request = Net ::HTTP ::Get . new ( "/policies" )
99
- request . add_field ( "X-Cookie" , @token )
100
- resp = @connection . request ( request )
101
- resp = JSON . parse ( resp . body )
102
- return resp
84
+ http_get ( :uri => '/policies' , :fields => x_cookie )
103
85
end
104
86
105
87
def list_users
106
- request = Net ::HTTP ::Get . new ( "/users" )
107
- request . add_field ( "X-Cookie" , @token )
108
- resp = @connection . request ( request )
109
- resp = JSON . parse ( resp . body )
110
- return resp
88
+ http_get ( :uri => '/users' , :fields => x_cookie )
111
89
end
112
90
113
91
def list_folders
114
- request = Net ::HTTP ::Get . new ( "/folders" )
115
- request . add_field ( "X-Cookie" , @token )
116
- resp = @connection . request ( request )
117
- resp = JSON . parse ( resp . body )
118
- return resp
92
+ http_get ( :uri => '/folders' , :fields => x_cookie )
119
93
end
120
94
121
95
def list_scanners
122
- request = Net ::HTTP ::Get . new ( "/scanners" )
123
- request . add_field ( "X-Cookie" , @token )
124
- resp = @connection . request ( request )
125
- resp = JSON . parse ( resp . body )
126
- return resp
96
+ http_get ( :uri => '/scanners' , :fields => x_cookie )
127
97
end
128
98
129
99
def list_families
130
- request = Net ::HTTP ::Get . new ( "/plugins/families" )
131
- request . add_field ( "X-Cookie" , @token )
132
- resp = @connection . request ( request )
133
- resp = JSON . parse ( resp . body )
134
- return resp
100
+ http_get ( :uri => '/plugins/families' , :fields => x_cookie )
135
101
end
136
102
137
103
def list_plugins ( family_id )
138
- request = Net ::HTTP ::Get . new ( "/plugins/families/#{ family_id } " )
139
- request . add_field ( "X-Cookie" , @token )
140
- resp = @connection . request ( request )
141
- resp = JSON . parse ( resp . body )
142
- return resp
104
+ http_get ( :uri => "/plugins/families/#{ family_id } " , :fields => x_cookie )
143
105
end
144
106
145
107
def plugin_details ( plugin_id )
146
- request = Net ::HTTP ::Get . new ( "/plugins/plugin/#{ plugin_id } " )
147
- request . add_field ( "X-Cookie" , @token )
148
- resp = @connection . request ( request )
149
- resp = JSON . parse ( resp . body )
150
- return resp
108
+ http_get ( :uri => "/plugins/plugin/#{ plugin_id } " , :fields => x_cookie )
151
109
end
152
110
153
111
def is_admin
154
- request = Net ::HTTP ::Get . new ( "/session" )
155
- request . add_field ( "X-Cookie" , @token )
156
- resp = @connection . request ( request )
157
- resp = JSON . parse ( resp . body )
158
- if resp [ "permissions" ] == 128
112
+ res = http_get ( :uri => '/session' , :fields => x_cookie )
113
+ if res [ 'permissions' ] == 128
159
114
return true
160
115
else
161
116
return false
162
117
end
163
118
end
164
119
165
120
def server_properties
166
- request = Net ::HTTP ::Get . new ( "/server/properties" )
167
- request . add_field ( "X-Cookie" , @token )
168
- resp = @connection . request ( request )
169
- resp = JSON . parse ( resp . body )
170
- return resp
121
+ http_get ( :uri => '/server/properties' , :fields => x_cookie )
171
122
end
172
123
173
124
def scan_create ( uuid , name , description , targets )
@@ -179,83 +130,43 @@ def scan_create(uuid, name, description, targets)
179
130
:text_targets => targets
180
131
} ,
181
132
:json => 1
182
- }
183
- request = Net ::HTTP ::Post . new ( "/scans" )
184
- request . body = payload . to_json
185
- request . add_field ( "X-Cookie" , @token )
186
- request [ "Content-Type" ] = "application/json"
187
- resp = @connection . request ( request )
188
- resp = JSON . parse ( resp . body )
189
- return resp
133
+ } . to_json
134
+ http_post ( :uri => '/scans' , :body => payload , :fields => x_cookie , :ctype => 'application/json' )
190
135
end
191
136
192
137
def scan_launch ( scan_id )
193
- request = Net ::HTTP ::Post . new ( "/scans/#{ scan_id } /launch" )
194
- request . add_field ( "X-Cookie" , @token )
195
- resp = @connection . request ( request )
196
- resp = JSON . parse ( resp . body )
197
- return resp
138
+ http_post ( :uri => "/scans/#{ scan_id } /launch" , :fields => x_cookie )
198
139
end
199
140
200
141
def server_status
201
- request = Net ::HTTP ::Get . new ( "/server/status" )
202
- request . add_field ( "X-Cookie" , @token )
203
- resp = @connection . request ( request )
204
- resp = JSON . parse ( resp . body )
205
- return resp
142
+ http_get ( :uri => '/server/status' , :fields => x_cookie )
206
143
end
207
144
208
145
def scan_list
209
- request = Net ::HTTP ::Get . new ( "/scans" )
210
- request . add_field ( "X-Cookie" , @token )
211
- resp = @connection . request ( request )
212
- resp = JSON . parse ( resp . body )
213
- return resp
146
+ http_get ( :uri => '/scans' , :fields => x_cookie )
214
147
end
215
148
216
149
def scan_details ( scan_id )
217
- request = Net ::HTTP ::Get . new ( "/scans/#{ scan_id } " )
218
- request . add_field ( "X-Cookie" , @token )
219
- resp = @connection . request ( request )
220
- resp = JSON . parse ( resp . body )
221
- return resp
150
+ http_get ( :uri => "/scans/#{ scan_id } " , :fields => x_cookie )
222
151
end
223
152
224
153
def scan_pause ( scan_id )
225
- request = Net ::HTTP ::Post . new ( "/scans/#{ scan_id } /pause" )
226
- request . add_field ( "X-Cookie" , @token )
227
- resp = @connection . request ( request )
228
- resp = JSON . parse ( resp . body )
229
- return resp
154
+ http_get ( :uri => "/scans/#{ scan_id } /pause" , :fields => x_cookie )
230
155
end
231
156
232
157
def scan_resume ( scan_id )
233
- request = Net ::HTTP ::Post . new ( "/scans/#{ scan_id } /resume" )
234
- request . add_field ( "X-Cookie" , @token )
235
- resp = @connection . request ( request )
236
- resp = JSON . parse ( resp . body )
237
- return resp
158
+ http_post ( :uri => "/scans/#{ scan_id } /resume" , :fields => x_cookie )
238
159
end
239
160
240
161
def scan_stop ( scan_id )
241
- request = Net ::HTTP ::Post . new ( "/scans/#{ scan_id } /stop" )
242
- request . add_field ( "X-Cookie" , @token )
243
- resp = @connection . request ( request )
244
- resp = JSON . parse ( resp . body )
245
- return resp
162
+ http_post ( :uri => "/scans/#{ scan_id } /stop" , :fields => x_cookie )
246
163
end
247
164
248
165
def scan_export ( scan_id , format )
249
166
payload = {
250
167
:format => format
251
- }
252
- request = Net ::HTTP ::Post . new ( "/scans/#{ scan_id } /export" )
253
- request . body = payload . to_json
254
- request [ "Content-Type" ] = "application/json"
255
- request . add_field ( "X-Cookie" , @token )
256
- resp = @connection . request ( request )
257
- resp = JSON . parse ( resp . body )
258
- return resp
168
+ } . to_json
169
+ http_post ( :uri => "/scans/#{ scan_id } /export" , :body => payload , :ctype => 'application/json' , :fields => x_cookie )
259
170
end
260
171
261
172
def scan_export_status ( scan_id , file_id )
@@ -271,10 +182,8 @@ def scan_export_status(scan_id, file_id)
271
182
end
272
183
273
184
def policy_delete ( policy_id )
274
- request = Net ::HTTP ::Delete . new ( "/policies/#{ policy_id } " )
275
- request . add_field ( "X-Cookie" , @token )
276
- resp = @connection . request ( request )
277
- return resp . code
185
+ res = http_delete ( :uri => "/policies/#{ policy_id } " , :fields => x_cookie )
186
+ return res . code
278
187
end
279
188
280
189
def report_list_hash
@@ -309,5 +218,103 @@ def report_host_port_details
309
218
raise NotImplementedError
310
219
end
311
220
221
+ private
222
+
223
+ def http_put ( opts = { } )
224
+ uri = opts [ :uri ]
225
+ data = opts [ :data ]
226
+ fields = opts [ :fields ] || { }
227
+ res = nil
228
+
229
+ req = Net ::HTTP ::Put . new ( uri )
230
+ req . set_form_data ( data ) unless data . blank?
231
+ fields . each_pair do |name , value |
232
+ req . add_field ( name , value )
233
+ end
234
+
235
+ begin
236
+ res = @connection . request ( req )
237
+ rescue URI ::InvalidURIError
238
+ return res
239
+ end
240
+
241
+ res
242
+ end
243
+
244
+ def http_delete ( opts = { } )
245
+ uri = opts [ :uri ]
246
+ fields = opts [ :fields ] || { }
247
+ res = nil
248
+
249
+ req = Net ::HTTP ::Delete . new ( uri )
250
+
251
+ fields . each_pair do |name , value |
252
+ req . add_field ( name , value )
253
+ end
254
+
255
+ begin
256
+ res = @connection . request ( req )
257
+ rescue URI ::InvalidURIError
258
+ return res
259
+ end
260
+
261
+ res
262
+ end
263
+
264
+ def http_get ( opts = { } )
265
+ uri = opts [ :uri ]
266
+ fields = opts [ :fields ] || { }
267
+ json = { }
268
+
269
+ req = Net ::HTTP ::Get . new ( uri )
270
+ fields . each_pair do |name , value |
271
+ req . add_field ( name , value )
272
+ end
273
+
274
+ begin
275
+ res = @connection . request ( req )
276
+ rescue URI ::InvalidURIError
277
+ return json
278
+ end
279
+
280
+ parse_json ( res . body )
281
+ end
282
+
283
+ def http_post ( opts = { } )
284
+ uri = opts [ :uri ]
285
+ data = opts [ :data ]
286
+ fields = opts [ :fields ] || { }
287
+ body = opts [ :body ]
288
+ ctype = opts [ :ctype ]
289
+ json = { }
290
+
291
+ req = Net ::HTTP ::Post . new ( uri )
292
+ req . set_form_data ( data ) unless data . blank?
293
+ req . body = body unless body . blank?
294
+ req [ 'Content-Type' ] = ctype unless ctype . blank?
295
+ fields . each_pair do |name , value |
296
+ req . add_field ( name , value )
297
+ end
298
+
299
+ begin
300
+ res = @connection . request ( req )
301
+ rescue URI ::InvalidURIError
302
+ return json
303
+ end
304
+
305
+ parse_json ( res . body )
306
+ end
307
+
308
+ def parse_json ( body )
309
+ buf = { }
310
+
311
+ begin
312
+ buf = JSON . parse ( body )
313
+ rescue JSON ::ParserError
314
+ end
315
+
316
+ buf
317
+ end
318
+
312
319
end
313
320
end
0 commit comments