Add password hashing with argon2

This commit is contained in:
bronku 2025-03-28 21:53:04 +01:00
parent 01da46b81e
commit 1dd0332bc1
11 changed files with 107 additions and 15 deletions

View file

@ -0,0 +1,4 @@
alter table user
add column salt text;
pragma user_version = 8;

View file

@ -11,6 +11,7 @@ import (
type Store struct {
db *sql.DB
cakes []models.Cake
users map[string]models.User
}
func OpenStore(filename string) *Store {
@ -27,6 +28,10 @@ func OpenStore(filename string) *Store {
if err != nil {
log.Fatal(err)
}
out.users, err = out.loadUsers()
if err != nil {
log.Fatal(err)
}
return &out
}

48
internal/store/user.go Normal file
View file

@ -0,0 +1,48 @@
package store
import (
"errors"
"github.com/Bronku/iroon/internal/crypto"
"github.com/Bronku/iroon/internal/models"
)
func (s *Store) AddUser(login, password string) error {
_, exists := s.GetUser(login)
if exists {
return errors.New("the user already exists")
}
query := "insert into user (login, password, salt) values(?, ?, ?)"
salt := crypto.GenerateKey()
hash := crypto.PasswordHash(password, salt)
_, err := s.db.Exec(query, login, hash, salt)
if err == nil {
s.users[login] = models.User{Password: hash, Salt: salt}
}
return err
}
func (s *Store) loadUsers() (map[string]models.User, error) {
out := make(map[string]models.User)
query := "select login, password, salt from user;"
rows, err := s.db.Query(query)
if err != nil {
return out, err
}
defer rows.Close()
for rows.Next() {
var current models.User
var login string
err = rows.Scan(&login, &current.Password, &current.Salt)
if err != nil {
continue
}
out[login] = current
}
return out, nil
}
func (s *Store) GetUser(login string) (models.User, bool) {
value, ok := s.users[login]
return value, ok
}