class DoorMat::Process::ActorPasswordChange
Public Class Methods
after_password_reset(actor, new_password, recovery_key)
click to toggle source
# File lib/door_mat/process/actor_password_change.rb, line 5 def self.after_password_reset(actor, new_password, recovery_key) Session.clear_current_session return false unless Session.current_session.recovery_key_restore(actor, recovery_key) with(actor, new_password, nil, false) end
with(actor, new_password, old_password='', save_session=true)
click to toggle source
# File lib/door_mat/process/actor_password_change.rb, line 11 def self.with(actor, new_password, old_password='', save_session=true) actor.with_lock do unless old_password.nil? return false unless actor.authenticate(old_password) end session = DoorMat::Session.current_session if save_session session = DoorMat::Session.current_session.reload unless session.valid? return false end end actor.re_key_with(new_password) session.re_key_with(actor, new_password) pem_key = session.decrypt(actor.encrypted_pem_key) actor.encrypted_pem_key = session.encrypt(pem_key) actor.save! session.save! if save_session keys = Actor.reflections.keys.select {|item| Actor.reflections[item].klass.methods.include?(:attr_symmetric_store)} keys.each do |key| collection = actor.send(key) unless collection.blank? if collection.respond_to? :find_each collection.find_each do |record| record.save! end else collection.save! end end end actor.keep_only_this_session! session end ActivityDownloadRecoveryKey.for(actor) true rescue ActiveRecord::RecordNotFound => e DoorMat.configuration.logger.warn "WARN: Failed to change actor password - #{e}" false rescue Exception => e DoorMat.configuration.logger.error "ERROR: Failed to change actor password - #{e}" raise e end