Gitfed
bastien-mrq/gitfed / internal / store / auth.go
package store

import (
	bolt "go.etcd.io/bbolt"
)

// credential holds a user's password hash, kept in its own bucket so it
// never travels with a store.User value (see the comment on User).
type credential struct {
	PasswordHash string `json:"password_hash"`
}

func (s *Store) SetPasswordHash(username, hash string) error {
	return s.db.Update(func(tx *bolt.Tx) error {
		if tx.Bucket(bucketUsers).Get([]byte(username)) == nil {
			return ErrNotFound
		}
		return putJSON(tx, bucketAuth, username, credential{PasswordHash: hash})
	})
}

func (s *Store) GetPasswordHash(username string) (string, error) {
	var c credential
	err := s.db.View(func(tx *bolt.Tx) error {
		return getJSON(tx, bucketAuth, username, &c)
	})
	return c.PasswordHash, err
}

func (s *Store) DeletePasswordHash(username string) error {
	return s.db.Update(func(tx *bolt.Tx) error {
		return deleteKey(tx, bucketAuth, username)
	})
}