require 'authenticated_client' require 'json' module AuthTokenStoreProvider class Client def initialize(configuration) @configuration = configuration validate_configuration end def add(token_identifier:, authenticated_identifier:, token_issue_time:, token_expiry_time:, flow_identifier: nil) request_body = { 'authenticated_identifier' => authenticated_identifier, 'token_identifier' => token_identifier, 'token_issue_time' => token_issue_time, 'token_expiry_time' => token_expiry_time } response = perform_request(resource: 'add', body: request_body, flow_identifier: flow_identifier) 'success' == JSON.parse(response.body)['status'] end def remove(token_identifier:, flow_identifier: nil) request_body = { 'token_identifier' => token_identifier } response = perform_request(resource: 'remove', body: request_body, flow_identifier: flow_identifier) 'success' == JSON.parse(response.body)['status'] end def token_exist?(token_identifier:, authenticated_identifier:, token_issue_time:, token_expiry_time:, flow_identifier: nil) request_body = { 'authenticated_identifier' => authenticated_identifier, 'token_identifier' => token_identifier, 'token_issue_time' => token_issue_time, 'token_expiry_time' => token_expiry_time } response = perform_request(resource: 'check_existance', body: request_body, flow_identifier: flow_identifier) JSON.parse(response.body)['data']['token_exist'] end def remove_tokens_for(authenticated_identifier:, flow_identifier: nil) raise RuntimeError, 'Not implemented' end def list_tokens_for(authenticated_identifier:, flow_identifier: nil) raise RuntimeError, 'Not implemented' end private def validate_configuration raise "element 'service_url' not in configuration" unless @configuration['service_url'] end def perform_request(resource:, body:, flow_identifier:) client = AuthenticatedClient::Client.new client.url = "#{@configuration['service_url']}/#{resource}" client.token = @configuration['auth_token'] client.verb = :post client.parameters = { 'flow_identifier' => flow_identifier } client.body = body if body client.auditing = nil response = client.request end end end