Files

81 lines
1.6 KiB
Go

package plg_authenticate_local
import (
_ "embed"
"html/template"
"net/http"
. "github.com/mickael-kerjean/filestash/server/common"
)
//go:embed handler.html
var PAGE string
func UserManagementHandler(ctx *App, res http.ResponseWriter, req *http.Request) {
if req.Method == http.MethodDelete {
if err := removeUser(req.FormValue("email")); err != nil {
SendErrorResult(res, err)
return
}
SendSuccessResult(res, nil)
return
}
currentUser := User{}
users, err := getUsers()
if err != nil {
SendErrorResult(res, err)
return
}
email := formatEmail(req.URL.Query().Get("email"))
if email == "" {
email = formatEmail(req.FormValue("email"))
}
if email != "" {
for i := range users {
if users[i].Email == email {
currentUser = users[i]
break
}
}
}
if req.Method == http.MethodPost {
user := User{
Email: email,
Password: formatPassword(req.FormValue("password")),
Role: formatRole(req.FormValue("role")),
Disabled: false,
}
if req.FormValue("disabled") == "on" {
user.Disabled = true
}
redirectURI := req.URL.String()
fn := createUser
if currentUser.Email != "" {
fn = updateUser
redirectURI = req.URL.Path
}
if err := fn(user); err != nil {
SendErrorResult(res, err)
return
}
http.Redirect(res, req, redirectURI, http.StatusSeeOther)
if currentUser.Email == "" {
go sendInvitateMail(user)
}
return
}
template.
Must(template.New("app").Parse(Page(PAGE))).
Execute(res, struct {
Users []User
CurrentUser User
BackURL string
}{
Users: users,
CurrentUser: currentUser,
BackURL: WithBase("/admin/backend"),
})
}