|
1 | 1 | package main |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "fmt" |
4 | 5 | "io" |
5 | 6 | "log" |
6 | 7 | "mime" |
@@ -105,3 +106,37 @@ func FileHandler(provider FileProvider) http.HandlerFunc { |
105 | 106 | _, _ = io.Copy(writer, reader) |
106 | 107 | } |
107 | 108 | } |
| 109 | + |
| 110 | +type DeleteFileProvider interface { |
| 111 | + DeleteFile(name string, message string, user string) error |
| 112 | +} |
| 113 | + |
| 114 | +func DeleteFileConfirmHandler(t *Templates) http.HandlerFunc { |
| 115 | + return func(w http.ResponseWriter, r *http.Request) { |
| 116 | + name := strings.TrimPrefix(r.URL.Path, "/files/delete/") |
| 117 | + t.RenderDeleteFile(w, r, name) |
| 118 | + } |
| 119 | +} |
| 120 | + |
| 121 | +func DeleteFileHandler(provider DeleteFileProvider) http.HandlerFunc { |
| 122 | + return func(writer http.ResponseWriter, request *http.Request) { |
| 123 | + name := strings.TrimPrefix(request.URL.Path, "/files/delete/") |
| 124 | + confirm := request.FormValue("confirm") |
| 125 | + if confirm == "" { |
| 126 | + http.Redirect(writer, request, "/files/delete/"+name, http.StatusTemporaryRedirect) |
| 127 | + return |
| 128 | + } |
| 129 | + message := request.FormValue("message") |
| 130 | + username := "Anonymoose" |
| 131 | + if user := getUserForRequest(request); user != nil { |
| 132 | + username = user.Name |
| 133 | + } |
| 134 | + err := provider.DeleteFile(name, message, username) |
| 135 | + if err != nil { |
| 136 | + writer.WriteHeader(http.StatusInternalServerError) |
| 137 | + return |
| 138 | + } |
| 139 | + putSessionKey(writer, request, sessionNoticeKey, fmt.Sprintf("Deleted file %s", name)) |
| 140 | + http.Redirect(writer, request, "/", http.StatusTemporaryRedirect) |
| 141 | + } |
| 142 | +} |
0 commit comments