class BeautydateApi::APISession

Attributes

expires_at[RW]
token_key[RW]

Public Class Methods

new(token_key = nil) click to toggle source
# File lib/beautydate_api/api_session.rb, line 5
def initialize(token_key = nil)
  @token_key  = token_key
  @expires_at = extract_expires_at
end

Public Instance Methods

authenticate(authorization, email, password) click to toggle source
# File lib/beautydate_api/api_session.rb, line 10
def authenticate(authorization, email, password)
  request = meta
    .merge(headers(authorization))
    .merge(payload(email, password))

  result = JSON.parse(RestClient::Request.execute request)
  @token_key = result.dig('data', 'attributes', 'token')
  @expires_at = result.dig('data', 'attributes', 'expires_at')

  authenticated?
rescue => e
  raise AuthenticationException
end
authenticated?() click to toggle source
# File lib/beautydate_api/api_session.rb, line 51
def authenticated?
  @token_key.present?
end
headers(authorization) click to toggle source
# File lib/beautydate_api/api_session.rb, line 28
def headers(authorization)
  {
    headers: {
      user_agent: "BeautyDate/#{BeautydateApi::VERSION}; Ruby Client",
      content_type: 'application/vnd.api+json',
      authorization: authorization
    }
  }
end
meta() click to toggle source
# File lib/beautydate_api/api_session.rb, line 24
def meta
  { method: 'POST', url: "#{BeautydateApi.base_uri}/sessions", timeout: 30 }
end
payload(email, password) click to toggle source
# File lib/beautydate_api/api_session.rb, line 38
def payload(email, password)
  {
    payload: {
      data: {
        type: 'sessions',
        attributes: {
          provider: 'b2beauty', email: email, password: password
        }
      }
    }.to_json
  }
end
token() click to toggle source
# File lib/beautydate_api/api_session.rb, line 59
def token
  "Token=#{@token_key}"
end
valid?() click to toggle source
# File lib/beautydate_api/api_session.rb, line 55
def valid?
  authenticated? and Time.now <= Time.at(@expires_at)
end

Private Instance Methods

extract_expires_at() click to toggle source
# File lib/beautydate_api/api_session.rb, line 65
def extract_expires_at
  return if @token_key.nil?
  payload = @token_key.split('.')[1]
  JSON.load(Base64.decode64(payload)).dig('exp')
end