class CryptIdent::SignUp
Reworked sign-up logic for `CryptIdent`, per Issue #9
This class *is not* part of the published API. @private
Public Instance Methods
call(attribs, current_user:)
click to toggle source
# File lib/crypt_ident/sign_up.rb, line 101 def call(attribs, current_user:) return failure_for(:current_user_exists) if current_user?(current_user) create_result(all_attribs(attribs)) end
Private Instance Methods
all_attribs(attribs)
click to toggle source
# File lib/crypt_ident/sign_up.rb, line 109 def all_attribs(attribs) new_attribs.merge(attribs) end
create_result(attribs_in)
click to toggle source
XXX: This has a Flog score of 9.8. Truly simplifying PRs welcome.
# File lib/crypt_ident/sign_up.rb, line 114 def create_result(attribs_in) user = CryptIdent.config.repository.create(attribs_in) success_for(user) rescue Hanami::Model::UniqueConstraintViolationError failure_for(:user_already_created) rescue Hanami::Model::Error failure_for(:user_creation_failed) end
current_user?(user)
click to toggle source
# File lib/crypt_ident/sign_up.rb, line 123 def current_user?(user) guest_user = CryptIdent.config.guest_user user ||= guest_user !guest_user.class.new(user).guest? end
failure_for(code)
click to toggle source
# File lib/crypt_ident/sign_up.rb, line 129 def failure_for(code) Failure(code: code) end
hashed_password(password_in)
click to toggle source
# File lib/crypt_ident/sign_up.rb, line 133 def hashed_password(password_in) password = password_in.to_s.strip password = SecureRandom.alphanumeric(64) if password.empty? ::BCrypt::Password.create(password) end
new_attribs()
click to toggle source
# File lib/crypt_ident/sign_up.rb, line 139 def new_attribs prea = Time.now + CryptIdent.config.reset_expiry { password_hash: hashed_password(nil), password_reset_expires_at: prea, token: new_token } end
new_token()
click to toggle source
# File lib/crypt_ident/sign_up.rb, line 148 def new_token token_length = CryptIdent.config.token_bytes clear_text_token = SecureRandom.alphanumeric(token_length) Base64.strict_encode64(clear_text_token) end
success_for(user)
click to toggle source
# File lib/crypt_ident/sign_up.rb, line 154 def success_for(user) Success(user: user) end