Sha256: dcbaa22f9e8c2d706812aefc1e05787efc6effbee603cf2029013670ee74156b

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

require 'quiz_api_client/http_client'
require 'quiz_api_client/services/jwt_service'

module QuizApiClient::Services
  class BaseApiService
    attr_reader :quiz_api_host, :quiz_api_secret_for_jwt, :protocol, :errors

    def initialize(quiz_api_host:, quiz_api_secret_for_jwt:, protocol: 'https')
      @quiz_api_host = quiz_api_host
      @quiz_api_secret_for_jwt = quiz_api_secret_for_jwt
      @protocol = protocol
      @errors = []
    end

    private

    def token_for_api(default_token = nil, scope = nil, resource_id = nil)
      return default_token unless default_token.nil?
      generate_token(scope: scope, resource_id: resource_id)
    end

    def quiz_api_uri
      uri = URI::HTTP.build(host: quiz_api_host)
      uri.scheme = protocol
      uri.to_s
    end

    def generate_token(scope:, exp: nil, resource_id: nil)
      jwt_service.grant_permission(scope: scope, exp: exp, resource_id: resource_id)
    end

    def jwt_service
      QuizApiClient::Services::JwtService.new(
        host: quiz_api_host,
        jwt_secret: quiz_api_secret_for_jwt,
        protocol: protocol
      )
    end

    def quiz_api_client(token:)
      QuizApiClient::HttpClient.new(
        uri: quiz_api_uri,
        jwt: token
      )
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
quiz_api_client-0.1.1 lib/quiz_api_client/services/base_api_service.rb