aboutsummaryrefslogtreecommitdiff
path: root/users/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'users/main.go')
-rw-r--r--users/main.go43
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
+}