Compare commits
7 Commits
73515f2183
...
master
Author | SHA1 | Date | |
---|---|---|---|
2739dafe3d | |||
a0c06e5615 | |||
54ff777532 | |||
f5de660a4c | |||
76bdfd8166 | |||
a66d7b9be9 | |||
ec4a1e8294 |
13
Dockerfile
Normal file
13
Dockerfile
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
FROM golang:alpine as builder
|
||||||
|
WORKDIR /app
|
||||||
|
COPY go.mod .
|
||||||
|
COPY go.sum .
|
||||||
|
RUN go mod download
|
||||||
|
COPY . .
|
||||||
|
RUN go build -o minipaste minipaste.go
|
||||||
|
|
||||||
|
FROM alpine:latest
|
||||||
|
RUN apk add --no-cache curl
|
||||||
|
COPY --from=builder /app/minipaste /usr/bin/minipaste
|
||||||
|
HEALTHCHECK --interval=10s --start-period=5s CMD curl --fail http://localhost:8080 || exit 1
|
||||||
|
CMD ["/usr/bin/minipaste"]
|
2
go.mod
2
go.mod
@@ -4,4 +4,4 @@ go 1.18
|
|||||||
|
|
||||||
require github.com/google/uuid v1.3.0
|
require github.com/google/uuid v1.3.0
|
||||||
|
|
||||||
require github.com/go-chi/chi/v5 v5.0.7 // indirect
|
require github.com/go-chi/chi/v5 v5.0.7
|
||||||
|
@@ -10,3 +10,7 @@ type ResponseIndex struct {
|
|||||||
type ResponseAPIPost struct {
|
type ResponseAPIPost struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ResponseAPIList struct {
|
||||||
|
IDs []string `json:"ids"`
|
||||||
|
}
|
||||||
|
@@ -34,6 +34,7 @@ func NewServer(s store.Store) *Server {
|
|||||||
r.Get("/", srv.HandlerIndexGet)
|
r.Get("/", srv.HandlerIndexGet)
|
||||||
r.Route("/api", func(r chi.Router) {
|
r.Route("/api", func(r chi.Router) {
|
||||||
r.Get("/{id}", srv.HandlerAPIGet)
|
r.Get("/{id}", srv.HandlerAPIGet)
|
||||||
|
r.Get("/", srv.HandlerAPIList)
|
||||||
r.Post("/", srv.HandlerAPIPost)
|
r.Post("/", srv.HandlerAPIPost)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -101,6 +102,7 @@ func (s *Server) HandlerAPIPost(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Is not multipart
|
// Is not multipart
|
||||||
|
// TODO: Not working
|
||||||
if mediaType == "application/x-www-form-urlencoded" {
|
if mediaType == "application/x-www-form-urlencoded" {
|
||||||
if err := r.ParseForm(); err != nil {
|
if err := r.ParseForm(); err != nil {
|
||||||
log.Printf("Error parsing form: %s", err)
|
log.Printf("Error parsing form: %s", err)
|
||||||
@@ -145,3 +147,17 @@ func (s *Server) HandlerAPIGet(w http.ResponseWriter, r *http.Request) {
|
|||||||
log.Panicf("Error writing to client: %s", err)
|
log.Panicf("Error writing to client: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) HandlerAPIList(w http.ResponseWriter, r *http.Request) {
|
||||||
|
ids, err := s.store.List()
|
||||||
|
if err != nil {
|
||||||
|
log.Panicf("Error listing store contents: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := &ResponseAPIList{IDs: ids}
|
||||||
|
encoder := json.NewEncoder(w)
|
||||||
|
|
||||||
|
if err := encoder.Encode(resp); err != nil {
|
||||||
|
log.Panicf("Error encoding response to client: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -8,6 +8,8 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var _ Store = &MemoryStore{}
|
||||||
|
|
||||||
type MemoryStore struct {
|
type MemoryStore struct {
|
||||||
data map[string][]byte
|
data map[string][]byte
|
||||||
}
|
}
|
||||||
@@ -44,3 +46,12 @@ func (s *MemoryStore) Get(id string) (io.ReadCloser, error) {
|
|||||||
|
|
||||||
return r, nil
|
return r, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *MemoryStore) List() ([]string, error) {
|
||||||
|
var ids []string
|
||||||
|
for id := range s.data {
|
||||||
|
ids = append(ids, id)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ids, nil
|
||||||
|
}
|
||||||
|
@@ -11,4 +11,5 @@ type Store interface {
|
|||||||
Add(r io.Reader) (string, error)
|
Add(r io.Reader) (string, error)
|
||||||
Delete(id string) error
|
Delete(id string) error
|
||||||
Get(id string) (io.ReadCloser, error)
|
Get(id string) (io.ReadCloser, error)
|
||||||
|
List() ([]string, error)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user