mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-10-31 18:16:00 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			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"),
 | |
| 		})
 | |
| }
 | 
