aboutsummaryrefslogtreecommitdiff
path: root/src/guff/models/user.cr
diff options
context:
space:
mode:
authorPaul Duncan <pabs@pablotron.org>2016-04-01 20:08:00 -0400
committerPaul Duncan <pabs@pablotron.org>2016-04-01 20:08:00 -0400
commitf6a068fdcef8b7650f010e4bb52f52a3b566e4bd (patch)
tree7d6042a88f0fb0fa35b642d484888777a7d3eb22 /src/guff/models/user.cr
parent6b9ca27c67d043a8737da652bf7915645628db4c (diff)
downloadold-guff-f6a068fdcef8b7650f010e4bb52f52a3b566e4bd.tar.bz2
old-guff-f6a068fdcef8b7650f010e4bb52f52a3b566e4bd.zip
add login test
Diffstat (limited to 'src/guff/models/user.cr')
-rw-r--r--src/guff/models/user.cr37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/guff/models/user.cr b/src/guff/models/user.cr
index 98ae10b..28e317e 100644
--- a/src/guff/models/user.cr
+++ b/src/guff/models/user.cr
@@ -20,6 +20,18 @@ class Guff::UserModel < Guff::Model
INSERT INTO user_logins(user_id, email, pass_hash) VALUES
(:user_id, :email, :pass_hash)
",
+
+ login: "
+ SELECT a.user_id,
+ a.pass_hash
+
+ FROM user_logins a
+ JOIN users b
+ ON (b.user_id = a.user_id AND
+ b.is_active)
+
+ WHERE a.email = :email
+ ",
})
def initialize(models : Models)
@@ -125,6 +137,7 @@ class Guff::UserModel < Guff::Model
# hash password
pass_hash = Crypto::Bcrypt::Password.create(password, cost: 10).to_s
+ # puts "user_id = #{user_id}, email = #{email}, password = #{password}, pass_hash = #{pass_hash}"
transaction do
# clear old credentials
@@ -138,4 +151,28 @@ class Guff::UserModel < Guff::Model
}, nil)
end
end
+
+ def login(
+ email : String,
+ password : String
+ )
+ # map email to user id and pass hash
+ row = row(:login, {
+ "email": email,
+ }, nil)
+
+ raise "invalid login" unless row
+
+ # shut compiler up
+ row = row.not_nil!
+
+ # get pass hash from db
+ pass_hash = Crypto::Bcrypt::Password.new(row["pass_hash"].to_s)
+
+ # compare hash against password
+ raise "invalid login" unless pass_hash == password
+
+ # return user id
+ row["user_id"] as Int64
+ end
end