From 9d4ebd033d5f0d6ad6d1d6f52fd16e0bdc17a49e Mon Sep 17 00:00:00 2001 From: jan Date: Mon, 10 Oct 2016 15:00:53 +0200 Subject: list: listen loeschen diff --git a/modules/lists/lists.go b/modules/lists/lists.go index 9e78ac7..6129502 100644 --- a/modules/lists/lists.go +++ b/modules/lists/lists.go @@ -79,6 +79,7 @@ func (m *Module) Init(g *grilist.Grilist) { m.g.Router.POST("/list/:id/settings", m.updateListSettings) m.g.Router.GET("/new/list", m.displayCreateList) m.g.Router.POST("/new/list", m.createList) + m.g.Router.GET("/list/:id/delete", m.deleteList) m.g.Router.GET("/api/lists/user", m.APIgetUserLists) @@ -287,6 +288,54 @@ func (m *Module) viewList(w http.ResponseWriter, r *http.Request, p httprouter.P m.g.Renderer.RenderPage("list", w, data) } +func (m *Module) deleteList(w http.ResponseWriter, r *http.Request, p httprouter.Params) { + user, err := m.g.Charakterin.GetUserFromRequest(r) + if err != nil { + log.Println("invalid deleteList user") + http.Redirect(w, r, fmt.Sprintf("/list/%s", p.ByName("id")), 403) + return + } + + id, err := strconv.Atoi(p.ByName("id")) + if err != nil { + log.Println("invalid deleteList ID") + http.Redirect(w, r, "/", 400) + return + } + + list, err := m.FromID(id, false) + if err != nil { + log.Println("invalid deleteList ID (could not get list)") + http.Redirect(w, r, fmt.Sprintf("/list/%d", id), 500) + return + } + + // checken, ob der user auch list owner ist + if user.ID != list.Owner.ID { + log.Println("invalid deleteList request: user not list owner") + http.Redirect(w, r, fmt.Sprintf("/list/%d", id), 403) + return + } + + // aus der Datenbank loeschen + _, err = m.g.DB.Query(`DELETE FROM grilist.lists WHERE id = $1`, id) + if err != nil { + log.Println("could not delete list:", err) + data := m.g.Renderer.DefaultData() + data["user"] = user + data["list"] = list + data["error"] = "Liste konnte nicht geloescht werden." + + m.g.Renderer.RenderPage("list_settings", w, data) + return + } + // aus dem Cache loeschen + m.c.Remove(list.ID) + + log.Printf("list %d has been deleted by the owner %d(%s)", list.ID, list.Owner.ID, list.Owner.GetName()) + http.Redirect(w, r, "/", 302) +} + func (m *Module) viewListSettings(w http.ResponseWriter, r *http.Request, p httprouter.Params) { user, err := m.g.Charakterin.GetUserFromRequest(r) if err != nil { -- cgit v0.10.1