Sha256: 834249d31b0292e6d4f9d86556098d3a1fc91d3a28e8be4d4b3f6a835f74e3ca

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 KB

Contents

require 'securerandom'
require 'bcrypt'

module Alfa
  class << self
    attr_accessor :GROUPS
  end

  class GuestUser
    def self.grants
      @grants ||= Alfa.GROUPS[:public]
    end

    def self.grant?(name)
      grants.include?(name.to_sym)
    end

    def self.groups
      []
    end

    def self.group?(name)
      groups.include?(name.to_sym)
    end

    def self.logged?
      false
    end

    def [](key)
      nil
    end

    def method_missing(*o)
      nil
    end
  end


  class User
    def initialize(object)
      @object = object
    end

    def grants
      (groups + [:public]).map{|g| Alfa.GROUPS[g] || []}.flatten
    end

    def grant?(name)
      grants.include?(name.to_sym)
    end

    # @return Array
    def groups
      @object.groups.map{|s| s.to_s.strip.to_sym}
    end

    def group?(name)
      groups.include?(name.to_sym)
    end

    def logged?
      true
    end

    def [](key)
      @object[key]
    end

    def method_missing(*o)
      @object.send(*o)
    end

    def self.method_missing(*o)
      @object.class.send(*o)
    end
  end

  # Prepend this module in User model in your Project
  # Example:
  #   class User < Sequel::Model(DB::Main[:users])
  #     prepend Alfa::UserModule
  #   end
  module UserModule
    def password=(p)
      self.salt = SecureRandom.hex(5)
      self.passhash = BCrypt::Password.create("#{self.salt}#{p}")
    end

    def password_valid?(p)
      BCrypt::Password.new(self.passhash) == "#{self.salt}#{p}"
    end

    def groups=(g)
      super(Array(g))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
alfa-0.0.7.pre lib/alfa/user.rb