This commit is contained in:
18
api/http.go
18
api/http.go
@@ -49,6 +49,7 @@ func NewHTTPServer(cfg *gpaste.ServerConfig) *HTTPServer {
|
||||
r.Get("/", srv.HandlerIndex)
|
||||
r.Post("/api/file", srv.HandlerAPIFilePost)
|
||||
r.Get("/api/file/{id}", srv.HandlerAPIFileGet)
|
||||
r.Delete("/api/file/{id}", srv.HandlerAPIFileDelete)
|
||||
r.Post("/api/login", srv.HandlerAPILogin)
|
||||
r.Post("/api/user", srv.HandlerAPIUserCreate)
|
||||
srv.Handler = r
|
||||
@@ -117,6 +118,23 @@ func (s *HTTPServer) HandlerAPIFileGet(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *HTTPServer) HandlerAPIFileDelete(w http.ResponseWriter, r *http.Request) {
|
||||
// TODO: Require auth
|
||||
id := chi.URLParam(r, "id")
|
||||
if id == "" {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
err := s.Files.Delete(id)
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
reqID := middleware.GetReqID(r.Context())
|
||||
s.Logger.Infow("Deleted file", "id", id, "req_id", reqID)
|
||||
}
|
||||
|
||||
func (s *HTTPServer) processMultiPartFormUpload(w http.ResponseWriter, r *http.Request) {
|
||||
reqID := middleware.GetReqID(r.Context())
|
||||
|
||||
|
@@ -8,11 +8,15 @@ import (
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"git.t-juice.club/torjus/gpaste"
|
||||
"git.t-juice.club/torjus/gpaste/api"
|
||||
"git.t-juice.club/torjus/gpaste/files"
|
||||
"git.t-juice.club/torjus/gpaste/users"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func TestHandlers(t *testing.T) {
|
||||
@@ -99,6 +103,42 @@ func TestHandlers(t *testing.T) {
|
||||
}
|
||||
})
|
||||
})
|
||||
t.Run("HandlerAPIFileDelete", func(t *testing.T) {
|
||||
cfg := &gpaste.ServerConfig{
|
||||
SigningSecret: "abc123",
|
||||
Store: &gpaste.ServerStoreConfig{
|
||||
Type: "memory",
|
||||
},
|
||||
URL: "http://localhost:8080",
|
||||
}
|
||||
hs := api.NewHTTPServer(cfg)
|
||||
fileBody := io.NopCloser(strings.NewReader("roflcopter"))
|
||||
file := &files.File{
|
||||
ID: uuid.NewString(),
|
||||
OriginalFilename: "testpls.txt",
|
||||
MaxViews: 9,
|
||||
ExpiresOn: time.Now().Add(10 * time.Hour),
|
||||
Body: fileBody,
|
||||
}
|
||||
|
||||
if err := hs.Files.Store(file); err != nil {
|
||||
t.Fatalf("Error storing file: %s", err)
|
||||
}
|
||||
|
||||
rr := httptest.NewRecorder()
|
||||
url := fmt.Sprintf("/api/file/%s", file.ID)
|
||||
req := httptest.NewRequest(http.MethodDelete, url, nil)
|
||||
hs.Handler.ServeHTTP(rr, req)
|
||||
|
||||
if rr.Result().StatusCode != http.StatusOK {
|
||||
t.Fatalf("Delete returned wrong status: %s", rr.Result().Status)
|
||||
}
|
||||
|
||||
if _, err := hs.Files.Get(file.ID); err == nil {
|
||||
t.Errorf("Getting after delete returned no error")
|
||||
}
|
||||
|
||||
})
|
||||
t.Run("HandlerAPILogin", func(t *testing.T) {
|
||||
// TODO: Add test
|
||||
username := "admin"
|
||||
|
Reference in New Issue
Block a user