Files
2025-06-30 12:11:42 +10:00

87 lines
1.7 KiB
Go

package plg_authenticate_local
import (
_ "embed"
"html/template"
"net/http"
"net/url"
. "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
}
referer := ""
if u, err := url.Parse(req.Header.Get("referer")); err == nil {
referer = u.Path
}
template.
Must(template.New("app").Parse(Page(PAGE))).
Execute(res, struct {
Users []User
CurrentUser User
Referer string
}{
Users: users,
CurrentUser: currentUser,
Referer: referer,
})
}