enfcli 3.3.4 → 3.4.0.pre.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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