Files

92 lines
1.7 KiB
Go

package plg_authenticate_local
import (
"sort"
"strings"
. "github.com/mickael-kerjean/filestash/server/common"
"golang.org/x/crypto/bcrypt"
)
func removeUser(email string) error {
users, err := getUsers()
if err != nil {
return err
}
for i := range users {
if users[i].Email == email {
users[i] = users[len(users)-1]
return saveUsers(users[:len(users)-1])
}
}
return ErrNotFound
}
func createUser(user User) error {
if user.Password == "" {
return ErrNotValid
}
p, err := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost)
if err != nil {
return err
}
user.Password = string(p)
users, err := getUsers()
if err != nil {
return err
}
return saveUsers(append(users, user))
}
func updateUser(user User) error {
users, err := getUsers()
if err != nil {
return err
}
for i := range users {
if users[i].Email == user.Email {
if strings.HasPrefix(user.Password, "$2a$") == false {
p, err := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost)
if err != nil {
return err
}
user.Password = string(p)
}
users[i].Disabled = user.Disabled
users[i].Role = user.Role
return saveUsers(users)
}
}
return ErrNotFound
}
func getUsers() ([]User, error) {
cfg, err := getPluginData()
return cfg.Users, err
}
func saveUsers(users []User) error {
cfg, err := getPluginData()
if err != nil {
return err
}
sort.Slice(users, func(i, j int) bool {
userI := []byte(users[i].Email)
userJ := []byte(users[j].Email)
n := len(userI)
if len(userJ) < len(userI) {
n = len(userJ)
}
for i := 0; i < n; i++ {
if userI[i] == userJ[i] {
continue
}
return userI[i] < userJ[i]
}
return false
})
cfg.Users = users
return savePluginData(cfg)
}