summaryrefslogtreecommitdiff
path: root/password.go
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2026-06-20 17:07:47 +0200
committerxengineering <me@xengineering.eu>2026-06-20 17:12:18 +0200
commita5c8467bbb14731847cdf8c37cbde0c91827022a (patch)
tree61ca8edd4139e4af21821c89a49099dbf444e25d /password.go
parent6c0aaac6975bdee1596df5b72c1e47e6a923c79f (diff)
downloadfinserv-a5c8467bbb14731847cdf8c37cbde0c91827022a.tar
finserv-a5c8467bbb14731847cdf8c37cbde0c91827022a.tar.zst
finserv-a5c8467bbb14731847cdf8c37cbde0c91827022a.zip
Add Authenticate()
This function validates a username and password against the database.
Diffstat (limited to 'password.go')
-rw-r--r--password.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/password.go b/password.go
index 024ffd7..edbeb7a 100644
--- a/password.go
+++ b/password.go
@@ -2,6 +2,7 @@ package main
import (
"database/sql"
+ "fmt"
_ "github.com/mattn/go-sqlite3"
"golang.org/x/crypto/bcrypt"
@@ -28,3 +29,20 @@ func Register(db *sql.DB, username, password string) error {
return err
}
+
+func Authenticate(db *sql.DB, username, password string) error {
+ var hash []byte
+ err := Transaction(db, func(tx *sql.Tx) error {
+ row := tx.QueryRow(
+ `SELECT password_bcrypt from users WHERE username=?;`,
+ username,
+ )
+
+ return row.Scan(&hash)
+ })
+ if err != nil {
+ return fmt.Errorf("Failed to get password hash from database: %w", err)
+ }
+
+ return bcrypt.CompareHashAndPassword(hash, []byte(password))
+}