class Oktakit::Client

Constants

MIDDLEWARE

Default Faraday middleware stack

RACK_BUILDER_CLASS

In Faraday 0.9, Faraday::Builder was renamed to Faraday::RackBuilder

Attributes

last_response[R]

Public Class Methods

new(token:, organization: nil, api_endpoint: nil) click to toggle source
# 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

api_endpoint() click to toggle source
# 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
delete(url, options = {}) click to toggle source

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
get(url, options = {}) click to toggle source

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
head(url, options = {}) click to toggle source

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
patch(url, options = {}) click to toggle source

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
post(url, options = {}) click to toggle source

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
put(url, options = {}) click to toggle source

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

absolute_to_relative_url(next_ref) click to toggle source
# 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
request(method, path, data:, query:, headers:, accept:, content_type:, paginate: false) click to toggle source
# 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
sawyer_agent() click to toggle source
# 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
sawyer_options() click to toggle source
# File lib/oktakit/client.rb, line 193
def sawyer_options
  {
    links_parser: Sawyer::LinkParsers::Simple.new,
    faraday: Faraday.new(builder: MIDDLEWARE),
  }
end