Module: JunglePath::API::Helpers::AuthLocalUser
- Defined in:
- lib/jungle_path/api/helpers/auth_local_user.rb
Defined Under Namespace
Classes: Identity
Instance Method Summary collapse
-
#authenticate(no_cache = false) ⇒ Object
If you are using this module, make sure your user table has these columns: id, user_name, phone, sms_verification_code, hash, key, role.
- #authenticate_assumed_identity(identity, no_cache = false) ⇒ Object
- #authenticate_identity(identity, no_cache = false) ⇒ Object
- #authenticate_user(user_name, password, no_cache = false) ⇒ Object
- #basic_authentication(remote_user, remote_password, no_cache = false) ⇒ Object
- #current_auth ⇒ Object
- #current_identity ⇒ Object
- #current_key ⇒ Object
- #current_query_filters ⇒ Object
- #current_role ⇒ Object
- #current_roles ⇒ Object
- #current_user ⇒ Object
- #get_assumed_user(user_name, no_cache = false) ⇒ Object
- #get_auth(roles, no_cache = false) ⇒ Object
- #get_query_filters(no_cache = false) ⇒ Object
- #get_roles(key, no_cache = false) ⇒ Object
- #get_user(user_name, password, no_cache = false) ⇒ Object
- #parse_identities(remote_user, remote_password) ⇒ Object
- #set_current_auth(auth) ⇒ Object
- #set_current_identity(identity, no_cache = false) ⇒ Object
- #set_current_query_filters(no_cache = false) ⇒ Object
- #set_current_roles(roles) ⇒ Object
- #set_current_user(user) ⇒ Object
- #user_name_is_key?(user_name) ⇒ Boolean
- #valid_user?(user, password) ⇒ Boolean
- #zget_roles(no_cache = false) ⇒ Object
Instance Method Details
#authenticate(no_cache = false) ⇒ Object
If you are using this module, make sure your user table has these columns:
id,
user_name,
phone,
sms_verification_code,
hash,
key,
role
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 20 def authenticate no_cache=false puts "AuthLocalUser.authenticate !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" remote_user = request.env['REMOTE_USER'] remote_password = request.env['REMOTE_PASSWORD'] puts "remote_user: #{remote_user}." puts "remote_password: #{remote_password}." is_authenticated = basic_authentication(remote_user, remote_password, no_cache) unless is_authenticated # force no_cache = true halt 401 unless basic_authentication(remote_user, remote_password, true) end #puts "content-type: #{request.content_type}." request.body.rewind #puts "body:\n#{request.body.read}." #puts "params:\n#{params}." end |
#authenticate_assumed_identity(identity, no_cache = false) ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 78 def authenticate_assumed_identity identity, no_cache=false id = identity.dup id.user = get_assumed_user(identity.user_name, no_cache) id.key = id.user id.valid = (id.user and id.user.is_valid) id end |
#authenticate_identity(identity, no_cache = false) ⇒ Object
70 71 72 73 74 75 76 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 70 def authenticate_identity identity, no_cache=false id = identity.dup id.user = get_user(identity.user_name, identity.remote_password, no_cache) id.key = id.user id.valid = (id.user and id.user.is_valid) id end |
#authenticate_user(user_name, password, no_cache = false) ⇒ Object
86 87 88 89 90 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 86 def authenticate_user user_name, password, no_cache=false user = get_user(user_name, password, no_cache) set_current_user(user) valid = (user and user.is_valid) end |
#basic_authentication(remote_user, remote_password, no_cache = false) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 37 def basic_authentication remote_user, remote_password, no_cache=false identity, assume_identity = parse_identities(remote_user, remote_password) puts "identity: #{identity}" puts "assume_identity: #{assume_identity}" #puts "APIHelpers::AuthLocalUser.#{__method__}." #if user_name and user_name.start_with?("sk_") #valid = authenticate_user(auth.user_name, password, no_cache) valid = false identity = authenticate_identity(identity, no_cache) if identity.valid identity.roles = get_roles(identity.key, no_cache) identity.auth = get_auth(identity.roles, no_cache) #set_current_roles roles #set_current_auth if assume_identity puts "assume_identity..." assume_identity = authenticate_assumed_identity(assume_identity, no_cache) assume_identity.roles = get_roles(assume_identity.key, no_cache) assume_identity.auth = get_auth(assume_identity.roles, no_cache) valid = assume_identity.valid set_current_identity assume_identity, no_cache else valid = identity.valid set_current_identity identity, no_cache end else #set_current_roles nil set_current_identity identity, no_cache end valid end |
#current_auth ⇒ Object
274 275 276 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 274 def current_auth @current_auth end |
#current_identity ⇒ Object
254 255 256 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 254 def current_identity @current_identity end |
#current_key ⇒ Object
262 263 264 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 262 def current_key @current_user end |
#current_query_filters ⇒ Object
278 279 280 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 278 def current_query_filters @current_query_filters end |
#current_role ⇒ Object
270 271 272 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 270 def current_role @current_role end |
#current_roles ⇒ Object
266 267 268 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 266 def current_roles @current_roles end |
#current_user ⇒ Object
258 259 260 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 258 def current_user @current_user end |
#get_assumed_user(user_name, no_cache = false) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 92 def get_assumed_user user_name, no_cache=false cache_key = "#{user_name}.password" user = cache[cache_key] if user == nil or no_cache lowercase_user_name = nil lowercase_user_name = user_name.downcase if user_name ds = db.base['select id, user_name, name, first_name, last_name, phone, email, hash, key, active from "user" where user_name = ? or email = ?', lowercase_user_name, lowercase_user_name] hash = ds.first #puts "get_user: hash: #{hash}." user = Schema::User.new(hash, false) if hash halt 401, "Unauthorized" unless user halt 401, "Unauthorized: user #{user.user_name} is not marked as active." unless user.active user.is_valid = true cache[cache_key] = user if user end user end |
#get_auth(roles, no_cache = false) ⇒ Object
188 189 190 191 192 193 194 195 196 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 188 def get_auth roles, no_cache=false cache_key = "#{roles}_auth" puts "get_auth cache_key: #{cache_key}." auth = cache.get(cache_key) if auth == nil or no_cache auth = JunglePath::Authorization::Filter.new roles, Schema::Base.models, configatron.application., configatron.application.role_restrictions, configatron.application.role_schema_filters, configatron.schema.filters end auth end |
#get_query_filters(no_cache = false) ⇒ Object
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 198 def get_query_filters no_cache=false # get filters from query_filter table. return nil unless current_key cache_key = "#{current_key.id}_query_filters" query_filters = cache.get(cache_key) if query_filters == nil or no_cache query_filters = [] #filters = SQL::QueryFilter.by_key(db, current_key) #filters.each do |filter| # query_filters << Query::Filter.new(filter[:base_table_name], filter[:sub_select]) #end if app_defined_query_filters app_defined_query_filters.each do |filter| query_filters << filter end end cache.set cache_key, query_filters end query_filters end |
#get_roles(key, no_cache = false) ⇒ Object
166 167 168 169 170 171 172 173 174 175 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 166 def get_roles key, no_cache=false return nil unless key cache_key = "#{key.id}_roles" roles = cache.get(cache_key) if roles == nil or no_cache roles = SQL::Role.by_user(db, key) cache.set cache_key, roles if roles end roles end |
#get_user(user_name, password, no_cache = false) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 110 def get_user user_name, password, no_cache=false # is this username/password valid? cache_key = "#{user_name}.#{password}" user = cache[cache_key] if user == nil or no_cache #assumed_user = nil ds = nil if user_name_is_key? user_name ds = db.base['select id, user_name, name, first_name, last_name, phone, email, hash, key, active from "user" where key = ?', user_name.downcase] else lowercase_user_name = nil lowercase_user_name = user_name.downcase if user_name ds = db.base['select id, user_name, name, first_name, last_name, phone, email, hash, key, active from "user" where user_name = ?', lowercase_user_name] end hash = ds.first #puts "get_user: hash: #{hash}." user = Schema::User.new(hash, false) if hash halt 401, "Unauthorized" unless user halt 401, "Unauthorized: user #{user.user_name} is not marked as active." unless user.active if user_name_is_key? user_name user.is_valid = true else user.is_valid = valid_user?(user, password) end cache[cache_key] = user if user end user.password = password user end |
#parse_identities(remote_user, remote_password) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 144 def parse_identities remote_user, remote_password identity = Identity.new identity.remote_user = remote_user identity.remote_password = remote_password assume_identity = nil if remote_user and remote_user.include?("|") parts = remote_user.split('|') identity.user_name = parts[1] assume_identity = Identity.new assume_identity.user_name = parts[0] assume_identity.remote_user = remote_user assume_identity.remote_password = remote_password else identity.user_name = remote_user end return identity, assume_identity end |
#set_current_auth(auth) ⇒ Object
243 244 245 246 247 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 243 def set_current_auth auth #@current_auth = ::Authorization::Filter.new current_roles, configatron.application.role_permissions, configatron.application.role_restrictions @current_auth = auth @current_user.auth = @current_auth if @current_user end |
#set_current_identity(identity, no_cache = false) ⇒ Object
219 220 221 222 223 224 225 226 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 219 def set_current_identity identity, no_cache=false puts "set_current_identity: #{identity.user.user_name}" if identity and identity.user @current_identity = identity set_current_user identity.user set_current_roles identity.roles set_current_auth identity.auth set_current_query_filters no_cache end |
#set_current_query_filters(no_cache = false) ⇒ Object
249 250 251 252 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 249 def set_current_query_filters no_cache=false @current_query_filters = get_query_filters(no_cache) @current_user.query_filters = @current_query_filters end |
#set_current_roles(roles) ⇒ Object
232 233 234 235 236 237 238 239 240 241 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 232 def set_current_roles roles @current_role = nil #configatron.default.role @current_roles = roles if roles roles.each do |role| @current_role = role[:name] break end end end |
#set_current_user(user) ⇒ Object
228 229 230 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 228 def set_current_user user @current_user = user end |
#user_name_is_key?(user_name) ⇒ Boolean
140 141 142 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 140 def user_name_is_key? user_name user_name and user_name.start_with?("sk_") and !user_name.include?("@") end |
#valid_user?(user, password) ⇒ Boolean
162 163 164 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 162 def valid_user?(user, password) valid = (user and PasswordHash.validatePassword(password, user.hash)) end |
#zget_roles(no_cache = false) ⇒ Object
177 178 179 180 181 182 183 184 185 186 |
# File 'lib/jungle_path/api/helpers/auth_local_user.rb', line 177 def zget_roles no_cache=false return nil unless current_key cache_key = "#{current_key.id}_roles" roles = cache.get(cache_key) if roles == nil or no_cache roles = SQL::Role.by_user(db, current_key) cache.set cache_key, roles if roles end roles end |