Implement user delete

This commit is contained in:
Anders Pitman
2020-10-12 22:17:36 -06:00
parent d3b25d5c38
commit 9cc1a8afa6
3 changed files with 67 additions and 21 deletions

View File

@@ -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")
}

View File

@@ -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>

View File

@@ -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)