onelogin 1.2.1 → 1.2.2

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
  SHA1:
3
- metadata.gz: d58de3abd209ce7e6de060541a04cb2ccc403645
4
- data.tar.gz: 01491005b2597087ba28e3cae0d4466129b4e453
3
+ metadata.gz: 8069da07a08e3fe1e504af1a9fc63291976e91c0
4
+ data.tar.gz: f042c302a74c09a7fd1b4b7ddc7e06de2b5d3220
5
5
  SHA512:
6
- metadata.gz: b484d5d34ac1b711ce41d32c217ddaeefd19e2c8b55d057e02b560bf0146171a6a6956cbd1f0301ce215ef4bd3a7183535c30a11b8fd82e18715e1df358c8085
7
- data.tar.gz: 326e7dc9c1485f2ba5322432038498e3bd8973f9b58e0847c612ad14a882a8cadbb74a58e2ff7cb7a42f8c318872a901a8466bc0f3418300ed4f02de5f199dce
6
+ metadata.gz: e57dbe81b5aed13dcac3a3eeef4fcc44daaccac3383d4e90703792100dff2e8010448e3b19b5e4b92c7c65bca0f15a68307d1a3715aa277d8cafeafb75b62f72
7
+ data.tar.gz: 57ce0509e3f806865283cbd8ca091a316cb8a16cf69d34bd25249a1d60ec5f06ec61eb17f655184251682c49ecae42259ca0d88e50089bd8c804d1a70c9a88be
data/README.md CHANGED
@@ -74,6 +74,14 @@ if users.nil?
74
74
  end
75
75
  ```
76
76
 
77
+ In some scenarios there is an attribute not provided or invalid that causes the error,
78
+ when that happens in addition to the error_description a error_attribute is available
79
+ with the name of the attribute that caused the issue. Accesible at the client like:
80
+
81
+ ```ruby
82
+ client.error_attribute
83
+ ```
84
+
77
85
  ### Authentication
78
86
 
79
87
  By default methods call internally to `get_access_token` if there is no valid access_token. You can also get tokens etc directly if needed.
@@ -312,7 +320,7 @@ enroll_factor = client.enroll_factor(user_id, auth_factors.first.id, 'My Device'
312
320
 
313
321
  # Get Enrolled Authentication Factors
314
322
  otp_devices = client.get_enrolled_factors(user_id)
315
-
323
+
316
324
  # Activate an Authentication Factor
317
325
  device_id = 0000000
318
326
  enrollment_response = client.activate_factor(user_id, device_id)
@@ -334,6 +342,26 @@ embed_token = "30e256c101cd0d2e731de1ec222e93c4be8a1572"
334
342
  apps = client.get_embed_apps("30e256c101cd0d2e731de1ec222e93c4be8a1572", "user@example.com")
335
343
  ```
336
344
 
345
+ ## Proxy Servers
346
+ If you're stuck behind a proxy then you can still use this SDK by providing at a minimum the
347
+ host address of your proxy server.
348
+
349
+ ```ruby
350
+ client = OneLogin::Api::Client.new(
351
+ client_id: 'some-client-id',
352
+ client_secret:'some-client-secret',
353
+ region: 'us',
354
+ proxy_host: 'https://blah.com',
355
+ proxy_port: '8080',
356
+ proxy_user: 'username',
357
+ proxy_pass: 'password'
358
+ )
359
+ ```
360
+
361
+ * `proxy_host` - required, the host address of your proxy server
362
+ * `proxy_port` - optional, the port number of your proxy server
363
+ * `proxy_user` - optional, the username for your proxy server
364
+ * `proxy_pass` - optional, the password for your proxy server
337
365
 
338
366
  ## Development
339
367
 
@@ -1,13 +1,13 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- httparty (0.16.0)
4
+ httparty (0.16.2)
5
5
  multi_xml (>= 0.5.2)
6
6
  mini_portile2 (2.3.0)
7
7
  multi_xml (0.6.0)
8
- nokogiri (1.8.2)
8
+ nokogiri (1.8.4)
9
9
  mini_portile2 (~> 2.3.0)
10
- onelogin (1.0.1)
10
+ onelogin (1.2.1)
11
11
  httparty (>= 0.13.7)
12
12
  nokogiri (>= 1.6.3.1)
13
13
 
@@ -24,10 +24,10 @@ OptionParser.new do |opts|
24
24
  options[:since] = s.iso8601
25
25
  end
26
26
 
27
- opts.on("-lLAST", "--LAST=LAST", Time, "Events since this many days ago") do |d|
27
+ opts.on("-lLAST", "--LAST=LAST", Integer, "Events since this many days ago") do |d|
28
28
  now = Date.today
29
29
  days_ago = (now - d)
30
- options[:since] = days_ago.iso8601
30
+ options[:since] = days_ago.strftime('%Y-%m-%dT%H:%M:%SZ')
31
31
  end
32
32
 
33
33
  opts.on("-uUNTIL", "--UNTIL=UNTIL", Time, "Events before this date") do |u|
@@ -42,12 +42,12 @@ OptionParser.new do |opts|
42
42
  options[:event_type_id] = t
43
43
  end
44
44
 
45
- opts.on("-uTYPE", "--user=TYPE", Integer, "Filter by user id") do |u|
45
+ opts.on("-uUSER", "--user=USER", Integer, "Filter by user id") do |u|
46
46
  options[:user_id] = u
47
47
  end
48
48
 
49
49
  # Sort direction is done by adding a + or - before the field name that you want to sort on
50
- opts.on("-zTYPE", "--sort=TYPE", String, "Sort by this field") do |s|
50
+ opts.on("-zSORT", "--sort=SORT", String, "Sort by this field") do |s|
51
51
  options[:sort] = s
52
52
  end
53
53
  end.parse!
@@ -0,0 +1,71 @@
1
+ require 'onelogin'
2
+ require 'optparse'
3
+ require 'optparse/time'
4
+
5
+ #
6
+ # This generates a report listing the last login date for all users who have logged into a specified app in the last x days.
7
+ #
8
+ # Usage:
9
+ # 1. Set your own CLIENT_ID and CLIENT_SECRET below
10
+ # 2. From terminal run "ruby last-app-user-login-to-csv.rb"
11
+ # 3. Use the command line args to filter events
12
+ #
13
+ # e.g. "ruby last-app-user-login-to-csv.rb -l 90" for last 90 days
14
+ #
15
+
16
+
17
+ # Parse CLI arguments
18
+ options = {
19
+ event_type_id: 8, # User Logged into an App
20
+ sort: '-created_at'
21
+ }
22
+
23
+ OptionParser.new do |opts|
24
+ opts.banner = "Usage: last-app-user-login-to-csv.rb [options]"
25
+
26
+ opts.on("-lLAST", "--LAST=LAST", Integer, "Events since this many days ago") do |d|
27
+ now = Date.today
28
+ days_ago = (now - d)
29
+ options[:since] = days_ago.strftime('%Y-%m-%dT%H:%M:%SZ')
30
+ end
31
+
32
+ end.parse!
33
+
34
+ client = OneLogin::Api::Client.new(
35
+ client_id: 'ONELOGIN_CLIENT_ID_GOES_HERE',
36
+ client_secret: 'ONELOGIN_CLIENT_SECRET_GOES_HERE',
37
+ region: 'us'
38
+ )
39
+
40
+ counter = 0
41
+
42
+ logins = {}
43
+
44
+ # build a hash from events which contains user_id and latest login date
45
+ client.get_events(options).each do |event|
46
+ key = "#{event.app_id}-#{event.user_id}"
47
+
48
+ unless logins[key]
49
+ logins[key] = {
50
+ app_id: event.app_id,
51
+ app_name: event.app_name,
52
+ user_id: event.user_id,
53
+ user_name: event.user_name,
54
+ last_login_at: event.created_at
55
+ }
56
+ end
57
+ end
58
+
59
+ CSV.open('last-login-by-app.csv', 'wb') do |csv|
60
+ puts "Exporting user logins to last-login-by-app.csv"
61
+
62
+ # header row
63
+ csv << ['app_id', 'app_name', 'user_id', 'user_name', 'last_login_at']
64
+
65
+ logins.each do |login|
66
+ csv << login[1].values
67
+ counter += 1
68
+ end
69
+ end
70
+
71
+ puts "Exported #{counter} user logins to last-login-by-app.csv"
@@ -16,9 +16,10 @@ module OneLogin
16
16
  #
17
17
  class Client
18
18
  include OneLogin::Api::Util
19
+ include HTTParty
19
20
 
20
21
  attr_accessor :client_id, :client_secret, :region
21
- attr_accessor :user_agent, :error, :error_description
22
+ attr_accessor :user_agent, :error, :error_description, :error_attribute
22
23
 
23
24
  NOKOGIRI_OPTIONS = Nokogiri::XML::ParseOptions::STRICT |
24
25
  Nokogiri::XML::ParseOptions::NONET
@@ -37,6 +38,10 @@ module OneLogin
37
38
  @region = options[:region] || 'us'
38
39
  @max_results = options[:max_results] || 1000
39
40
 
41
+ if options[:proxy_host]
42
+ self.class.http_proxy options[:proxy_host], options[:proxy_port], options[:proxy_user], options[:proxy_pass]
43
+ end
44
+
40
45
  validate_config
41
46
 
42
47
  @user_agent = DEFAULT_USER_AGENT
@@ -51,6 +56,7 @@ module OneLogin
51
56
  def clean_error
52
57
  @error = nil
53
58
  @error_description = nil
59
+ @error_attribute = nil
54
60
  end
55
61
 
56
62
  def extract_error_message_from_response(response)
@@ -59,7 +65,13 @@ module OneLogin
59
65
  if content && content.has_key?('status')
60
66
  status = content['status']
61
67
  if status.has_key?('message')
62
- message = status['message']
68
+ if status['message'].instance_of?(Hash)
69
+ if status['message'].has_key?('description')
70
+ message = status['message']['description']
71
+ end
72
+ else
73
+ message = status['message']
74
+ end
63
75
  elsif status.has_key?('type')
64
76
  message = status['type']
65
77
  end
@@ -67,6 +79,20 @@ module OneLogin
67
79
  message
68
80
  end
69
81
 
82
+ def extract_error_attribute_from_response(response)
83
+ attribute = nil
84
+ content = JSON.parse(response.body)
85
+ if content && content.has_key?('status')
86
+ status = content['status']
87
+ if status.has_key?('message') && status['message'].instance_of?(Hash)
88
+ if status['message'].has_key?('attribute')
89
+ attribute = status['message']['attribute']
90
+ end
91
+ end
92
+ end
93
+ attribute
94
+ end
95
+
70
96
  def expired?
71
97
  Time.now.utc > @expiration
72
98
  end
@@ -168,7 +194,7 @@ module OneLogin
168
194
  'grant_type' => 'client_credentials'
169
195
  }
170
196
 
171
- response = HTTParty.post(
197
+ response = self.class.post(
172
198
  url,
173
199
  headers: authorized_headers(false),
174
200
  body: data.to_json
@@ -210,7 +236,7 @@ module OneLogin
210
236
  'refresh_token' => @refresh_token
211
237
  }
212
238
 
213
- response = HTTParty.post(
239
+ response = self.class.post(
214
240
  url,
215
241
  headers: headers,
216
242
  body: data.to_json
@@ -250,7 +276,7 @@ module OneLogin
250
276
  access_token: @access_token
251
277
  }
252
278
 
253
- response = HTTParty.post(
279
+ response = self.class.post(
254
280
  url,
255
281
  headers: authorized_headers(false),
256
282
  body: data.to_json
@@ -285,7 +311,7 @@ module OneLogin
285
311
  begin
286
312
  url = url_for(GET_RATE_URL)
287
313
 
288
- response = HTTParty.get(
314
+ response = self.class.get(
289
315
  url,
290
316
  headers: authorized_headers
291
317
  )
@@ -327,7 +353,8 @@ module OneLogin
327
353
  model: OneLogin::Api::Models::User,
328
354
  headers: authorized_headers,
329
355
  max_results: @max_results,
330
- params: params
356
+ params: params,
357
+ client: self.class
331
358
  }
332
359
 
333
360
  return Cursor.new(url_for(GET_USERS_URL), options)
@@ -355,7 +382,7 @@ module OneLogin
355
382
 
356
383
  url = url_for(GET_USER_URL, user_id)
357
384
 
358
- response = HTTParty.get(
385
+ response = self.class.get(
359
386
  url,
360
387
  headers: authorized_headers
361
388
  )
@@ -419,7 +446,7 @@ module OneLogin
419
446
  begin
420
447
  url = url_for(GET_ROLES_FOR_USER_URL, user_id)
421
448
 
422
- response = HTTParty.get(
449
+ response = self.class.get(
423
450
  url,
424
451
  headers: authorized_headers
425
452
  )
@@ -454,7 +481,7 @@ module OneLogin
454
481
  begin
455
482
  url = url_for(GET_CUSTOM_ATTRIBUTES_URL)
456
483
 
457
- response = HTTParty.get(
484
+ response = self.class.get(
458
485
  url,
459
486
  headers: authorized_headers
460
487
  )
@@ -498,7 +525,7 @@ module OneLogin
498
525
  begin
499
526
  url = url_for(CREATE_USER_URL)
500
527
 
501
- response = HTTParty.post(
528
+ response = self.class.post(
502
529
  url,
503
530
  headers: authorized_headers,
504
531
  body: user_params.to_json
@@ -512,6 +539,7 @@ module OneLogin
512
539
  else
513
540
  @error = response.code.to_s
514
541
  @error_description = extract_error_message_from_response(response)
542
+ @error_attribute = extract_error_attribute_from_response(response)
515
543
  end
516
544
  rescue Exception => e
517
545
  @error = '500'
@@ -541,7 +569,7 @@ module OneLogin
541
569
  begin
542
570
  url = url_for(UPDATE_USER_URL, user_id)
543
571
 
544
- response = HTTParty.put(
572
+ response = self.class.put(
545
573
  url,
546
574
  headers: authorized_headers,
547
575
  body: user_params.to_json
@@ -555,6 +583,7 @@ module OneLogin
555
583
  else
556
584
  @error = response.code.to_s
557
585
  @error_description = extract_error_message_from_response(response)
586
+ @error_attribute = extract_error_attribute_from_response(response)
558
587
  end
559
588
  rescue Exception => e
560
589
  @error = '500'
@@ -583,7 +612,7 @@ module OneLogin
583
612
  'role_id_array' => role_ids
584
613
  }
585
614
 
586
- response = HTTParty.put(
615
+ response = self.class.put(
587
616
  url,
588
617
  headers: authorized_headers,
589
618
  body: data.to_json
@@ -594,6 +623,7 @@ module OneLogin
594
623
  else
595
624
  @error = response.code.to_s
596
625
  @error_description = extract_error_message_from_response(response)
626
+ @error_attribute = extract_error_attribute_from_response(response)
597
627
  end
598
628
  rescue Exception => e
599
629
  @error = '500'
@@ -622,7 +652,7 @@ module OneLogin
622
652
  'role_id_array' => role_ids
623
653
  }
624
654
 
625
- response = HTTParty.put(
655
+ response = self.class.put(
626
656
  url,
627
657
  headers: authorized_headers,
628
658
  body: data.to_json
@@ -633,6 +663,7 @@ module OneLogin
633
663
  else
634
664
  @error = response.code.to_s
635
665
  @error_description = extract_error_message_from_response(response)
666
+ @error_attribute = extract_error_attribute_from_response(response)
636
667
  end
637
668
  rescue Exception => e
638
669
  @error = '500'
@@ -665,7 +696,7 @@ module OneLogin
665
696
  'validate_policy' => validate_policy
666
697
  }
667
698
 
668
- response = HTTParty.put(
699
+ response = self.class.put(
669
700
  url,
670
701
  headers: authorized_headers,
671
702
  body: data.to_json
@@ -676,6 +707,7 @@ module OneLogin
676
707
  else
677
708
  @error = response.code.to_s
678
709
  @error_description = extract_error_message_from_response(response)
710
+ @error_attribute = extract_error_attribute_from_response(response)
679
711
  end
680
712
  rescue Exception => e
681
713
  @error = '500'
@@ -713,7 +745,7 @@ module OneLogin
713
745
  data['password_salt'] = password_salt
714
746
  end
715
747
 
716
- response = HTTParty.put(
748
+ response = self.class.put(
717
749
  url,
718
750
  headers: authorized_headers,
719
751
  body: data.to_json
@@ -724,6 +756,7 @@ module OneLogin
724
756
  else
725
757
  @error = response.code.to_s
726
758
  @error_description = extract_error_message_from_response(response)
759
+ @error_attribute = extract_error_attribute_from_response(response)
727
760
  end
728
761
  rescue Exception => e
729
762
  @error = '500'
@@ -752,7 +785,7 @@ module OneLogin
752
785
  'state' => state
753
786
  }
754
787
 
755
- response = HTTParty.put(
788
+ response = self.class.put(
756
789
  url,
757
790
  headers: authorized_headers,
758
791
  body: data.to_json
@@ -763,6 +796,7 @@ module OneLogin
763
796
  else
764
797
  @error = response.code.to_s
765
798
  @error_description = extract_error_message_from_response(response)
799
+ @error_attribute = extract_error_attribute_from_response(response)
766
800
  end
767
801
  rescue Exception => e
768
802
  @error = '500'
@@ -791,7 +825,7 @@ module OneLogin
791
825
  'custom_attributes' => custom_attributes
792
826
  }
793
827
 
794
- response = HTTParty.put(
828
+ response = self.class.put(
795
829
  url,
796
830
  headers: authorized_headers,
797
831
  body: data.to_json
@@ -802,6 +836,7 @@ module OneLogin
802
836
  else
803
837
  @error = response.code.to_s
804
838
  @error_description = extract_error_message_from_response(response)
839
+ @error_attribute = extract_error_attribute_from_response(response)
805
840
  end
806
841
  rescue Exception => e
807
842
  @error = '500'
@@ -825,7 +860,7 @@ module OneLogin
825
860
  begin
826
861
  url = url_for(LOG_USER_OUT_URL, user_id)
827
862
 
828
- response = HTTParty.put(
863
+ response = self.class.put(
829
864
  url,
830
865
  headers: authorized_headers
831
866
  )
@@ -835,6 +870,7 @@ module OneLogin
835
870
  else
836
871
  @error = response.code.to_s
837
872
  @error_description = extract_error_message_from_response(response)
873
+ @error_attribute = extract_error_attribute_from_response(response)
838
874
  end
839
875
  rescue Exception => e
840
876
  @error = '500'
@@ -865,7 +901,7 @@ module OneLogin
865
901
  'locked_until' => minutes
866
902
  }
867
903
 
868
- response = HTTParty.put(
904
+ response = self.class.put(
869
905
  url,
870
906
  headers: authorized_headers,
871
907
  body: data.to_json
@@ -876,6 +912,7 @@ module OneLogin
876
912
  else
877
913
  @error = response.code.to_s
878
914
  @error_description = extract_error_message_from_response(response)
915
+ @error_attribute = extract_error_attribute_from_response(response)
879
916
  end
880
917
  rescue Exception => e
881
918
  @error = '500'
@@ -899,7 +936,7 @@ module OneLogin
899
936
  begin
900
937
  url = url_for(DELETE_USER_URL, user_id)
901
938
 
902
- response = HTTParty.delete(
939
+ response = self.class.delete(
903
940
  url,
904
941
  headers: authorized_headers
905
942
  )
@@ -909,6 +946,7 @@ module OneLogin
909
946
  else
910
947
  @error = response.code.to_s
911
948
  @error_description = extract_error_message_from_response(response)
949
+ @error_attribute = extract_error_attribute_from_response(response)
912
950
  end
913
951
  rescue Exception => e
914
952
  @error = '500'
@@ -941,7 +979,7 @@ module OneLogin
941
979
  raise "username_or_email, password and subdomain are required parameters"
942
980
  end
943
981
 
944
- response = HTTParty.post(
982
+ response = self.class.post(
945
983
  url,
946
984
  headers: authorized_headers.merge({ 'Custom-Allowed-Origin-Header-1' => allowed_origin }),
947
985
  body: query_params.to_json
@@ -986,7 +1024,7 @@ module OneLogin
986
1024
  data['otp_token'] = otp_token
987
1025
  end
988
1026
 
989
- response = HTTParty.post(
1027
+ response = self.class.post(
990
1028
  url,
991
1029
  headers: authorized_headers.merge({ 'Custom-Allowed-Origin-Header-1' => allowed_origin }),
992
1030
  body: data.to_json
@@ -1054,7 +1092,7 @@ module OneLogin
1054
1092
  begin
1055
1093
  url = url_for(GET_ROLE_URL, role_id)
1056
1094
 
1057
- response = HTTParty.get(
1095
+ response = self.class.get(
1058
1096
  url,
1059
1097
  headers: authorized_headers
1060
1098
  )
@@ -1149,7 +1187,7 @@ module OneLogin
1149
1187
  begin
1150
1188
  url = url_for(GET_EVENT_URL, event_id)
1151
1189
 
1152
- response = HTTParty.get(
1190
+ response = self.class.get(
1153
1191
  url,
1154
1192
  headers: authorized_headers
1155
1193
  )
@@ -1191,7 +1229,7 @@ module OneLogin
1191
1229
  begin
1192
1230
  url = url_for(CREATE_EVENT_URL)
1193
1231
 
1194
- response = HTTParty.post(
1232
+ response = self.class.post(
1195
1233
  url,
1196
1234
  headers: authorized_headers,
1197
1235
  body: event_params.to_json
@@ -1202,6 +1240,7 @@ module OneLogin
1202
1240
  else
1203
1241
  @error = response.code.to_s
1204
1242
  @error_description = extract_error_message_from_response(response)
1243
+ @error_attribute = extract_error_attribute_from_response(response)
1205
1244
  end
1206
1245
  rescue Exception => e
1207
1246
  @error = '500'
@@ -1256,7 +1295,7 @@ module OneLogin
1256
1295
  begin
1257
1296
  url = url_for(GET_GROUP_URL, group_id)
1258
1297
 
1259
- response = HTTParty.get(
1298
+ response = self.class.get(
1260
1299
  url,
1261
1300
  headers: authorized_headers
1262
1301
  )
@@ -1311,7 +1350,7 @@ module OneLogin
1311
1350
  data['ip_address'] = ip_address
1312
1351
  end
1313
1352
 
1314
- response = HTTParty.post(
1353
+ response = self.class.post(
1315
1354
  url,
1316
1355
  headers: authorized_headers,
1317
1356
  body: data.to_json
@@ -1364,7 +1403,7 @@ module OneLogin
1364
1403
  data['otp_token'] = otp_token
1365
1404
  end
1366
1405
 
1367
- response = HTTParty.post(
1406
+ response = self.class.post(
1368
1407
  url,
1369
1408
  headers: authorized_headers,
1370
1409
  body: data.to_json
@@ -1402,7 +1441,7 @@ module OneLogin
1402
1441
  begin
1403
1442
  url = url_for(GET_FACTORS_URL, user_id)
1404
1443
 
1405
- response = HTTParty.get(
1444
+ response = self.class.get(
1406
1445
  url,
1407
1446
  :headers => authorized_headers
1408
1447
  )
@@ -1451,7 +1490,7 @@ module OneLogin
1451
1490
  'number'=> number
1452
1491
  }
1453
1492
 
1454
- response = HTTParty.post(
1493
+ response = self.class.post(
1455
1494
  url,
1456
1495
  :headers => authorized_headers,
1457
1496
  body: data.to_json
@@ -1488,7 +1527,7 @@ module OneLogin
1488
1527
  begin
1489
1528
  url = url_for(GET_ENROLLED_FACTORS_URL, user_id)
1490
1529
 
1491
- response = HTTParty.get(
1530
+ response = self.class.get(
1492
1531
  url,
1493
1532
  :headers => authorized_headers
1494
1533
  )
@@ -1530,7 +1569,7 @@ module OneLogin
1530
1569
  begin
1531
1570
  url = url_for(ACTIVATE_FACTOR_URL, user_id, device_id)
1532
1571
 
1533
- response = HTTParty.post(
1572
+ response = self.class.post(
1534
1573
  url,
1535
1574
  headers: authorized_headers
1536
1575
  )
@@ -1587,7 +1626,7 @@ module OneLogin
1587
1626
  data['state_token'] = state_token
1588
1627
  end
1589
1628
 
1590
- response = HTTParty.post(
1629
+ response = self.class.post(
1591
1630
  url,
1592
1631
  headers: authorized_headers,
1593
1632
  body: data.to_json
@@ -1622,7 +1661,7 @@ module OneLogin
1622
1661
  begin
1623
1662
  url = url_for(REMOVE_FACTOR_URL, user_id, device_id)
1624
1663
 
1625
- response = HTTParty.delete(
1664
+ response = self.class.delete(
1626
1665
  url,
1627
1666
  :headers => authorized_headers
1628
1667
  )
@@ -1664,7 +1703,7 @@ module OneLogin
1664
1703
  'email'=> email
1665
1704
  }
1666
1705
 
1667
- response = HTTParty.post(
1706
+ response = self.class.post(
1668
1707
  url,
1669
1708
  headers: authorized_headers,
1670
1709
  body: data.to_json
@@ -1712,7 +1751,7 @@ module OneLogin
1712
1751
  data['personal_email'] = personal_email
1713
1752
  end
1714
1753
 
1715
- response = HTTParty.post(
1754
+ response = self.class.post(
1716
1755
  url,
1717
1756
  headers: authorized_headers,
1718
1757
  body: data.to_json
@@ -1744,7 +1783,7 @@ module OneLogin
1744
1783
  clean_error
1745
1784
 
1746
1785
  begin
1747
- response = HTTParty.get(
1786
+ response = self.class.get(
1748
1787
  EMBED_APP_URL,
1749
1788
  headers: {
1750
1789
  'User-Agent' => @user_agent
@@ -19,6 +19,7 @@ class Cursor
19
19
  @headers = options[:headers] || {}
20
20
  @params = options[:params] || {}
21
21
  @max_results = options[:max_results]
22
+ @client = options[:client]
22
23
 
23
24
  @collection = []
24
25
  @after_cursor = options.fetch(:after_cursor, nil)
@@ -49,7 +50,7 @@ class Cursor
49
50
  def fetch_next_page
50
51
  @params = @params.merge(after_cursor: @after_cursor) if @after_cursor
51
52
 
52
- response = HTTParty.get(
53
+ response = @client.get(
53
54
  @url,
54
55
  headers: @headers,
55
56
  query: @params
@@ -1,3 +1,3 @@
1
1
  module OneLogin
2
- VERSION = "1.2.1"
2
+ VERSION = "1.2.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onelogin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - OneLogin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-16 00:00:00.000000000 Z
11
+ date: 2018-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -105,6 +105,7 @@ files:
105
105
  - examples/all-users-to-csv.rb
106
106
  - examples/create-user.rb
107
107
  - examples/events-to-csv.rb
108
+ - examples/last-app-user-login-to-csv.rb
108
109
  - examples/list-users.rb
109
110
  - examples/rails-custom-login-page/.gitignore
110
111
  - examples/rails-custom-login-page/.ruby-version