From 77904f19c6f29659d5adcf569336735b3b651912 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Mon, 12 Apr 2021 12:19:37 +0200 Subject: Implemented the user login database function --- pkg/database/users.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'pkg/database/users.go') diff --git a/pkg/database/users.go b/pkg/database/users.go index 3f75f62..10e6416 100644 --- a/pkg/database/users.go +++ b/pkg/database/users.go @@ -45,3 +45,28 @@ func (env *DBEnv) CreateUser(reg *model.UserRegistration) (*model.User, error) { } return &user, nil } + +// Login logs a user in if the password matches the hash in database +// a PasswordError is return if the passwords do not match +// a QueryError is returned if the username contains invalid sql characters like % +func (env *DBEnv) Login(login *model.UserLogin) (*model.User, error) { + query := `SELECT id, password, email FROM users WHERE username = $1;` + user := model.User{Username: login.Username} + var hash string + err := env.db.QueryRow( + query, + login.Username, + ).Scan( + &user.Id, + &hash, + &user.Email, + ) + if err != nil { + return nil, newQueryError("Could not run database query", err) + } + err = checkPassword(hash, login.Password) + if err != nil { + return nil, err + } + return &user, nil +} -- cgit v1.2.3