diff options
| author | xengineering <me@xengineering.eu> | 2026-06-20 17:07:47 +0200 |
|---|---|---|
| committer | xengineering <me@xengineering.eu> | 2026-06-20 17:12:18 +0200 |
| commit | a5c8467bbb14731847cdf8c37cbde0c91827022a (patch) | |
| tree | 61ca8edd4139e4af21821c89a49099dbf444e25d /password.go | |
| parent | 6c0aaac6975bdee1596df5b72c1e47e6a923c79f (diff) | |
| download | finserv-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.go | 18 |
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)) +} |
