intake/core/passwd.go

42 lines
962 B
Go

package core
import (
"database/sql"
"fmt"
"github.com/alexedwards/argon2id"
_ "github.com/mattn/go-sqlite3"
)
func SetPassword(db DB, password string) error {
hash, err := argon2id.CreateHash(password, argon2id.DefaultParams)
if err != nil {
return fmt.Errorf("failed to hash password: %v", err)
}
_, err = db.Exec("insert into password (id, hash) values (1, ?)", hash)
if err != nil {
return fmt.Errorf("failed to set password hash: %v", err)
}
return nil
}
func CheckPassword(db DB, password string) (bool, error) {
var hash string
err := db.QueryRow("select hash from password limit 1").Scan(&hash)
if err != nil {
if err == sql.ErrNoRows {
return true, nil
}
return false, fmt.Errorf("failed to query password hash from database: %v", err)
}
match, err := argon2id.ComparePasswordAndHash(password, hash)
if err != nil {
return false, fmt.Errorf("failed to compare password and hash: %v", err)
}
return match, nil
}