Skip to content

Commit 3109097

Browse files
committed
Support for deleting files
Closes #85
1 parent 4323404 commit 3109097

7 files changed

Lines changed: 77 additions & 3 deletions

File tree

git.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,19 @@ func (g *GitBackend) DeletePage(name string, message string, user string) error
351351
g.mutex.Lock()
352352
defer g.mutex.Unlock()
353353

354-
_, gitPath, err := resolvePath(g.dir, fmt.Sprintf("%s.md", name))
354+
return g.delete(fmt.Sprintf("%s.md", name), message, user)
355+
}
356+
357+
358+
func (g *GitBackend) DeleteFile(name string, message string, user string) error {
359+
g.mutex.Lock()
360+
defer g.mutex.Unlock()
361+
362+
return g.delete(name, message, user)
363+
}
364+
365+
func (g *GitBackend) delete(name, message, user string) error {
366+
_, gitPath, err := resolvePath(g.dir, name)
355367
if err != nil {
356368
return err
357369
}

handlers_file.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"fmt"
45
"io"
56
"log"
67
"mime"
@@ -105,3 +106,37 @@ func FileHandler(provider FileProvider) http.HandlerFunc {
105106
_, _ = io.Copy(writer, reader)
106107
}
107108
}
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+
}

handlers_page.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ func DeletePageHandler(provider DeletePageProvider) http.HandlerFunc {
111111
writer.WriteHeader(http.StatusInternalServerError)
112112
return
113113
}
114-
http.Redirect(writer, request, "/", http.StatusOK)
114+
putSessionKey(writer, request, sessionNoticeKey, fmt.Sprintf("Deleted page %s", name))
115+
http.Redirect(writer, request, "/", http.StatusTemporaryRedirect)
115116
}
116117
}
117118

main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ func main() {
128128
wikiRouter.PathPrefix("/view/").Handler(read(ViewPageHandler(templates, renderer, gitBackend))).Methods(http.MethodGet)
129129
wikiRouter.PathPrefix("/history/").Handler(read(PageHistoryHandler(templates, gitBackend))).Methods(http.MethodGet)
130130
wikiRouter.PathPrefix("/files/view/").Handler(read(FileHandler(gitBackend))).Methods(http.MethodGet)
131+
wikiRouter.PathPrefix("/files/delete/").Handler(write(DeleteFileConfirmHandler(templates))).Methods(http.MethodGet)
132+
wikiRouter.PathPrefix("/files/delete/").Handler(write(DeleteFileHandler(gitBackend))).Methods(http.MethodPost)
131133
wikiRouter.PathPrefix("/delete/").Handler(write(DeletePageConfirmHandler(templates))).Methods(http.MethodGet)
132134
wikiRouter.PathPrefix("/delete/").Handler(write(DeletePageHandler(gitBackend))).Methods(http.MethodPost)
133135
wikiRouter.PathPrefix("/rename/").Handler(write(RenamePageConfirmHandler(gitBackend, templates))).Methods(http.MethodGet)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{{- /*gotype: github.com/mdbot/wiki.DeleteFileArgs*/ -}}
2+
{{template "header" .Common}}
3+
<form action="/files/delete/{{.Common.PageTitle}}" method="post" class="editor">
4+
{{.Common.CsrfField}}
5+
<input type="hidden" id="confirm" name="confirm" value="confirm" />
6+
<div class="form-group">
7+
<label for="message">Reason:</label>
8+
<input id="message" type="text" name="message">
9+
</div>
10+
<button type="submit" class="btn btn-primary" value="Edit">Confirm delete</button>
11+
</form>
12+
{{template "footer" .Common}}

resources/templates/listfiles.gohtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
All files:
44
<ul>
55
{{range .Files}}
6-
<li><a href="/files/view/{{.Name}}">{{.Name}}</a> ({{.Size | bytes}})</li>
6+
<li><a href="/files/view/{{.Name}}">{{.Name}}</a> ({{.Size | bytes}}) [<a href="/files/delete/{{.Name}}">delete</a>]</li>
77
{{end}}
88
</ul>
99
{{template "footer" .Common}}

templates.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,18 @@ func (t *Templates) RenderFileList(w http.ResponseWriter, r *http.Request, files
131131
})
132132
}
133133

134+
type DeleteFileArgs struct {
135+
Common CommonArgs
136+
}
137+
138+
func (t *Templates) RenderDeleteFile(w http.ResponseWriter, r *http.Request, fileName string) {
139+
t.render("delete_file.gohtml", http.StatusOK, w, &DeleteFileArgs{
140+
Common: t.populateArgs(w, r, CommonArgs{
141+
PageTitle: fileName,
142+
}),
143+
})
144+
}
145+
134146
type UploadFileArgs struct {
135147
Common CommonArgs
136148
}

0 commit comments

Comments
 (0)