]> code.octet-stream.net Git - broadcaster/blobdiff - broadcaster-server/user.go
Add licence, etc.
[broadcaster] / broadcaster-server / user.go
diff --git a/broadcaster-server/user.go b/broadcaster-server/user.go
new file mode 100644 (file)
index 0000000..275f0ec
--- /dev/null
@@ -0,0 +1,82 @@
+package main
+
+import (
+       "errors"
+       "golang.org/x/crypto/bcrypt"
+)
+
+var users Users
+
+type Users struct{}
+
+func (u *Users) GetUserForSession(token string) (User, error) {
+       username, err := db.GetUserNameForSession(token)
+       if err != nil {
+               return User{}, err
+       }
+       user, err := db.GetUser(username)
+       if err != nil {
+               return User{}, err
+       }
+       return user, nil
+}
+
+func (u *Users) Authenticate(username string, clearPassword string) (User, error) {
+       user, err := db.GetUser(username)
+       if err != nil {
+               return User{}, err
+       }
+       err = bcrypt.CompareHashAndPassword([]byte(user.PasswordHash), []byte(clearPassword))
+       if err != nil {
+               return User{}, err
+       }
+       return user, nil
+}
+
+func (u *Users) CreateUser(username string, clearPassword string, isAdmin bool) error {
+       if clearPassword == "" {
+               return errors.New("password cannot be empty")
+       }
+       hashed, err := bcrypt.GenerateFromPassword([]byte(clearPassword), bcrypt.DefaultCost)
+       if err != nil {
+               return err
+       }
+       return db.CreateUser(User{
+               Id:           0,
+               Username:     username,
+               PasswordHash: string(hashed),
+               IsAdmin:      isAdmin,
+       })
+}
+
+func (u *Users) DeleteUser(username string) {
+       db.DeleteUser(username)
+}
+
+func (u *Users) UpdatePassword(username string, oldClearPassword string, newClearPassword string) error {
+       user, err := db.GetUser(username)
+       if err != nil {
+               return err
+       }
+       err = bcrypt.CompareHashAndPassword([]byte(user.PasswordHash), []byte(oldClearPassword))
+       if err != nil {
+               return errors.New("old password is incorrect")
+       }
+       if newClearPassword == "" {
+               return errors.New("password cannot be empty")
+       }
+       hashed, err := bcrypt.GenerateFromPassword([]byte(newClearPassword), bcrypt.DefaultCost)
+       if err != nil {
+               return err
+       }
+       db.SetUserPassword(username, string(hashed))
+       return nil
+}
+
+func (u *Users) UpdateIsAdmin(username string, isAdmin bool) {
+       db.SetUserIsAdmin(username, isAdmin)
+}
+
+func (u *Users) Users() []User {
+       return db.GetUsers()
+}