Class: Yus::AutoSession

Inherits:
Session show all
Defined in:
lib/yus/session.rb

Instance Method Summary collapse

Methods inherited from Session

#affiliate, #delete_entity, #destroy!, #disaffiliate, #dump_to_yaml, #entities, #expired?, #find_entity, #last_login, #remove_token, #revoke, #set_password

Constructor Details

#initialize(needle, domain) ⇒ AutoSession

Returns a new instance of AutoSession.



197
198
199
200
# File 'lib/yus/session.rb', line 197

def initialize(needle, domain)
  @domain = domain
  super(needle)
end

Instance Method Details

#allowed?(*args) ⇒ Boolean

AutoSession

Returns:

  • (Boolean)


201
202
203
# File 'lib/yus/session.rb', line 201

def allowed?(*args) # AutoSession
  false
end

#create_entity(name, pass = nil, valid_until = nil, valid_from = Time.now) ⇒ Object



204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
# File 'lib/yus/session.rb', line 204

def create_entity(name, pass=nil, valid_until=nil, valid_from=Time.now)
  info("create_entity(name=#{name}, valid_until=#{valid_until}, valid_from=#{valid_from})")
  entity = nil
  @mutex.synchronize {
    if(@needle.persistence.find_entity(name))
      debug("create_entity: Duplicate Name: '#{name}'")
      raise DuplicateNameError, "Duplicate name: #{name}"
    end
    entity = Entity.new(name, valid_until, valid_from)
    entity.grant('set_password', name)
    if(pass)
      entity.passhash = @needle.config.digest.hexdigest(pass)
    end
    @needle.persistence.add_entity(entity)
  }
  touch!
end

#entity_allowed?(name, *args) ⇒ Boolean

Returns:

  • (Boolean)


221
222
223
# File 'lib/yus/session.rb', line 221

def entity_allowed?(name, *args)
  find_or_fail(name).allowed?(*args)
end

#get_entity_preference(name, key, domain = @domain) ⇒ Object



224
225
226
227
228
229
230
# File 'lib/yus/session.rb', line 224

def get_entity_preference(name, key, domain=@domain)
  debug("get_entity_preference(name=#{name}, key=#{key}, domain=#{domain})")
  @mutex.synchronize {
    user = find_or_fail(name)
    user.get_preference(key, domain)
  }
end

#get_entity_preferences(name, keys, domain = @domain) ⇒ Object



231
232
233
234
235
236
237
238
239
240
# File 'lib/yus/session.rb', line 231

def get_entity_preferences(name, keys, domain=@domain)
  debug("get_entity_preferences(name=#{name}, keys=#{keys}, domain=#{domain})")
  @mutex.synchronize {
    user = find_or_fail(name)
    keys.inject({}) { |memo, key|
      memo.store(key, user.get_preference(key, domain))
      memo
    }
  }
end

#grant(name, action, item = nil, expires = nil) ⇒ Object



278
279
280
281
282
283
284
285
286
# File 'lib/yus/session.rb', line 278

def grant(name, action, item=nil, expires=nil)
  info("grant(name=#{name}, action=#{action}, item=#{item}, expires=#{expires})")
  @mutex.synchronize {
    user = find_or_fail(name)
    user.grant(action, item || :everything, expires || :never)
    save(user)
  }
  touch!
end

#rename(oldname, newname) ⇒ Object



241
242
243
244
245
246
247
248
249
250
251
252
253
# File 'lib/yus/session.rb', line 241

def rename(oldname, newname)
  info("rename(#{oldname}, #{newname})")
  @mutex.synchronize {
    user = find_or_fail(oldname)
    if((other = @needle.persistence.find_entity(newname)) && other != user)
      raise DuplicateNameError, "Duplicate name: #{newname}"
    end
    user.revoke('set_password', oldname)
    user.rename(newname)
    user.grant('set_password', newname)
    save(user)
  }
end

#reset_entity_password(name, token, password) ⇒ Object



254
255
256
257
258
259
260
261
262
263
264
265
266
# File 'lib/yus/session.rb', line 254

def reset_entity_password(name, token, password)
  info("reset_entity_password(name=#{name}, token=#{token})")
  @mutex.synchronize {
    user = find_or_fail(name)
    unless(user.allowed?('reset_password', token))
      raise NotPrivilegedError, "You are not privileged to reset #{name}'s password"
    end
    user.passhash = @needle.config.digest.hexdigest(password)
    user.revoke('reset_password', token)
    save(user)
  }
  touch!
end

#set_entity_preference(name, key, value, domain = @domain) ⇒ Object



267
268
269
270
271
272
273
274
275
276
277
# File 'lib/yus/session.rb', line 267

def set_entity_preference(name, key, value, domain=@domain)
  debug("set_entity_preference(name=#{name}, key=#{key}, value=#{value}, domain=#{domain})")
  @mutex.synchronize {
    user = find_or_fail(name)
    unless(user.get_preference(key, domain))
      user.set_preference(key, value, domain)
      save(user)
    end
  }
  touch!
end