class OktaClient
Attributes
access_token[RW]
client_id[RW]
org_url[RW]
pagination[RW]
private_key[RW]
scopes[RW]
token[RW]
Public Class Methods
new(hash)
click to toggle source
# File lib/oktennyx.rb, line 11 def initialize(hash) self.org_url = hash[:org_url] self.token = hash[:token] self.client_id = hash[:client_id] self.scopes = hash[:scopes] self.private_key = hash[:private_key] self.access_token = nil check_authz_type end
Public Instance Methods
activate_factor(user_id, factor_id, activation_profile)
click to toggle source
# File lib/oktennyx.rb, line 195 def activate_factor(user_id, factor_id, activation_profile) url = URI("#{self.org_url}/api/v1/users/#{user_id}/factors/#{factor_id}/lifecycle/activate") self.http_req(url, 'POST', activation_profile.to_json) end
add_user_to_group(user_id, group_id)
click to toggle source
# File lib/oktennyx.rb, line 224 def add_user_to_group(user_id, group_id) url = URI("#{self.org_url}/api/v1/groups/#{group_id}/users/#{user_id}") self.http_req(url, 'PUT', {}) end
assign_user_to_app(user_id, user_profile, app_id)
click to toggle source
# File lib/oktennyx.rb, line 253 def assign_user_to_app(user_id, user_profile, app_id) url = URI("#{self.org_url}/api/v1/apps/#{app_id}/users") user = { id: user_id, } self.http_req(url, 'POST', user.to_json) end
base64_to_long(data)
click to toggle source
# File lib/oktennyx.rb, line 63 def base64_to_long(data) decoded_with_padding = Base64.urlsafe_decode64(data) + Base64.decode64('==') decoded_with_padding.to_s.unpack('C*').map do |byte| self.to_hex(byte) end.join.to_i(16) end
check_authz_type()
click to toggle source
# File lib/oktennyx.rb, line 126 def check_authz_type if self.private_key self.get_access_token(self.private_key, self.client_id, self.scopes) end end
create_application(app_profile)
click to toggle source
# File lib/oktennyx.rb, line 248 def create_application(app_profile) url = URI("#{self.org_url}/api/v1/apps") self.http_req(url, 'POST', app_profile.to_json) end
create_group(profile)
click to toggle source
# File lib/oktennyx.rb, line 219 def create_group(profile) url = URI("#{self.org_url}/api/v1/groups") self.http_req(url, 'POST', profile.to_json) end
create_user(profile)
click to toggle source
# File lib/oktennyx.rb, line 159 def create_user(profile) url = URI("#{self.org_url}/api/v1/users") self.http_req(url, 'POST', profile.to_json) end
deactivate_user(user_id)
click to toggle source
# File lib/oktennyx.rb, line 170 def deactivate_user(user_id) url = URI("#{self.org_url}/api/v1/users/#{user_id}/lifecycle/deactivate") self.http_req(url, 'POST', {}) end
delete_user(user_id)
click to toggle source
# File lib/oktennyx.rb, line 175 def delete_user(user_id) url = URI("#{self.org_url}/api/v1/users/#{user_id}") self.http_req(url, 'DELETE', {}) end
enroll_factor(user_id, factor_profile)
click to toggle source
# File lib/oktennyx.rb, line 190 def enroll_factor(user_id, factor_profile) url = URI("#{self.org_url}/api/v1/users/#{user_id}/factors") self.http_req(url, 'POST', factor_profile.to_json) end
get_access_token(private_key, client_id, scopes)
click to toggle source
# File lib/oktennyx.rb, line 70 def get_access_token(private_key, client_id, scopes) scopes_string = '' scopes.each {|scope| scopes_string += "#{scope} "} jwks = private_key jwtheader = { 'alg': 'RS256' } jwtpayload = { aud: "#{self.org_url}/oauth2/v1/token", exp: (Time.now + 1*60*60).utc.strftime('%s'), iss: client_id, sub: client_id } jwtheaderJSON = jwtheader.to_json jwtheaderUTF = jwtheaderJSON.encode('UTF-8') tokenheader = Base64.urlsafe_encode64(jwtheaderUTF) jwtpayloadJSON = jwtpayload.to_json jwtpayloadUTF = jwtpayloadJSON.encode('UTF-8') tokenpayload = Base64.urlsafe_encode64(jwtpayloadUTF) signeddata = tokenheader + "." + tokenpayload signature = '' if private_key.class == Hash key = OpenSSL::PKey::RSA.new 2048 exponent = private_key[:keys][0][:e] modulus = private_key[:keys][0][:n] key.set_key(self.base64_to_long(modulus), self.base64_to_long(exponent), self.base64_to_long(jwks[:keys][0][:d])) signature = Base64.urlsafe_encode64(key.sign(OpenSSL::Digest::SHA256.new, signeddata)) elsif private_key.class == String priv = private_key key = OpenSSL::PKey::RSA.new(priv) signature = Base64.urlsafe_encode64(key.sign(OpenSSL::Digest::SHA256.new, signeddata)) end client_secret_jwt = signeddata + '.' + signature url = URI("#{self.org_url}/oauth2/v1/token") https = Net::HTTP.new(url.host, url.port); https.use_ssl = true request = Net::HTTP::Post.new(url) request['Accept'] = 'application/json' request['Content-Type'] = 'application/x-www-form-urlencoded' request.body = "grant_type=client_credentials&scope=#{scopes_string}&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=#{client_secret_jwt}" response = https.request(request) self.access_token = JSON.parse(response.read_body)['access_token'] end
get_application(app_id)
click to toggle source
# File lib/oktennyx.rb, line 243 def get_application(app_id) url = URI("#{self.org_url}/api/v1/apps/#{app_id}") self.http_req(url, 'GET', {}) end
get_applications(**params)
click to toggle source
# File lib/oktennyx.rb, line 236 def get_applications(**params) query_params = self.handle_params(params) url = URI("#{self.org_url}/api/v1/apps/#{query_params}") apps_collection = Collection.new(self, self.http_req(url, 'GET', {})) return apps_collection end
get_group(group_id)
click to toggle source
# File lib/oktennyx.rb, line 214 def get_group(group_id) url = URI("#{self.org_url}/api/v1/groups/#{group_id}") self.http_req(url, 'GET', {}) end
get_groups(**params)
click to toggle source
# File lib/oktennyx.rb, line 207 def get_groups(**params) query_params = self.handle_params(params) url = URI("#{self.org_url}/api/v1/groups/#{query_params}") groups_collection = Collection.new(self, self.http_req(url, 'GET', {})) return groups_collection end
get_logs(**params)
click to toggle source
# File lib/oktennyx.rb, line 263 def get_logs(**params) query_params = self.handle_params(params) url = URI("#{self.org_url}/api/v1/logs/#{query_params}") logs_collection = Collection.new(self, self.http_req(url, 'GET', {})) return logs_collection end
get_user(user_id)
click to toggle source
# File lib/oktennyx.rb, line 154 def get_user(user_id) url = URI("#{self.org_url}/api/v1/users/#{user_id}") self.http_req(url, 'GET', {})[0] end
get_user_factors(user_id)
click to toggle source
# File lib/oktennyx.rb, line 185 def get_user_factors(user_id) url = URI("#{self.org_url}/api/v1/users/#{user_id}/factors") self.http_req(url, 'GET', {}) end
get_user_groups(user_id)
click to toggle source
# File lib/oktennyx.rb, line 180 def get_user_groups(user_id) url = URI("#{self.org_url}/api/v1/users/#{user_id}/groups") self.http_req(url, 'GET', {}) end
get_users(**params)
click to toggle source
# File lib/oktennyx.rb, line 147 def get_users(**params) query_params = self.handle_params(params) url = URI("#{self.org_url}/api/v1/users/#{query_params}") users_collection = Collection.new(self, self.http_req(url, 'GET', {})) return users_collection end
handle_params(params)
click to toggle source
# File lib/oktennyx.rb, line 132 def handle_params(params) query_params = '' if not params.empty? query_params += '?' for param_key, param_value in params query_params += "#{param_key}=#{param_value}&" end end return query_params end
http_req(url, http_method, body)
click to toggle source
# File lib/oktennyx.rb, line 21 def http_req(url, http_method, body) https = Net::HTTP.new(url.host, url.port); https.use_ssl = true if http_method == 'GET' request = Net::HTTP::Get.new(url) elsif http_method == 'PUT' request = Net::HTTP::Put.new(url) elsif http_method == 'POST' request = Net::HTTP::Post.new(url) elsif http_method == 'DELETE' request = Net::HTTP::Delete.new(url) else return 405 end request['Accept'] = 'application/json' request['Content-Type'] = 'application/json' if self.access_token request['Authorization'] = "Bearer #{self.access_token}" else request['Authorization'] = "SSWS #{self.token}" end if not body.empty? request.body = body end response = https.request(request) if response.code == '204' return response.code else return JSON.parse(response.read_body), response['Link'] end end
remove_user_from_group(user_id, group_id)
click to toggle source
# File lib/oktennyx.rb, line 229 def remove_user_from_group(user_id, group_id) url = URI("#{self.org_url}/api/v1/groups/#{group_id}/users/#{user_id}") self.http_req(url, 'DELETE', {}) end
to_hex(int)
click to toggle source
# File lib/oktennyx.rb, line 59 def to_hex(int) int < 16 ? '0' + int.to_s(16) : int.to_s(16) end
update_user(user_id, profile)
click to toggle source
# File lib/oktennyx.rb, line 164 def update_user(user_id, profile) url = URI("#{self.org_url}/api/v1/users/#{user_id}") new_profile = {profile: profile} self.http_req(url, 'PUT', new_profile.to_json) end
verify_factor(user_id, factor_id, verify_profile)
click to toggle source
# File lib/oktennyx.rb, line 200 def verify_factor(user_id, factor_id, verify_profile) url = URI("#{self.org_url}/api/v1/users/#{user_id}/factors/#{factor_id}/verify") self.http_req(url, 'POST', verify_profile.to_json) end