chore: fixes to paste ui
This commit is contained in:
@@ -71,8 +71,10 @@ func (a *image) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
dec := base64.NewDecoder(base64.StdEncoding, fd)
|
||||
fd = io.NopCloser(dec)
|
||||
}
|
||||
|
||||
|
||||
length := 0
|
||||
if h := r.Header.Get("Content-Length"); h != "" {
|
||||
if i, err := strconv.Atoi(h); err != nil {
|
||||
@@ -80,34 +82,39 @@ func (a *image) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
id, err := a.put(ctx, w, fd, length)
|
||||
switch {
|
||||
case errors.Is(err, ErrGone):
|
||||
w.WriteHeader(http.StatusGone)
|
||||
case errors.Is(err, ErrNotFound):
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
case errors.Is(err, ErrReadingContent):
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
case errors.Is(err, ErrUnsupportedType):
|
||||
w.WriteHeader(http.StatusUnsupportedMediaType)
|
||||
if err != nil {
|
||||
switch {
|
||||
case errors.Is(err, ErrGone):
|
||||
w.WriteHeader(http.StatusGone)
|
||||
case errors.Is(err, ErrNotFound):
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
case errors.Is(err, ErrReadingContent):
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
case errors.Is(err, ErrUnsupportedType):
|
||||
w.WriteHeader(http.StatusUnsupportedMediaType)
|
||||
}
|
||||
span.RecordError(err)
|
||||
return
|
||||
}
|
||||
|
||||
type data struct{
|
||||
Link string `json:"link"`
|
||||
type data struct {
|
||||
Link string `json:"link"`
|
||||
DeleteHash string `json:"deletehash"`
|
||||
}
|
||||
var resp = struct{
|
||||
Data data `json:"data"`
|
||||
var resp = struct {
|
||||
Data data `json:"data"`
|
||||
Success bool `json:"success"`
|
||||
Status int `json:"status"`
|
||||
Status int `json:"status"`
|
||||
}{
|
||||
Data: data{
|
||||
Link: fmt.Sprintf("https://%s/i/%s", r.Host, id),
|
||||
},
|
||||
Success: true,
|
||||
Status: 200,
|
||||
Status: 200,
|
||||
}
|
||||
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
err = json.NewEncoder(w).Encode(resp)
|
||||
span.RecordError(err)
|
||||
|
||||
default:
|
||||
http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
|
||||
@@ -165,6 +172,7 @@ func (a *image) put(ctx context.Context, w http.ResponseWriter, r io.ReadCloser,
|
||||
rdr := io.LimitReader(r, a.maxSize)
|
||||
pr := readutil.NewPreviewReader(rdr)
|
||||
if !isImageOrVideo(pr) {
|
||||
span.AddEvent("not image")
|
||||
return "", ErrUnsupportedType
|
||||
}
|
||||
rdr = pr.Drain()
|
||||
@@ -172,6 +180,7 @@ func (a *image) put(ctx context.Context, w http.ResponseWriter, r io.ReadCloser,
|
||||
s256 := sha256.New()
|
||||
tmp, err := os.CreateTemp(a.store, "image-")
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
return "", fmt.Errorf("%w: %w", ErrBadInput, err)
|
||||
}
|
||||
|
||||
@@ -179,6 +188,7 @@ func (a *image) put(ctx context.Context, w http.ResponseWriter, r io.ReadCloser,
|
||||
|
||||
m := io.MultiWriter(s256, tmp)
|
||||
if _, err := io.Copy(m, rdr); err != nil {
|
||||
span.RecordError(err)
|
||||
return "", fmt.Errorf("%w: %w", ErrBadInput, err)
|
||||
}
|
||||
tmp.Close()
|
||||
|
||||
Reference in New Issue
Block a user