mirror of
https://github.com/boringproxy/boringproxy.git
synced 2025-02-25 18:55:29 -06:00
Implement user delete
This commit is contained in:
@@ -167,6 +167,15 @@ func (d *Database) AddUser(username string, isAdmin bool) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Database) DeleteUser(username string) {
|
||||
d.mutex.Lock()
|
||||
defer d.mutex.Unlock()
|
||||
|
||||
delete(d.Users, username)
|
||||
|
||||
d.persist()
|
||||
}
|
||||
|
||||
func (d *Database) persist() {
|
||||
saveJson(d, "boringproxy_db.json")
|
||||
}
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
{{range $username, $user := .Users}}
|
||||
<div class='list-item'>
|
||||
{{$username}}
|
||||
<a href="/confirm-delete-user?username={{$username}}">
|
||||
<button class='button red-button'>Delete</button>
|
||||
</a>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
@@ -109,6 +109,10 @@ func (h *WebUiHandler) handleWebUiRequest(w http.ResponseWriter, r *http.Request
|
||||
h.handleLogin(w, r)
|
||||
case "/users":
|
||||
h.users(w, r)
|
||||
case "/confirm-delete-user":
|
||||
h.confirmDeleteUser(w, r)
|
||||
case "/delete-user":
|
||||
h.deleteUser(w, r)
|
||||
case "/":
|
||||
|
||||
indexTemplate, err := box.String("index.tmpl")
|
||||
@@ -138,27 +142,6 @@ func (h *WebUiHandler) handleWebUiRequest(w http.ResponseWriter, r *http.Request
|
||||
h.handleTunnels(w, r)
|
||||
|
||||
case "/confirm-delete-tunnel":
|
||||
box, err := rice.FindBox("webui")
|
||||
if err != nil {
|
||||
w.WriteHeader(500)
|
||||
io.WriteString(w, "Error opening webui")
|
||||
return
|
||||
}
|
||||
|
||||
confirmTemplate, err := box.String("confirm.tmpl")
|
||||
if err != nil {
|
||||
w.WriteHeader(500)
|
||||
io.WriteString(w, "Error reading confirm.tmpl")
|
||||
return
|
||||
}
|
||||
|
||||
tmpl, err := template.New("test").Parse(confirmTemplate)
|
||||
if err != nil {
|
||||
w.WriteHeader(500)
|
||||
log.Println(err)
|
||||
io.WriteString(w, "Error compiling confirm.tmpl")
|
||||
return
|
||||
}
|
||||
|
||||
r.ParseForm()
|
||||
|
||||
@@ -169,6 +152,13 @@ func (h *WebUiHandler) handleWebUiRequest(w http.ResponseWriter, r *http.Request
|
||||
}
|
||||
domain := r.Form["domain"][0]
|
||||
|
||||
tmpl, err := h.loadTemplate("confirm.tmpl")
|
||||
if err != nil {
|
||||
w.WriteHeader(500)
|
||||
io.WriteString(w, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
data := &ConfirmData{
|
||||
Head: h.headHtml,
|
||||
Message: fmt.Sprintf("Are you sure you want to delete %s?", domain),
|
||||
@@ -345,6 +335,50 @@ func (h *WebUiHandler) users(w http.ResponseWriter, r *http.Request) {
|
||||
})
|
||||
}
|
||||
|
||||
func (h *WebUiHandler) confirmDeleteUser(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
r.ParseForm()
|
||||
|
||||
if len(r.Form["username"]) != 1 {
|
||||
w.WriteHeader(400)
|
||||
w.Write([]byte("Invalid username parameter"))
|
||||
return
|
||||
}
|
||||
username := r.Form["username"][0]
|
||||
|
||||
tmpl, err := h.loadTemplate("confirm.tmpl")
|
||||
if err != nil {
|
||||
w.WriteHeader(500)
|
||||
io.WriteString(w, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
data := &ConfirmData{
|
||||
Head: h.headHtml,
|
||||
Message: fmt.Sprintf("Are you sure you want to delete user %s?", username),
|
||||
ConfirmUrl: fmt.Sprintf("/delete-user?username=%s", username),
|
||||
CancelUrl: "/users",
|
||||
}
|
||||
|
||||
tmpl.Execute(w, data)
|
||||
}
|
||||
|
||||
func (h *WebUiHandler) deleteUser(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
r.ParseForm()
|
||||
|
||||
if len(r.Form["username"]) != 1 {
|
||||
w.WriteHeader(400)
|
||||
w.Write([]byte("Invalid username parameter"))
|
||||
return
|
||||
}
|
||||
username := r.Form["username"][0]
|
||||
|
||||
h.db.DeleteUser(username)
|
||||
|
||||
http.Redirect(w, r, "/users", 303)
|
||||
}
|
||||
|
||||
func (h *WebUiHandler) loadTemplate(name string) (*template.Template, error) {
|
||||
|
||||
tmplStr, err := h.box.String(name)
|
||||
|
||||
Reference in New Issue
Block a user