enfcli 3.3.4 → 3.4.0.pre.alpha

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8a10444bb93e50613f8abf51af8bdd29a8826cda137584d3d15739f403eb9e79
4
- data.tar.gz: 694813e216f1598a2b1f51103cd945454f8a5ac36646f590b3924842ab42f52b
3
+ metadata.gz: ed23993cf8999c35cb290c1c5a694cb4b4ccdd2c4b9d55094c1ba80994eadc0c
4
+ data.tar.gz: 1ee8c5491dcab964f307832b18cff6def37feb6e04b528a3e0829b7572ad69a6
5
5
  SHA512:
6
- metadata.gz: c6df9b291970f011c428d5136181743eb9de937977ebd79ea486aefd9cc31d9983bb84cc73f713fc091c59795ac1eb31f0b266e8a67ab946ecd1f421a6528057
7
- data.tar.gz: f613ae6586e86e0125e28a6644be92b5bb61b634f0fb8e55a10942b2f13847f3ff1e0d07ddf77751e3b5192011495db120a6d2e7f738cd5166389c8cd94a9145
6
+ metadata.gz: 7c3dd1750b398ae9b37b7161bf8839df7f788a1c383e706b9087a0330b9fc3f8d0c606c93cf558470a8035e4f35a5c7e007aecb4b739baca146950900c438cf8
7
+ data.tar.gz: 78a255e25b8048bc813cc9a026ce051857d483ff0779352f7b2b81c6e0e3d9427678630b26fe3b9c350a99b5e1d39670f39711fd05289ce68c5fe0fa8c0ebf04
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- enfcli (3.3.4)
4
+ enfcli (3.4.0.pre.alpha)
5
5
  rest-client (~> 2.0)
6
6
  terminal-table
7
7
  thor (~> 0.20.0)
@@ -55,8 +55,8 @@ GEM
55
55
  thor (0.20.3)
56
56
  unf (0.1.4)
57
57
  unf_ext
58
- unf_ext (0.0.7.5)
59
- unicode-display_width (1.5.0)
58
+ unf_ext (0.0.7.6)
59
+ unicode-display_width (1.6.0)
60
60
  vcr (4.0.0)
61
61
  webmock (3.4.2)
62
62
  addressable (>= 2.3.6)
data/lib/enfapi.rb CHANGED
@@ -18,6 +18,7 @@ require 'singleton'
18
18
  require 'json'
19
19
  require 'date'
20
20
  require 'base64'
21
+ require 'cgi'
21
22
 
22
23
  #
23
24
  # NOTE: When api's are refactored into individual classes
@@ -30,25 +31,109 @@ module EnfApi
30
31
  def self.to_json(hash)
31
32
  JSON.generate(hash)
32
33
  end
33
-
34
+
35
+ def self.url_encode(str)
36
+ CGI.escape( str ).gsub("+", "%20")
37
+ end
38
+
34
39
  class ERROR < StandardError
35
40
  def initialize(msg = "ENF Api Error")
36
41
  super
37
42
  end
38
43
  end
39
44
 
45
+ class Dns
46
+ include Singleton
47
+
48
+ def initialize
49
+ @version = "2019-05-27"
50
+ @xdns_base_url = "/api/xdns/#{@version}"
51
+ end
52
+
53
+ def list_zones(domain)
54
+ EnfApi::API.instance.get "#{@xdns_base_url}/zones?enf_domain=#{domain}"
55
+ end
56
+
57
+ def create_dns_zone(new_zone)
58
+ json = EnfApi::to_json(new_zone)
59
+ EnfApi::API.instance.post "#{@xdns_base_url}/zones", json
60
+ end
61
+
62
+ def update_dns_zone(zone_id, updated_zone)
63
+ json = EnfApi::to_json(updated_zone)
64
+ EnfApi::API.instance.put "#{@xdns_base_url}/zones/#{zone_id}", json
65
+ end
66
+
67
+ def delete_dns_zone(zone_id)
68
+ EnfApi::API.instance.delete "#{@xdns_base_url}/zones/#{zone_id}"
69
+ end
70
+
71
+ def add_networks_to_zone(zone_id, add_networks)
72
+ json = EnfApi::to_json(add_networks)
73
+ EnfApi::API.instance.post "#{@xdns_base_url}/zones/#{zone_id}/networks", json
74
+ end
75
+
76
+ def replace_networks_in_zone(zone_id, replace_networks)
77
+ json = EnfApi::to_json(replace_networks)
78
+ EnfApi::API.instance.put "#{@xdns_base_url}/zones/#{zone_id}/networks", json
79
+ end
80
+
81
+ def list_networks_in_zone(zone_id)
82
+ EnfApi::API.instance.get "#{@xdns_base_url}/zones/#{zone_id}/networks"
83
+ end
84
+
85
+ def delete_networks_from_zone(zone_id, delete_networks)
86
+ EnfApi::API.instance.delete "#{@xdns_base_url}/zones/#{zone_id}/networks?delete=#{delete_networks}"
87
+ end
88
+
89
+ def list_zones_in_network(network)
90
+ EnfApi::API.instance.get "#{@xdns_base_url}/networks/#{network}/zones"
91
+ end
92
+
93
+ def provision_server(network, new_server)
94
+ json = EnfApi::to_json(new_server)
95
+ EnfApi::API.instance.post "#{@xdns_base_url}/networks/#{network}/servers", json
96
+ end
97
+
98
+ def list_servers(network)
99
+ EnfApi::API.instance.get "#{@xdns_base_url}/networks/#{network}/servers"
100
+ end
101
+
102
+ def delete_server(network, server_ipv6)
103
+ EnfApi::API.instance.delete "#{@xdns_base_url}/networks/#{network}/servers/#{server_ipv6}"
104
+ end
105
+
106
+ def create_dns_record(zone_id, new_record)
107
+ json = EnfApi::to_json(new_record)
108
+ EnfApi::API.instance.post "#{@xdns_base_url}/zones/#{zone_id}/records", json
109
+ end
110
+
111
+ def list_dns_records(zone_id)
112
+ EnfApi::API.instance.get "#{@xdns_base_url}/zones/#{zone_id}/records"
113
+ end
114
+
115
+ def query(network, type, name)
116
+ EnfApi::API.instance.get "#{@xdns_base_url}/networks/#{network}/query/#{type}/#{name}"
117
+ end
118
+
119
+ def delete_dns_record(record_id)
120
+ EnfApi::API.instance.delete "#{@xdns_base_url}/records/#{record_id}"
121
+ end
122
+
123
+ end
124
+
40
125
  class Firewall
41
126
  include Singleton
42
-
127
+
43
128
  def list_firewall_rules(network)
44
129
  EnfApi::API.instance.get "/api/xfw/v1/#{network}/rule"
45
130
  end
46
-
47
- def add_firewall_rule(network, rule)
131
+
132
+ def add_firewall_rule(network, rule)
48
133
  rule_json = EnfApi::to_json(rule)
49
134
  EnfApi::API.instance.post "/api/xfw/v1/#{network}/rule", rule_json
50
135
  end
51
-
136
+
52
137
  def delete_firewall_rules(network, id = nil)
53
138
  # Same method to call to delete all firewall rules in a network. if id is nil
54
139
  EnfApi::API.instance.delete "/api/xfw/v1/#{network}/rule/#{id}"
@@ -59,7 +144,7 @@ module EnfApi
59
144
  include Singleton
60
145
 
61
146
  ## NO_TEST
62
- def provision_group(new_group)
147
+ def provision_group(new_group)
63
148
  json = EnfApi::to_json(new_group)
64
149
  EnfApi::API.instance.post "/api/xiam/v1/groups", json
65
150
  end
@@ -71,7 +156,7 @@ module EnfApi
71
156
  end
72
157
 
73
158
  ## NO_TEST
74
- def add_group_to_network(gid, ipv6_network)
159
+ def add_group_to_network(gid, ipv6_network)
75
160
  json = EnfApi::to_json(ipv6_network)
76
161
  EnfApi::API.instance.post "/api/xiam/v1/groups/#{gid}/networks", json
77
162
  end
@@ -87,23 +172,110 @@ module EnfApi
87
172
  end
88
173
 
89
174
  ## NO_TEST
90
- def provision_endpoint(new_endpoint)
175
+ def provision_endpoint(new_endpoint)
91
176
  json = EnfApi::to_json(new_endpoint)
92
177
  EnfApi::API.instance.post "/api/xiam/v1/endpoints", json
93
178
  end
94
179
 
95
180
  ## NO_TEST
96
- def update_endpoint_key(ipv6, credentials)
181
+ def update_endpoint_key(ipv6, credentials)
97
182
  json = EnfApi::to_json(credentials)
98
183
  EnfApi::API.instance.post "/api/xiam/v1/endpoints/#{ipv6}/credentials", json
99
184
  end
100
-
185
+
186
+ end
187
+
188
+ ##############################################################################
189
+ #
190
+ # Captive
191
+ #
192
+ ##############################################################################
193
+ class Captive
194
+ include Singleton
195
+
196
+ ## NO_TEST
197
+ def list_wifi_configurations
198
+ EnfApi::API.instance.get "/api/captive/v1/wifi"
199
+ end
200
+
201
+ ## NO_TEST
202
+ def create_wifi_configuration(new_wifi_config)
203
+ json = EnfApi::to_json(new_wifi_config)
204
+ EnfApi::API.instance.post "/api/captive/v1/wifi", json
205
+ end
206
+
207
+ # Get the wifi configuration using the wifi id
208
+ ## NO_TEST
209
+ def get_wifi_configuration(wifi_id, version = nil)
210
+ url = "/api/captive/v1/wifi/#{wifi_id}"
211
+ url = "#{url}?version=#{version}" if version
212
+ EnfApi::API.instance.get url
213
+ end
214
+
215
+ # Update an existing wifi configuration
216
+ ## NO_TEST
217
+ def update_wifi_configuration(wifi_id, updated_wifi_config)
218
+ json = EnfApi::to_json(updated_wifi_config)
219
+ EnfApi::API.instance.put "/api/captive/v1/wifi/#{wifi_id}", json
220
+ end
221
+
222
+
223
+ # Post the new device
224
+ ## NO_TEST
225
+ def create_device(new_dev_hash)
226
+ json = EnfApi.to_json(new_dev_hash)
227
+ EnfApi::API.instance.post "/api/captive/v1/device", json
228
+ end
229
+
230
+ # Get the list of devices
231
+ ## NO_TEST
232
+ def list_devices(network)
233
+ url = "/api/captive/v1/device"
234
+ url = "#{url}?#{network}" if network
235
+ EnfApi::API.instance.get url
236
+ end
237
+
238
+ # Get a specific device detail
239
+ ## NO_TEST
240
+ def get_device(dev_id)
241
+ EnfApi::API.instance.get "/api/captive/v1/device/#{dev_id}"
242
+ end
243
+
244
+ # Post the new profile
245
+ ## NO_TEST
246
+ def create_profile(new_profile_hash)
247
+ json = EnfApi.to_json(new_profile_hash)
248
+ EnfApi::API.instance.post "/api/captive/v1/profile", json
249
+ end
250
+
251
+
252
+ # Get the list of profiles
253
+ # name is a substring of the profile names to be returned
254
+ ## NO_TEST
255
+ def list_profiles(name = nil)
256
+ url = "/api/captive/v1/profile"
257
+ url = "#{url}?#{name}" if name
258
+ EnfApi::API.instance.get url
259
+ end
260
+
261
+ # Get detail on a specific profile
262
+ ## NO_TEST
263
+ def get_profile (profile_id)
264
+ EnfApi::API.instance.get "/api/captive/v1/profile/#{profile_id}"
265
+ end
266
+
267
+ # Send update PUT request for profile
268
+ ## NO_TEST
269
+ def update_profile (id, profile_updates)
270
+ json = EnfApi.to_json(profile_updates)
271
+ EnfApi::API.instance.put "/api/captive/v1/profile/#{id}", json
272
+ end
101
273
  end
102
274
 
103
275
  class NetworkManager
104
276
  include Singleton
105
277
  end
106
-
278
+
107
279
  class API
108
280
  include Singleton
109
281
 
@@ -128,7 +300,7 @@ module EnfApi
128
300
  case response.code
129
301
  when 200
130
302
  # get resp from json
131
- resp = from_json(response.body)
303
+ resp = from_json(response.body)
132
304
 
133
305
  # set request headers for subsequent api calls
134
306
  token = resp[:data][0][:token]
@@ -144,28 +316,28 @@ module EnfApi
144
316
 
145
317
  def get(request_uri)
146
318
  @api[request_uri].get(@headers) {|response, request, result|
147
- process_api_response response, request, result
319
+ process_api_response response, request, result
148
320
  }
149
321
  end
150
322
 
151
323
  def post(request_uri, request_body = '')
152
324
  @api[request_uri].post(request_body, @headers) {|response, request, result|
153
- process_api_response response, request, result
325
+ process_api_response response, request, result
154
326
  }
155
327
  end
156
328
 
157
329
  def put(request_uri, request_body = '')
158
330
  @api[request_uri].put(request_body, @headers) {|response, request, result|
159
- process_api_response response, request, result
331
+ process_api_response response, request, result
160
332
  }
161
- end
333
+ end
162
334
 
163
335
  def delete(request_uri)
164
336
  @api[request_uri].delete(@headers) {|response, request, result|
165
- process_api_response response, request, result
337
+ process_api_response response, request, result
166
338
  }
167
- end
168
-
339
+ end
340
+
169
341
  ############################################################################################################################
170
342
  # NOT READY API. MOVE ABOVE THIS LINE AFTER RSPEC OR INTO OWN CLASS
171
343
  ############################################################################################################################
@@ -175,47 +347,47 @@ module EnfApi
175
347
  }
176
348
  end
177
349
 
178
- def list_enfnws
350
+ def list_enfnws
179
351
  @api["/api/xcr/v2/enfnws"].get( @headers) {|response, request, result|
180
352
  process_api_response response, request, result
181
353
  }
182
354
  end
183
-
184
- def list_domains
355
+
356
+ def list_domains
185
357
  @api["/api/xcr/v2/domains"].get( @headers) {|response, request, result|
186
358
  process_api_response response, request, result
187
359
  }
188
360
  end
189
-
190
- def get_domain(domain_id)
361
+
362
+ def get_domain(domain_id)
191
363
  @api["/api/xcr/v2/domains/#{domain_id}"].get( @headers) {|response, request, result|
192
364
  process_api_response response, request, result
193
365
  }
194
366
  end
195
367
 
196
368
  def create_domain(domain_hash)
197
- json = to_json( domain_hash )
369
+ json = to_json( domain_hash )
198
370
  @api["/api/xcr/v2/domains"].post( json, @headers) {|response, request, result|
199
371
  process_api_response response, request, result
200
372
  }
201
373
  end
202
374
 
203
375
  def update_domain_rate_limits(domain_network, limit, limits_hash)
204
- json = to_json( limits_hash )
376
+ json = to_json( limits_hash )
205
377
  @api["/api/xcr/v2/domains/#{domain_network}/ep_rate_limits/#{limit}"].put( json, @headers) {|response, request, result|
206
378
  process_api_response response, request, result
207
379
  }
208
380
  end
209
381
 
210
382
  def update_network_rate_limits(network, limit, limits_hash)
211
- json = to_json( limits_hash )
383
+ json = to_json( limits_hash )
212
384
  @api["/api/xcr/v2/nws/#{network}/ep_rate_limits/#{limit}"].put( json, @headers) {|response, request, result|
213
385
  process_api_response response, request, result
214
386
  }
215
387
  end
216
388
 
217
389
  def update_ep_rate_limits(ipv6, limit, limits_hash)
218
- json = to_json( limits_hash )
390
+ json = to_json( limits_hash )
219
391
  @api["/api/xcr/v2/cxns/#{ipv6}/ep_rate_limits/#{limit}"].put( json, @headers) {|response, request, result|
220
392
  process_api_response response, request, result
221
393
  }
@@ -224,7 +396,7 @@ module EnfApi
224
396
  def get_domain_rate_limits(domain_network, filter = nil)
225
397
  api_url = "/api/xcr/v2/domains/#{domain_network}/ep_rate_limits"
226
398
  api_url = "#{api_url}/#{filter}" if filter
227
-
399
+
228
400
  @api[api_url].get( @headers) {|response, request, result|
229
401
  process_api_response response, request, result
230
402
  }
@@ -233,7 +405,7 @@ module EnfApi
233
405
  def get_network_rate_limits(network, filter = nil)
234
406
  api_url = "/api/xcr/v2/nws/#{network}/ep_rate_limits"
235
407
  api_url = "#{api_url}/#{filter}" if filter
236
-
408
+
237
409
  @api[api_url].get( @headers) {|response, request, result|
238
410
  process_api_response response, request, result
239
411
  }
@@ -242,7 +414,7 @@ module EnfApi
242
414
  def get_ep_rate_limits(ipv6, filter = nil)
243
415
  api_url = "/api/xcr/v2/cxns/#{ipv6}/ep_rate_limits"
244
416
  api_url = "#{api_url}/#{filter}" if filter
245
-
417
+
246
418
  @api[api_url].get( @headers) {|response, request, result|
247
419
  process_api_response response, request, result
248
420
  }
@@ -258,35 +430,35 @@ module EnfApi
258
430
  @api["/api/xcr/v2/domains/#{domain_network}/status"].delete( @headers) {|response, request, result|
259
431
  process_api_response response, request, result
260
432
  }
261
- end
433
+ end
262
434
 
263
435
  def create_nw(nw_hash)
264
436
  json = to_json(nw_hash)
265
- domain_id = nw_hash[:domain_id]
437
+ domain_id = nw_hash[:domain_id]
266
438
  @api["/api/xcr/v2/domains/#{domain_id}/nws"].post(json, @headers) {|response, request, result|
267
439
  process_api_response response, request, result
268
440
  }
269
441
  end
270
-
271
- def list_nw_connections(domain_id, network_cidr, file = nil)
442
+
443
+ def list_nw_connections(domain_id, network_cidr, file = nil)
272
444
  @api["/api/xcr/v2/domains/#{domain_id}/nws/#{network_cidr}/cxns"].get(@headers) {|response, request, result|
273
445
  process_api_response response, request, result
274
446
  }
275
447
  end
276
448
 
277
- def list_endpoint_events(ipv6)
449
+ def list_endpoint_events(ipv6)
278
450
  @api["/api/xcr/v2/cxns/#{ipv6}/events"].get(@headers) {|response, request, result|
279
451
  process_api_response response, request, result
280
452
  }
281
453
  end
282
454
 
283
- def list_network_events(network_cidr)
455
+ def list_network_events(network_cidr)
284
456
  @api["/api/xcr/v2/nws/#{network_cidr}/events"].get(@headers) {|response, request, result|
285
457
  process_api_response response, request, result
286
458
  }
287
459
  end
288
460
 
289
- def get_endpoint(ipv6)
461
+ def get_endpoint(ipv6)
290
462
  @api["/api/xcr/v2/cxns/#{ipv6}"].get(@headers) {|response, request, result|
291
463
  process_api_response response, request, result
292
464
  }
@@ -295,19 +467,19 @@ module EnfApi
295
467
  def update_endpoint(ipv6, name)
296
468
  hash = { :ipv6 => ipv6, :name => name }
297
469
  json = to_json( hash )
298
-
470
+
299
471
  @api["/api/xcr/v2/cxns/#{ipv6}"].put( json, @headers) {|response, request, result|
300
- process_api_response response, request, result
472
+ process_api_response response, request, result
301
473
  }
302
474
  end
303
475
 
304
- def activate_enfnw(subnet)
476
+ def activate_enfnw(subnet)
305
477
  @api["/api/xcr/v2/enfnws/#{subnet}"].put( '', @headers) {|response, request, result|
306
- process_api_response response, request, result
478
+ process_api_response response, request, result
307
479
  }
308
480
  end
309
481
 
310
- def list_domain_users(domain_network)
482
+ def list_domain_users(domain_network)
311
483
  @api["/api/xcr/v2/domains/#{domain_network}/users"].get( @headers) {|response, request, result|
312
484
  puts response.code
313
485
  process_api_response response, request, result
@@ -324,10 +496,10 @@ module EnfApi
324
496
  json = to_json( hash )
325
497
  @api["/api/xcr/v2/domains/#{domain_network}/invites"].post( json, @headers) { |response, request, result|
326
498
  process_api_response response, request, result
327
- }
499
+ }
328
500
  end
329
501
 
330
- def cancel_invite(email)
502
+ def cancel_invite(email)
331
503
  @api["/api/xcr/v2/invites/#{email}"].delete( @headers) {|response, request, result|
332
504
  process_api_response response, request, result
333
505
  }
@@ -336,7 +508,7 @@ module EnfApi
336
508
  def resend_invite(email)
337
509
  @api["/api/xcr/v2/invites/#{email}"].put( "{}", @headers) {|response, request, result|
338
510
  process_api_response response, request, result
339
- }
511
+ }
340
512
  end
341
513
 
342
514
  ############################################################################################################################
@@ -351,7 +523,7 @@ module EnfApi
351
523
  when 201
352
524
  # return response body
353
525
  from_json(response.body)
354
-
526
+
355
527
  when 400
356
528
  # api returns and error
357
529
  raise EnfApi::ERROR, api_error_msg(from_json(response.body))
@@ -363,12 +535,12 @@ module EnfApi
363
535
  when 403
364
536
  # api returns and error
365
537
  raise EnfApi::ERROR, "AUTHORIZATION_ERROR: User is not authorized to perform this operation!"
366
-
538
+
367
539
  else
368
540
  raise EnfApi::ERROR, "Unexpected error! Please try again!"
369
541
  end
370
542
  end
371
-
543
+
372
544
  def from_json(string)
373
545
  begin
374
546
  JSON.parse(string, {:symbolize_names => true})
@@ -386,10 +558,12 @@ module EnfApi
386
558
  reason = err[:reason]
387
559
  reason = Base64.decode64(reason)
388
560
  "#{reason}"
389
- else
561
+ elsif err.key?(:error)
390
562
  code = err[:error][:code]
391
563
  text = err[:error][:text]
392
564
  "#{code.upcase}: #{text}"
565
+ else
566
+ "UNKNOWN_ERROR: server did not respond with properly formatted error message."
393
567
  end
394
568
  end
395
569