forked from TrueCloudLab/frostfs-s3-gw
NFSSVC-27 Simplify ListBuckets handler
This commit is contained in:
parent
e59d62237e
commit
1ca3e6e04b
1 changed files with 38 additions and 45 deletions
|
@ -43,7 +43,6 @@ type (
|
||||||
|
|
||||||
cnrInfoParams struct {
|
cnrInfoParams struct {
|
||||||
cid refs.CID
|
cid refs.CID
|
||||||
con *grpc.ClientConn
|
|
||||||
tkn *service.BearerTokenMsg
|
tkn *service.BearerTokenMsg
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -51,6 +50,7 @@ type (
|
||||||
func (h *handler) getContainerInfo(ctx context.Context, p cnrInfoParams) (*Bucket, error) {
|
func (h *handler) getContainerInfo(ctx context.Context, p cnrInfoParams) (*Bucket, error) {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
|
con *grpc.ClientConn
|
||||||
res *container.GetResponse
|
res *container.GetResponse
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -59,9 +59,11 @@ func (h *handler) getContainerInfo(ctx context.Context, p cnrInfoParams) (*Bucke
|
||||||
req.SetTTL(service.SingleForwardingTTL)
|
req.SetTTL(service.SingleForwardingTTL)
|
||||||
req.SetBearer(p.tkn)
|
req.SetBearer(p.tkn)
|
||||||
|
|
||||||
if err = service.SignRequestData(h.key, req); err != nil {
|
if con, err = h.cli.GetConnection(ctx); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "could not fetch connection")
|
||||||
|
} else if err = service.SignRequestData(h.key, req); err != nil {
|
||||||
return nil, errors.Wrap(err, "could not sign container info request")
|
return nil, errors.Wrap(err, "could not sign container info request")
|
||||||
} else if res, err = container.NewServiceClient(p.con).Get(ctx, req); err != nil {
|
} else if res, err = container.NewServiceClient(con).Get(ctx, req); err != nil {
|
||||||
return nil, errors.Wrap(err, "could not fetch container info")
|
return nil, errors.Wrap(err, "could not fetch container info")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,13 +77,34 @@ func (h *handler) getContainerInfo(ctx context.Context, p cnrInfoParams) (*Bucke
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *handler) getContainerList(ctx context.Context, tkn *service.BearerTokenMsg) ([]refs.CID, error) {
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
con *grpc.ClientConn
|
||||||
|
res *container.ListResponse
|
||||||
|
)
|
||||||
|
|
||||||
|
req := new(container.ListRequest)
|
||||||
|
req.OwnerID = tkn.OwnerID
|
||||||
|
req.SetTTL(service.SingleForwardingTTL)
|
||||||
|
req.SetBearer(tkn)
|
||||||
|
|
||||||
|
if con, err = h.cli.GetConnection(ctx); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "could not fetch connection")
|
||||||
|
} else if err = service.SignRequestData(h.key, req); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "could not sign request")
|
||||||
|
} else if res, err = container.NewServiceClient(con).List(ctx, req); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "could not fetch list containers")
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.CID, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (h *handler) ListBucketsHandler(w http.ResponseWriter, r *http.Request) {
|
func (h *handler) ListBucketsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
uid = h.uid
|
|
||||||
inf *Bucket
|
inf *Bucket
|
||||||
con *grpc.ClientConn
|
lst []refs.CID
|
||||||
res *container.ListResponse
|
|
||||||
tkn *service.BearerTokenMsg
|
tkn *service.BearerTokenMsg
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -102,43 +125,11 @@ func (h *handler) ListBucketsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}, r.URL)
|
}, r.URL)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
} else if lst, err = h.getContainerList(ctx, tkn); err != nil {
|
||||||
|
h.log.Error("could not fetch bearer token",
|
||||||
req := new(container.ListRequest)
|
|
||||||
req.OwnerID = uid
|
|
||||||
req.SetTTL(service.SingleForwardingTTL)
|
|
||||||
req.SetBearer(tkn)
|
|
||||||
// req.SetVersion(APIVersion) ??
|
|
||||||
|
|
||||||
if con, err = h.cli.GetConnection(ctx); err != nil {
|
|
||||||
h.log.Error("could not get connection",
|
|
||||||
zap.Error(err))
|
zap.Error(err))
|
||||||
|
|
||||||
e := api.GetAPIError(api.ErrInternalError)
|
// TODO check that error isn't gRPC error
|
||||||
|
|
||||||
api.WriteErrorResponse(ctx, w, api.Error{
|
|
||||||
Code: e.Code,
|
|
||||||
Description: err.Error(),
|
|
||||||
HTTPStatusCode: e.HTTPStatusCode,
|
|
||||||
}, r.URL)
|
|
||||||
|
|
||||||
return
|
|
||||||
} else if err = service.SignRequestData(h.key, req); err != nil {
|
|
||||||
h.log.Error("could not prepare request",
|
|
||||||
zap.Error(err))
|
|
||||||
|
|
||||||
e := api.GetAPIError(api.ErrInternalError)
|
|
||||||
|
|
||||||
api.WriteErrorResponse(ctx, w, api.Error{
|
|
||||||
Code: e.Code,
|
|
||||||
Description: err.Error(),
|
|
||||||
HTTPStatusCode: e.HTTPStatusCode,
|
|
||||||
}, r.URL)
|
|
||||||
|
|
||||||
return
|
|
||||||
} else if res, err = container.NewServiceClient(con).List(ctx, req); err != nil {
|
|
||||||
h.log.Error("could not list buckets",
|
|
||||||
zap.Error(err))
|
|
||||||
|
|
||||||
e := api.GetAPIError(api.ErrInternalError)
|
e := api.GetAPIError(api.ErrInternalError)
|
||||||
|
|
||||||
|
@ -152,13 +143,13 @@ func (h *handler) ListBucketsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
result := &ListBucketsResponse{Owner: Owner{
|
result := &ListBucketsResponse{Owner: Owner{
|
||||||
ID: uid.String(),
|
ID: tkn.OwnerID.String(),
|
||||||
DisplayName: uid.String(),
|
DisplayName: tkn.OwnerID.String(),
|
||||||
}}
|
}}
|
||||||
|
|
||||||
params := cnrInfoParams{con: con, tkn: tkn}
|
params := cnrInfoParams{tkn: tkn}
|
||||||
|
|
||||||
for _, cid := range res.CID {
|
for _, cid := range lst {
|
||||||
// should receive each container info (??):
|
// should receive each container info (??):
|
||||||
params.cid = cid
|
params.cid = cid
|
||||||
|
|
||||||
|
@ -166,6 +157,8 @@ func (h *handler) ListBucketsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
h.log.Error("could not fetch bucket info",
|
h.log.Error("could not fetch bucket info",
|
||||||
zap.Error(err))
|
zap.Error(err))
|
||||||
|
|
||||||
|
// TODO check that error isn't gRPC error
|
||||||
|
|
||||||
e := api.GetAPIError(api.ErrInternalError)
|
e := api.GetAPIError(api.ErrInternalError)
|
||||||
|
|
||||||
api.WriteErrorResponse(ctx, w, api.Error{
|
api.WriteErrorResponse(ctx, w, api.Error{
|
||||||
|
|
Loading…
Reference in a new issue