onelogin 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,89 @@
1
+ # Cursor
2
+ #
3
+ # Used for paginating requests to the OneLogin API
4
+ #
5
+ # Returns an enumerable object
6
+ class Cursor
7
+ include Enumerable
8
+
9
+ # Create a new instance of the Cursor.
10
+ #
11
+ # @param url [String] The url of the API endpoint
12
+ # @param options [Hash] Configuation options
13
+ #
14
+ def initialize(url, options = {})
15
+ @url = url
16
+ @options = options
17
+
18
+ @model = options[:model]
19
+ @headers = options[:headers] || {}
20
+ @params = options[:params] || {}
21
+ @max_results = options[:max_results]
22
+
23
+ @collection = []
24
+ @after_cursor = options.fetch(:after_cursor, nil)
25
+ end
26
+
27
+ def each(start = 0)
28
+ return to_enum(:each, start) unless block_given?
29
+
30
+ Array(@collection[start..-1]).each do |item|
31
+ if @model
32
+ yield(@model.new(item))
33
+ else
34
+ yield(item)
35
+ end
36
+ end
37
+
38
+ unless last?
39
+ start = [@collection.size, start].max
40
+
41
+ fetch_next_page
42
+
43
+ each(start, &Proc.new)
44
+ end
45
+ end
46
+
47
+ private
48
+
49
+ def fetch_next_page
50
+ @params = @params.merge(after_cursor: @after_cursor) if @after_cursor
51
+
52
+ response = HTTParty.get(
53
+ @url,
54
+ headers: @headers,
55
+ query: @params
56
+ )
57
+
58
+ json = response.parsed_response
59
+
60
+ @collection += if results_remaining < json['data'].size
61
+ json['data'].slice(0, results_remaining)
62
+ else
63
+ json['data']
64
+ end
65
+
66
+ @after_cursor = after_cursor(json)
67
+ @last_cursor_empty = @after_cursor.nil?
68
+ end
69
+
70
+ def after_cursor(json)
71
+ return unless json['pagination']
72
+
73
+ json['pagination'].fetch('after_cursor', nil)
74
+ end
75
+
76
+ def results_remaining
77
+ @max_results - @collection.size
78
+ end
79
+
80
+ def fetch_completed?
81
+ return false unless @max_results
82
+
83
+ @collection.size >= @max_results
84
+ end
85
+
86
+ def last?
87
+ @last_cursor_empty || fetch_completed?
88
+ end
89
+ end
@@ -0,0 +1,22 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class App
6
+
7
+ attr_accessor :id, :name, :icon, :provisioned
8
+ attr_accessor :extension, :login_id, :personal
9
+
10
+ def initialize(data)
11
+ @id = data['id']
12
+ @name = data['name']
13
+ @icon = data['icon']
14
+ @provisioned = data['provisioned']
15
+ @extension = data['extension']
16
+ @login_id = data['login_id']
17
+ @personal = data['personal']
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class Device
6
+
7
+ attr_accessor :id, :type
8
+
9
+ def initialize(data)
10
+ @id = data['device_id']
11
+ @type = data['device_type'].to_s
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,31 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class EmbedApp
6
+
7
+ attr_accessor :id, :name, :icon, :provisioned, :extension_required, :login_id, :personal
8
+
9
+ def initialize(data)
10
+ @data = data
11
+
12
+ @id = data['id'].to_i
13
+ @name = data['name'].to_s
14
+ @icon = data['icon']
15
+ @provisioned = data['provisioned'].to_i
16
+ @extension_required = truthy?('extension_required')
17
+ @login_id = data['login_id'].to_i
18
+ @personal = truthy?('personal')
19
+ end
20
+
21
+ private
22
+
23
+ def truthy?(attribute_name)
24
+ return false unless @data[attribute_name]
25
+
26
+ ['yes', 'true', '1'].include? @data[attribute_name].to_s.downcase
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,48 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class Event
6
+
7
+ attr_accessor :id, :created_at, :account_id, :user_id, :user_name, :event_type_id,
8
+ :notes, :ipaddr, :actor_user_id, :actor_user_name, :assuming_acting_user_id,
9
+ :role_id, :role_name, :app_id, :group_id, :group_name, :otp_device_id,
10
+ :otp_device_name, :policy_id, :policy_name, :actor_system, :custom_message,
11
+ :operation_name, :directory_sync_run_id, :directory_id, :resolution, :client_id,
12
+ :resource_type_id, :error_description
13
+
14
+ def initialize(data)
15
+ @id = data['id']
16
+ @created_at = data['created_at']? Time.iso8601(data['created_at']) : nil
17
+ @account_id = data['account_id']
18
+ @user_id = data['user_id']
19
+ @user_name = data['user_name'].to_s
20
+ @event_type_id = data['event_type_id']
21
+ @notes = data['notes'].to_s
22
+ @ipaddr = data['ipaddr'].to_s
23
+ @actor_user_id = data['actor_user_id']
24
+ @actor_user_name = data['actor_user_name'].to_s
25
+ @assuming_acting_user_id = data['assuming_acting_user_id']
26
+ @role_id = data['role_id']
27
+ @role_name = data['role_name'].to_s
28
+ @app_id = data['app_id']
29
+ @group_id = data['group_id']
30
+ @group_name = data['group_name'].to_s
31
+ @otp_device_id = data['otp_device_id']
32
+ @otp_device_name = data['otp_device_name'].to_s
33
+ @policy_id = data['policy_id']
34
+ @policy_name = data['policy_name'].to_s
35
+ @actor_system = data['actor_system'].to_s
36
+ @custom_message = data['custom_message'].to_s
37
+ @operation_name = data['operation_name'].to_s
38
+ @directory_sync_run_id = data['directory_sync_run_id']
39
+ @directory_id = data['directory_id']
40
+ @resolution = data['resolution'].to_s
41
+ @client_id = data['client_id']
42
+ @resource_type_id = data['resource_type_id']
43
+ @error_description = data['error_description'].to_s
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,17 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class EventType
6
+
7
+ attr_accessor :id, :name, :reference
8
+
9
+ def initialize(data)
10
+ @id = data['id']
11
+ @name = data['name'].to_s
12
+ @reference = data['reference'].to_s
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class Group
6
+
7
+ attr_accessor :id, :name, :reference
8
+
9
+ def initialize(data)
10
+ @id = data['id']
11
+ @name = data['name'].to_s
12
+ @reference = data['reference'].to_s
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,26 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class MFA
6
+
7
+ attr_accessor :state_token, :callback_url, :user, :devices
8
+
9
+ def initialize(data)
10
+ unless data['user'].empty?
11
+ @user = OneLogin::Api::Models::User.new(data['user']) # Partial info
12
+ end
13
+ @state_token = data['state_token'].to_s
14
+ @callback_url = data['callback_url'].to_s
15
+ @devices = []
16
+ unless data['devices'].empty?
17
+ data['devices'].each do |device_data|
18
+ @devices << OneLogin::Api::Models::Device.new(device_data)
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class OneLoginToken
6
+
7
+ attr_accessor :access_token, :refresh_token, :account_id, :token_type, :created_at, :expires_in
8
+
9
+ def initialize(data)
10
+ @access_token = data['access_token'].to_s
11
+ @refresh_token = data['refresh_token'].to_s
12
+ @account_id = data['account_id']
13
+ @token_type = data['token_type']
14
+ @created_at = Time.iso8601(data['created_at'])
15
+ @expires_in = data['expires_in']
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class RateLimit
6
+
7
+ attr_accessor :limit, :remaining, :reset
8
+
9
+ def initialize(data)
10
+ @limit = data['X-RateLimit-Limit']
11
+ @remaining = data['X-RateLimit-Remaining']
12
+ @reset = data['X-RateLimit-Reset']
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class Role
6
+
7
+ attr_accessor :id, :name
8
+
9
+ def initialize(data)
10
+ @id = data['id']
11
+ @name = data['name'].to_s
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class SAMLEndpointResponse
6
+
7
+ attr_accessor :type, :message, :mfa, :saml_response
8
+
9
+ def initialize(status_type, status_message)
10
+ @type = status_type
11
+ @message = status_message
12
+ @saml_response = nil
13
+ @mfa = nil
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class SessionTokenInfo
6
+
7
+ attr_accessor :status, :user, :return_to_url, :expires_at, :session_token
8
+
9
+ def initialize(data)
10
+ @status = data['status'].to_s
11
+ unless data['user'].empty?
12
+ @user = OneLogin::Api::Models::User.new(data['user']) # Partial info
13
+ end
14
+ @return_to_url = data['return_to_url'].to_s
15
+ @expires_at = Time.parse(data['expires_at'])
16
+ @session_token = data['session_token'].to_s
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class SessionTokenMFAInfo
6
+
7
+ attr_accessor :user, :state_token, :callback_url, :devices
8
+
9
+ def initialize(data)
10
+ unless data['user'].empty?
11
+ @user = OneLogin::Api::Models::User.new(data['user']) # Partial info
12
+ end
13
+ @state_token = data['state_token'].to_s
14
+ @callback_url = data['callback_url'].to_s
15
+ @devices = []
16
+ unless data['devices'].empty?
17
+ data['devices'].each do |device_data|
18
+ @devices << OneLogin::Api::Models::Device.new(device_data)
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,125 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class User
6
+
7
+ attr_accessor :id, :external_id, :email, :username, :firstname, :lastname, :distinguished_name,
8
+ :phone, :company, :department, :status, :member_of, :samaccountname, :userprincipalname,
9
+ :group_id, :role_ids, :custom_attributes, :openid_name, :locale_code, :comment, :directory_id,
10
+ :manager_ad_id, :trusted_idp_id, :activated_at, :created_at, :updated_at,
11
+ :password_changed_at, :invitation_sent_at, :invalid_login_attempts, :last_login, :locked_until
12
+
13
+ def initialize(data)
14
+ @id = data['id']
15
+ @external_id = data['external_id']
16
+ @email = data['email'].to_s
17
+ @username = data['username'].to_s
18
+ @firstname = data['firstname'].to_s
19
+ @lastname = data['lastname'].to_s
20
+ @distinguished_name = data['distinguished_name'].to_s
21
+ @phone = data['phone'].to_s
22
+ @company = data['company'].to_s
23
+ @department = data['department'].to_s
24
+ @status = data['status']
25
+ @member_of = data['member_of'].to_s
26
+ @samaccountname = data['samaccountname'].to_s
27
+ @userprincipalname = data['userprincipalname'].to_s
28
+ @group_id = data['group_id']? data['group_id'].to_i : nil
29
+ @role_ids = data['role_id']? data['role_id'] : []
30
+ @custom_attributes = data['custom_attributes'] ? data['custom_attributes'] : []
31
+ @openid_name = data['openid_name'].to_s
32
+ @locale_code = data['locale_code'].to_s
33
+ @comment = data['comment'].to_s
34
+ @directory_id = data['directory_id']
35
+ @manager_ad_id = data['manager_ad_id']
36
+ @trusted_idp_id = data['trusted_idp_id']
37
+ @activated_at = data['activated_at']? Time.iso8601(data['activated_at']) : nil
38
+ @created_at = data['created_at']? Time.iso8601(data['created_at']) : nil
39
+ @password_changed_at = data['password_changed_at']? Time.iso8601(data['password_changed_at']) : nil
40
+ @invitation_sent_at = data['invitation_sent_at']? Time.iso8601(data['invitation_sent_at']) : nil
41
+ @invalid_login_attempts = data['invalid_login_attempts']
42
+ @last_login = data['last_login']? Time.iso8601(data['last_login']) : nil
43
+ @locked_until = data['locked_until']? Time.iso8601(data['locked_until']) : nil
44
+ end
45
+
46
+ def get_role_ids
47
+ @role_ids
48
+ end
49
+
50
+ def get_role_ids
51
+ @group_id
52
+ end
53
+
54
+ def get_user_data
55
+ user_data = UserData.new
56
+ user_data.id = @id
57
+ user_data.external_id = @external_id
58
+ user_data.email = @email
59
+ user_data.username = @username
60
+ user_data.firstname = @firstname
61
+ user_data.lastname = @lastname
62
+ user_data.distinguished_name = @distinguished_name
63
+ user_data.phone = @phone
64
+ user_data.company = @company
65
+ user_data.department = @department
66
+ user_data.status = @status
67
+ user_data.member_of = @member_of
68
+ user_data.samaccountname = @samaccountname
69
+ user_data.userprincipalname = @userprincipalname
70
+ user_data.openid_name = @openid_name
71
+ user_data.locale_code = @locale_code
72
+ user_data.directory_id = @directory_id
73
+ user_data.manager_ad_id = @manager_ad_id
74
+ user_data.trusted_idp_id = @trusted_idp_id
75
+ return user_data
76
+ end
77
+
78
+ def get_user_metadata
79
+ user_metadata = UserMetadata.new
80
+ user_metadata.id = @id
81
+ user_metadata.activated_at = @activated_at
82
+ user_metadata.created_at = @created_at
83
+ user_metadata.updated_at = @updated_at
84
+ user_metadata.password_changed_at = @password_changed_at
85
+ user_metadata.invalid_login_attempts = @invalid_login_attempts
86
+ user_metadata.invitation_sent_at = @invitation_sent_at
87
+ user_metadata.last_login = @last_login
88
+ user_metadata.locked_until = @locked_until
89
+ user_metadata.comment = @comment
90
+
91
+ return user_metadata
92
+ end
93
+
94
+ def get_custom_attributes
95
+ @custom_attributes
96
+ end
97
+
98
+ def get_user_params
99
+ return {
100
+ "external_id"=> self.external_id,
101
+ "email"=> self.email,
102
+ "username"=> self.username,
103
+ "firstname"=> self.firstname,
104
+ "lastname"=> self.lastname,
105
+ "distinguished_name"=> self.distinguished_name,
106
+ "phone"=> self.phone,
107
+ "company"=> self.company,
108
+ "department"=> self.department,
109
+ "status"=> self.status,
110
+ "member_of"=> self.member_of,
111
+ "samaccountname"=> self.samaccountname,
112
+ "invalid_login_attempts"=> self.invalid_login_attempts,
113
+ "userprincipalname"=> self.userprincipalname,
114
+ "group_id"=> self.group_id,
115
+ "locale_code"=> self.locale_code,
116
+ "openid_name"=> self.openid_name,
117
+ "directory_id"=> self.directory_id,
118
+ "manager_ad_id"=> self.manager_ad_id,
119
+ "trusted_idp_id"=> self.trusted_idp_id
120
+ }
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,13 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class UserData
6
+
7
+ attr_accessor :id, :external_id, :email, :username, :firstname, :lastname, :distinguished_name,
8
+ :phone, :company, :department, :status, :member_of, :samaccountname, :userprincipalname,
9
+ :openid_name, :locale_code, :directory_id, :manager_ad_id, :trusted_idp_id
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module OneLogin
2
+ module Api
3
+ module Models
4
+
5
+ class UserMetadata
6
+
7
+ attr_accessor :id, :activated_at, :created_at, :updated_at, :password_changed_at,
8
+ :invitation_sent_at, :invalid_login_attempts, :last_login, :locked_until,
9
+ :comment
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ require 'onelogin/api/models/app'
2
+ require 'onelogin/api/models/device'
3
+ require 'onelogin/api/models/event'
4
+ require 'onelogin/api/models/event_type'
5
+ require 'onelogin/api/models/group'
6
+ require 'onelogin/api/models/mfa'
7
+ require 'onelogin/api/models/onelogin_token'
8
+ require 'onelogin/api/models/rate_limit'
9
+ require 'onelogin/api/models/role'
10
+ require 'onelogin/api/models/saml_endpoint_response'
11
+ require 'onelogin/api/models/session_token_info'
12
+ require 'onelogin/api/models/session_token_mfa_info'
13
+ require 'onelogin/api/models/user_data'
14
+ require 'onelogin/api/models/user_metadata'
15
+ require 'onelogin/api/models/user'
16
+ require 'onelogin/api/models/embed_app'
@@ -0,0 +1,65 @@
1
+ module OneLogin
2
+ module Api
3
+ module Util
4
+ # Constants class of the OneLogin's Ruby SDK.
5
+ #
6
+ # This class defines all the constants that will be used
7
+ # in the OneLogin's Ruby SDK.
8
+ #
9
+ module Constants
10
+ # OAuth2 Tokens URLs
11
+ TOKEN_REQUEST_URL = "https://api.%s.onelogin.com/auth/oauth2/token"
12
+ TOKEN_REFRESH_URL = "https://api.%s.onelogin.com/auth/oauth2/token"
13
+ TOKEN_REVOKE_URL = "https://api.%s.onelogin.com/auth/oauth2/revoke"
14
+ GET_RATE_URL = "https://api.%s.onelogin.com/auth/rate_limit"
15
+
16
+ # User URLs
17
+ GET_USERS_URL = "https://api.%s.onelogin.com/api/1/users"
18
+ GET_USER_URL = "https://api.%s.onelogin.com/api/1/users/%s"
19
+ GET_APPS_FOR_USER_URL = "https://api.%s.onelogin.com/api/1/users/%s/apps"
20
+ GET_ROLES_FOR_USER_URL = "https://api.%s.onelogin.com/api/1/users/%s/roles"
21
+ GET_CUSTOM_ATTRIBUTES_URL = "https://api.%s.onelogin.com/api/1/users/custom_attributes"
22
+ CREATE_USER_URL = "https://api.%s.onelogin.com/api/1/users"
23
+ SESSION_LOGIN_TOKEN_URL = "https://api.%s.onelogin.com/api/1/login/auth"
24
+ GET_TOKEN_VERIFY_FACTOR = "https://api.%s.onelogin.com/api/1/login/verify_factor"
25
+ SESSION_API_TOKEN_URL = "https://admin.%s.onelogin.com/session_via_api_token"
26
+ UPDATE_USER_URL = "https://api.%s.onelogin.com/api/1/users/%s"
27
+ DELETE_USER_URL = "https://api.%s.onelogin.com/api/1/users/%s"
28
+ ADD_ROLE_TO_USER_URL = "https://api.%s.onelogin.com/api/1/users/%s/add_roles"
29
+ DELETE_ROLE_TO_USER_URL = "https://api.%s.onelogin.com/api/1/users/%s/remove_roles"
30
+ SET_PW_CLEARTEXT = "https://api.%s.onelogin.com/api/1/users/set_password_clear_text/%s"
31
+ SET_PW_SALT = "https://api.%s.onelogin.com/api/1/users/set_password_using_salt/%s"
32
+ SET_CUSTOM_ATTRIBUTE_TO_USER_URL = "https://api.%s.onelogin.com/api/1/users/%s/set_custom_attributes"
33
+ LOG_USER_OUT_URL = "https://api.%s.onelogin.com/api/1/users/%s/logout"
34
+ LOCK_USER_URL = "https://api.%s.onelogin.com/api/1/users/%s/lock_user"
35
+
36
+ # Role URLs
37
+ GET_ROLES_URL = "https://api.%s.onelogin.com/api/1/roles"
38
+ CREATE_ROLE_URL = "https://api.%s.onelogin.com/api/1/roles"
39
+ GET_ROLE_URL = "https://api.%s.onelogin.com/api/1/roles/%s"
40
+
41
+ # Event URLS
42
+ GET_EVENT_TYPES_URL = "https://api.%s.onelogin.com/api/1/events/types"
43
+ GET_EVENTS_URL = "https://api.%s.onelogin.com/api/1/events"
44
+ CREATE_EVENT_URL = "https://api.%s.onelogin.com/api/1/events"
45
+ GET_EVENT_URL = "https://api.%s.onelogin.com/api/1/events/%s"
46
+
47
+ # Group URLs
48
+ GET_GROUPS_URL = "https://api.%s.onelogin.com/api/1/groups"
49
+ CREATE_GROUP_URL = "https://api.%s.onelogin.com/api/1/groups"
50
+ GET_GROUP_URL = "https://api.%s.onelogin.com/api/1/groups/%s"
51
+
52
+ # SAML Assertion URLs
53
+ GET_SAML_ASSERTION_URL = "https://api.%s.onelogin.com/api/1/saml_assertion"
54
+ GET_SAML_VERIFY_FACTOR = "https://api.%s.onelogin.com/api/1/saml_assertion/verify_factor"
55
+
56
+ # Invite Link URLS
57
+ GENERATE_INVITE_LINK_URL = "https://api.%s.onelogin.com/api/1/invites/get_invite_link"
58
+ SEND_INVITE_LINK_URL = "https://api.%s.onelogin.com/api/1/invites/send_invite_link"
59
+
60
+ # Embed Apps URL
61
+ EMBED_APP_URL = "https://api.onelogin.com/client/apps/embed2"
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,21 @@
1
+ module OneLogin
2
+ module Api
3
+ module Util
4
+ module UrlBuilder
5
+
6
+ # Build the URL of the API endpoint
7
+ #
8
+ # @param base [String] Base of the endpoint
9
+ # @param obj_id [String, nil] Id of the referenced object
10
+ #
11
+ def url_for(base, obj_id=nil)
12
+ if obj_id.nil? || obj_id.to_s.empty?
13
+ base % [@region]
14
+ else
15
+ base % [@region, obj_id]
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ require 'onelogin/api/util/constants'
2
+ require 'onelogin/api/util/url_builder'
3
+
4
+ module OneLogin
5
+ module Api
6
+ module Util
7
+ include OneLogin::Api::Util::Constants
8
+ include OneLogin::Api::Util::UrlBuilder
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ require 'onelogin/api/client'
2
+ require 'onelogin/api/models'