class Oktakit::Client
Constants
- MIDDLEWARE
Default Faraday middleware stack
- RACK_BUILDER_CLASS
In Faraday 0.9, Faraday::Builder was renamed to Faraday::RackBuilder
Attributes
Public Class Methods
# File lib/oktakit/client.rb, line 34 def initialize(token:, organization: nil, api_endpoint: nil) if organization.nil? && api_endpoint.nil? raise ArgumentError, "Please provide either the organization or the api_endpoint argument" end @token = token @organization = organization @api_endpoint = api_endpoint end
Public Instance Methods
# File lib/oktakit/client.rb, line 44 def api_endpoint if @api_endpoint @api_endpoint else "https://#{@organization.downcase}.okta.com/api/v1" end end
Make a HTTP DELETE request
@param url [String] The path, relative to {#api_endpoint} @param options [Hash] Optional. Query params for request @param options [Hash] Optional. Header params for the request. @param options [String] Optional. The content type to accept. Default application/json @param options [String] Optional. The content type for the request. Default application/json @param options [Hash] Optional. Body params for request. @return [Sawyer::Resource]
# File lib/oktakit/client.rb, line 144 def delete(url, options = {}) request :delete, url, query: options.delete(:query), headers: options.delete(:headers), accept: options.delete(:accept), content_type: options.delete(:content_type), data: options end
Make a HTTP GET request
@param url [String] The path, relative to {#api_endpoint} @param options [Hash] Optional. Query params for request @param options [Hash] Optional. Header params for the request. @param options [String] Optional. The content type to accept. Default application/json @param options [String] Optional. The content type for the request. Default application/json @param options [Boolean] Optional. If true, will auto-paginate Okta's API responses. @param options [Hash] Optional. Body params for request. @return [Sawyer::Resource]
# File lib/oktakit/client.rb, line 62 def get(url, options = {}) should_paginate = options.delete(:paginate) request_options = { query: options.delete(:query), headers: options.delete(:headers), accept: options.delete(:accept), content_type: options.delete(:content_type), paginate: should_paginate, data: options } resp, status, next_page = request :get, url, **request_options # If request succeeded and we should paginate, then automatically traverse all next_pages if status == 200 && should_paginate all_objs = [resp] while next_page resp, status, next_page = request :get, next_page, **request_options break unless status == 200 # Return early if page request fails all_objs << resp end resp = all_objs.flatten end [resp, status] end
Make a HTTP HEAD request
@param url [String] The path, relative to {#api_endpoint} @param options [Hash] Optional. Query params for request @param options [Hash] Optional. Header params for the request. @param options [String] Optional. The content type to accept. Default application/json @param options [String] Optional. The content type for the request. Default application/json @param options [Hash] Optional. Body params for request. @return [Sawyer::Resource]
# File lib/oktakit/client.rb, line 159 def head(url, options = {}) request :head, url, query: options.delete(:query), headers: options.delete(:headers), accept: options.delete(:accept), content_type: options.delete(:content_type), data: options end
Make a HTTP PATCH request
@param url [String] The path, relative to {#api_endpoint} @param options [Hash] Optional. Query params for request @param options [Hash] Optional. Header params for the request. @param options [String] Optional. The content type to accept. Default application/json @param options [String] Optional. The content type for the request. Default application/json @param options [Hash] Optional. Body params for request. @return [Sawyer::Resource]
# File lib/oktakit/client.rb, line 129 def patch(url, options = {}) request :patch, url, query: options.delete(:query), headers: options.delete(:headers), accept: options.delete(:accept), content_type: options.delete(:content_type), data: options end
Make a HTTP POST request
@param url [String] The path, relative to {#api_endpoint} @param options [Hash] Optional. Query params for request @param options [Hash] Optional. Header params for the request. @param options [String] Optional. The content type to accept. Default application/json @param options [String] Optional. The content type for the request. Default application/json @param options [Hash] Optional. Body params for request. @return [Sawyer::Resource]
# File lib/oktakit/client.rb, line 99 def post(url, options = {}) request :post, url, query: options.delete(:query), headers: options.delete(:headers), accept: options.delete(:accept), content_type: options.delete(:content_type), data: options end
Make a HTTP PUT request
@param url [String] The path, relative to {#api_endpoint} @param options [Hash] Optional. Query params for request @param options [Hash] Optional. Header params for the request. @param options [String] Optional. The content type to accept. Default application/json @param options [String] Optional. The content type for the request. Default application/json @param options [Hash] Optional. Body params for request. @return [Sawyer::Resource]
# File lib/oktakit/client.rb, line 114 def put(url, options = {}) request :put, url, query: options.delete(:query), headers: options.delete(:headers), accept: options.delete(:accept), content_type: options.delete(:content_type), data: options end
Private Instance Methods
# File lib/oktakit/client.rb, line 200 def absolute_to_relative_url(next_ref) return unless next_ref next_ref.href.sub(api_endpoint, '') end
# File lib/oktakit/client.rb, line 169 def request(method, path, data:, query:, headers:, accept:, content_type:, paginate: false) options = {} options[:query] = query || {} options[:headers] = headers || {} options[:headers][:accept] = accept if accept options[:headers][:content_type] = content_type if content_type uri = URI::DEFAULT_PARSER.escape("/api/v1" + path.to_s) @last_response = resp = sawyer_agent.call(method, uri, data, options) response = [resp.data, resp.status] response << absolute_to_relative_url(resp.rels[:next]) if paginate response end
# File lib/oktakit/client.rb, line 184 def sawyer_agent @agent ||= Sawyer::Agent.new(api_endpoint, sawyer_options) do |http| http.headers[:accept] = 'application/json' http.headers[:content_type] = 'application/json' http.headers[:user_agent] = "Oktakit v#{Oktakit::VERSION}" http.authorization 'SSWS ', @token end end
# File lib/oktakit/client.rb, line 193 def sawyer_options { links_parser: Sawyer::LinkParsers::Simple.new, faraday: Faraday.new(builder: MIDDLEWARE), } end