diff options
Diffstat (limited to 'users/main.go')
| -rw-r--r-- | users/main.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/users/main.go b/users/main.go new file mode 100644 index 0000000..edb306f --- /dev/null +++ b/users/main.go @@ -0,0 +1,43 @@ +package users + +import ( + "fmt" + + "golang.org/x/crypto/bcrypt" +) + +type SiteUser struct { + Username string `yaml:"username"` + PasswordHash string `yaml:"password-hash"` + Password string `yaml:"password"` +} + +func (su *SiteUser) SetPasswordHashIfNecessary() error { + if su.Password == "" { + return nil + } + + res, err := bcrypt.GenerateFromPassword([]byte(su.Password), bcrypt.DefaultCost) + if err != nil { + return fmt.Errorf("SetPasswordHashIfNecessary: %w", err) + } + + su.Password = "" + su.PasswordHash = string(res) + + return nil +} + +func (su *SiteUser) CheckPassword(pass string) error { + err := su.SetPasswordHashIfNecessary() + if err != nil { + return err + } + + err = bcrypt.CompareHashAndPassword([]byte(su.PasswordHash), []byte(pass)) + if err != nil { + return fmt.Errorf("CheckPassword: %w", err) + } + + return nil +} |
