class Actn::Api::Client

Constants

DEFAULT_ACL
TTL

Attributes

secret[RW]

Public Class Methods

find_for_auth(domain, apikey) click to toggle source
# File lib/actn/api/client.rb, line 25
def self.find_for_auth domain, apikey
  client = self.find_by(domain: domain, apikey: apikey)
  client
end

Public Instance Methods

auth_by_secret(secret) click to toggle source
# File lib/actn/api/client.rb, line 30
def auth_by_secret secret
  self.secret == secret
end
auth_by_session(session_id) click to toggle source
# File lib/actn/api/client.rb, line 34
def auth_by_session session_id
  return unless client_session = self.sessions[session_id]
  if BCrypt::Password.new(client_session[0]) == session_id
    if Time.now.to_f - client_session[1] > TTL
      invalidated = self.update(sessions: self.sessions.tap{|s| s.delete session_id })
      return false
    else
      return true
    end
  end
end
can?(resource) click to toggle source
# File lib/actn/api/client.rb, line 64
def can? resource
  return if self.acl['disallow'].include?("*") || self.acl['disallow'].include?(resource)
  self.acl['allow'].include?("*") || self.acl['allow'].include?(resource)
end
credentials() click to toggle source
# File lib/actn/api/client.rb, line 54
def credentials
  {'apikey' => self.apikey, 'secret' => @secret}
end
reset_credentials!() click to toggle source
# File lib/actn/api/client.rb, line 58
def reset_credentials!
  reset_credentials
  _update
  self
end
set_session(session_id) click to toggle source
# File lib/actn/api/client.rb, line 46
def set_session session_id
  self.update( { sessions: {session_id => [BCrypt::Password.create(session_id), Time.now.to_f] }} )
end
to_json(options = {}) click to toggle source
Calls superclass method
# File lib/actn/api/client.rb, line 69
def to_json options = {}
  super(options.merge(methods: [:credentials], exclude: [:sessions, :secret_hash]))
end

Private Instance Methods

reset_credentials() click to toggle source
# File lib/actn/api/client.rb, line 82
def reset_credentials
  self.apikey = SecureRandom.hex
  @secret = SecureRandom.hex
  @hash = BCrypt::Password.create(@secret)
  self.secret_hash = @hash
end
set_defaults() click to toggle source
# File lib/actn/api/client.rb, line 75
def set_defaults 
  self.domain = self.domain.to_domain        
  self.sessions ||= {}
  self.acl ||= DEFAULT_ACL
  reset_credentials unless self.persisted?
end