mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-10-28 04:05:21 +08:00
92 lines
1.7 KiB
Go
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)
|
|
}
|