Module: Singularity

Defined in:
lib/singularity.rb,
lib/singularity/engine.rb,
lib/singularity/version.rb,
lib/singularity/password_hash.rb

Defined Under Namespace

Classes: Engine, PasswordHash

Constant Summary collapse

VERSION =
"0.0.7"

Class Method Summary collapse

Class Method Details

.cattr_accessor(attribute, default = nil) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/singularity.rb', line 8

def self.cattr_accessor(attribute, default = nil)
  class_variable_set("@@#{attribute}", default)
  class_eval "    def self.\#{attribute}=(value)\n      @@\#{attribute} = value\n    end\n\n    def self.\#{attribute}\n      @@\#{attribute}\n    end\n  EOS\nend\n"

.destroy_session(*ids) ⇒ Object



74
75
76
# File 'lib/singularity.rb', line 74

def destroy_session(*ids)
  redis.del( *ids.map{ |id| session_key(id) } )
end

.destroy_token(*tokens) ⇒ Object



78
79
80
# File 'lib/singularity.rb', line 78

def destroy_token(*tokens)
  redis.del( *tokens.map{ |t| token_key(t) } )
end

.fetch_key_from_session(session_id, key) ⇒ Object



66
67
68
# File 'lib/singularity.rb', line 66

def fetch_key_from_session(session_id, key)
  redis.hget session_key(session_id), key if session_id
end

.find_session_id_by_token(session_token) ⇒ Object



60
61
62
63
64
# File 'lib/singularity.rb', line 60

def find_session_id_by_token(session_token)
  session_id = redis.get token_key(session_token)
  return nil if session_id.nil?
  redis.exists(session_key(session_id)) ? session_id : nil
end

.generate_session_token(session_id, session, options = {}) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/singularity.rb', line 30

def generate_session_token(session_id, session, options = {})
  if session.key?("_token_expires") && session["_token_expires"].to_i > Time.now.to_i
    unless session.nil? || session["_session_id"] != session_id
      return session["_token"]
    else
      redis.del token_key(session['_token'])
    end
  end

  session_token    = SecureRandom.hex(32)
  token_expiration = options.fetch(:expires){ redis.ttl session_key(session_id) }
  token_expiration = 1_800 if token_expiration < 1

  redis.setex token_key(session_token), token_expiration, session_id

  session["_session_id"]    = session_id
  session["_token"]         = session_token
  session["_token_expires"] = Time.now.to_i + token_expiration

  session_token
end

.redisObject



82
83
84
# File 'lib/singularity.rb', line 82

def redis
  @@redis ||= Redis::NativeHash.redis # JUNK
end

.session_key(id) ⇒ Object



52
53
54
# File 'lib/singularity.rb', line 52

def session_key(id)
  Singularity.session_prefix ? "#{ Singularity.session_prefix }:#{ id }" : id
end

.store_key_in_session(session_id, key, value) ⇒ Object



70
71
72
# File 'lib/singularity.rb', line 70

def store_key_in_session(session_id, key, value)
  redis.hset session_key(session_id), key, value if session_id
end

.token_key(token) ⇒ Object



56
57
58
# File 'lib/singularity.rb', line 56

def token_key(token)
  "#{ Singularity.token_prefix }:#{ token }"
end