Sha256: c5798fdc1478d5c81e628b2047789834ed9b6aeadfafb155961d75375b69828f

Contents?: true

Size: 1.73 KB

Versions: 152

Compression:

Stored size: 1.73 KB

Contents

require 'json'
require 'json/jwt'

module ForestLiana
  class OidcDynamicClientRegistrator
    def self.is_standard_body_error(response)
      result = false
      begin
        jsonbody

        if (!response['body'].is_a?(Object) || response['body'].is_a?(StringIO)) 
          jsonbody = JSON.parse(response['body'])
        else 
          jsonbody = response['body']
        end

        result = jsonbody['error'].is_a?(String) && jsonbody['error'].length > 0

        if (result) 
          response['body'] = jsonbody 
        end
      rescue
        {}
      end

      return result
    end

    def self.process_response(response, expected = {})
      statusCode = expected[:statusCode] || 200
      body = expected[:body] || true

      if (response.code.to_i != statusCode.to_i)
        if (is_standard_body_error(response))
          raise response['body']
        end

        raise ForestLiana::MESSAGES[:SERVER_TRANSACTION][:REGISTRATION_FAILED] + response.body
      end

      if (body && !response.body)
        raise ForestLiana::MESSAGES[:SERVER_TRANSACTION][:REGISTRATION_FAILED] + response.body
      end

      return response.body
    end

    def self.authorization_header_value(token, tokenType = 'Bearer')
      return "#{tokenType} #{token}"
    end

    def self.register(metadata)
      initial_access_token = ForestLiana.env_secret

      response = ForestLiana::ForestApiRequester.post(
        metadata[:registration_endpoint],
        body: metadata,
        headers: initial_access_token ? {
          Authorization: authorization_header_value(initial_access_token),
        } : {},
      )

      responseBody = process_response(response, { :statusCode => 201, :bearer => true })
      return JSON.parse(responseBody)
    end
  end
end

Version data entries

152 entries across 152 versions & 1 rubygems

Version Path
forest_liana-9.3.14 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.13 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.12 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.11 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.10 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.9 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.8 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.7 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.6 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.3 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.2 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-8.3.1 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.1 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.3.0 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-8.3.0 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.2.3 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.2.2 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.2.1 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.2.0 app/services/forest_liana/oidc_dynamic_client_registrator.rb
forest_liana-9.1.10 app/services/forest_liana/oidc_dynamic_client_registrator.rb