Skip to content

Commit bbdecd5

Browse files
committed
Add an endpoint to catnip to write the file
1 parent 8c67e09 commit bbdecd5

3 files changed

Lines changed: 41 additions & 4 deletions

File tree

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/go-chi/chi/v5"
1010
)
1111

12-
func FileHandler(res http.ResponseWriter, req *http.Request) {
12+
func ReadFileHandler(res http.ResponseWriter, req *http.Request) {
1313
filename := chi.URLParam(req, "filename")
1414
decodedFilename, err := url.PathUnescape(filename)
1515
if err != nil {
@@ -19,13 +19,13 @@ func FileHandler(res http.ResponseWriter, req *http.Request) {
1919

2020
_, err = os.Stat(decodedFilename)
2121
if err != nil {
22-
http.Error(res, http.StatusText(404) + ": " + decodedFilename, 404)
22+
http.Error(res, http.StatusText(404)+": "+decodedFilename, 404)
2323
return
2424
}
2525

2626
content, err := os.ReadFile(decodedFilename)
2727
if err != nil {
28-
http.Error(res, http.StatusText(500) + ": " + err.Error(), 500)
28+
http.Error(res, http.StatusText(500)+": "+err.Error(), 500)
2929
return
3030
}
3131
res.Write(append(content, '\n'))

assets/catnip/file/write_file.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package file
2+
3+
import (
4+
"fmt"
5+
"io"
6+
"net/http"
7+
"net/url"
8+
"os"
9+
10+
"github.com/go-chi/chi/v5"
11+
)
12+
13+
func WriteFileHandler(res http.ResponseWriter, req *http.Request) {
14+
filename := chi.URLParam(req, "filename")
15+
decodedFilename, err := url.PathUnescape(filename)
16+
if err != nil {
17+
http.Error(res, fmt.Sprintf("Cannot unescape file name: %s", filename), http.StatusBadRequest)
18+
return
19+
}
20+
21+
decodedFilename = "/" + decodedFilename
22+
23+
content, err := io.ReadAll(req.Body)
24+
if err != nil {
25+
http.Error(res, fmt.Sprintf("failed to read the file: %v", err), http.StatusInternalServerError)
26+
return
27+
}
28+
29+
err = os.WriteFile(decodedFilename, content, 0644)
30+
if err != nil {
31+
http.Error(res, http.StatusText(500)+": "+err.Error(), 500)
32+
return
33+
}
34+
35+
res.WriteHeader(http.StatusCreated)
36+
}

assets/catnip/router/router.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ func New(out io.Writer, clock clock.Clock) *chi.Mux {
3939
r.Get("/curl/{host}", linux.CurlHandler)
4040
r.Get("/curl/{host}/", linux.CurlHandler)
4141
r.Get("/curl/{host}/{port}", linux.CurlHandler)
42-
r.Get("/file/{filename}", file.FileHandler)
42+
r.Get("/file/{filename}", file.ReadFileHandler)
43+
r.Post("/file/{filename}", file.WriteFileHandler)
4344

4445
return r
4546
}

0 commit comments

Comments
 (0)