mirror of
https://github.com/kopia/kopia.git
synced 2026-01-27 15:58:03 -05:00
* fixed godot linter errors * reformatted source with gofumpt * disabled some linters * fixed nolintlint warnings * fixed gci warnings * lint: fixed 'nestif' warnings * lint: fixed 'exhaustive' warnings * lint: fixed 'gocritic' warnings * lint: fixed 'noctx' warnings * lint: fixed 'wsl' warnings * lint: fixed 'goerr113' warnings * lint: fixed 'gosec' warnings * lint: upgraded linter to 1.30.0 * lint: more 'exhaustive' warnings Co-authored-by: Nick <nick@kasten.io>
78 lines
1.8 KiB
Go
78 lines
1.8 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"io/ioutil"
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
|
|
"github.com/kopia/kopia/internal/serverapi"
|
|
"github.com/kopia/kopia/repo"
|
|
"github.com/kopia/kopia/repo/content"
|
|
)
|
|
|
|
func (s *Server) handleContentGet(ctx context.Context, r *http.Request) (interface{}, *apiError) {
|
|
dr, ok := s.rep.(*repo.DirectRepository)
|
|
if !ok {
|
|
return nil, notFoundError("content not found")
|
|
}
|
|
|
|
cid := content.ID(mux.Vars(r)["contentID"])
|
|
|
|
data, err := dr.Content.GetContent(ctx, cid)
|
|
if errors.Is(err, content.ErrContentNotFound) {
|
|
return nil, notFoundError("content not found")
|
|
}
|
|
|
|
return data, nil
|
|
}
|
|
|
|
func (s *Server) handleContentInfo(ctx context.Context, r *http.Request) (interface{}, *apiError) {
|
|
dr, ok := s.rep.(*repo.DirectRepository)
|
|
if !ok {
|
|
return nil, notFoundError("content not found")
|
|
}
|
|
|
|
cid := content.ID(mux.Vars(r)["contentID"])
|
|
|
|
ci, err := dr.Content.ContentInfo(ctx, cid)
|
|
switch err {
|
|
case nil:
|
|
return ci, nil
|
|
|
|
case content.ErrContentNotFound:
|
|
return nil, notFoundError("content not found")
|
|
|
|
default:
|
|
return nil, internalServerError(err)
|
|
}
|
|
}
|
|
|
|
func (s *Server) handleContentPut(ctx context.Context, r *http.Request) (interface{}, *apiError) {
|
|
dr, ok := s.rep.(*repo.DirectRepository)
|
|
if !ok {
|
|
return nil, notFoundError("content not found")
|
|
}
|
|
|
|
cid := content.ID(mux.Vars(r)["contentID"])
|
|
prefix := cid.Prefix()
|
|
|
|
data, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
return nil, requestError(serverapi.ErrorMalformedRequest, "malformed request body")
|
|
}
|
|
|
|
actualCID, err := dr.Content.WriteContent(ctx, data, prefix)
|
|
if err != nil {
|
|
return nil, internalServerError(err)
|
|
}
|
|
|
|
if actualCID != cid {
|
|
return nil, requestError(serverapi.ErrorMalformedRequest, "mismatched content ID")
|
|
}
|
|
|
|
return &serverapi.Empty{}, nil
|
|
}
|