From 6a135a6bb499faaa451c43b347cf525d79c82ca6 Mon Sep 17 00:00:00 2001 From: Denis Kirillov Date: Tue, 15 Jun 2021 16:59:51 +0300 Subject: [PATCH] [#82] Using bearer token Signed-off-by: Denis Kirillov --- api/layer/container.go | 20 +++++++++++--------- api/layer/layer.go | 11 ++++++++++- api/layer/object.go | 9 +++++---- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/api/layer/container.go b/api/layer/container.go index 55b5912e..0e73b53e 100644 --- a/api/layer/container.go +++ b/api/layer/container.go @@ -33,9 +33,10 @@ type ( func (n *layer) containerInfo(ctx context.Context, cid *cid.ID) (*BucketInfo, error) { var ( - err error - res *container.Container - rid = api.GetRequestID(ctx) + err error + res *container.Container + rid = api.GetRequestID(ctx) + bearerOpt = n.BearerOpt(ctx) info = &BucketInfo{ CID: cid, @@ -50,7 +51,7 @@ func (n *layer) containerInfo(ctx context.Context, cid *cid.ID) (*BucketInfo, er zap.Error(err)) return nil, err } - res, err = conn.GetContainer(ctx, cid) + res, err = conn.GetContainer(ctx, cid, bearerOpt) if err != nil { n.log.Error("could not fetch container", zap.Stringer("cid", cid), @@ -87,10 +88,11 @@ func (n *layer) containerInfo(ctx context.Context, cid *cid.ID) (*BucketInfo, er func (n *layer) containerList(ctx context.Context) ([]*BucketInfo, error) { var ( - err error - own = n.Owner(ctx) - res []*cid.ID - rid = api.GetRequestID(ctx) + err error + own = n.Owner(ctx) + bearerOpt = n.BearerOpt(ctx) + res []*cid.ID + rid = api.GetRequestID(ctx) ) conn, _, err := n.pool.Connection() @@ -100,7 +102,7 @@ func (n *layer) containerList(ctx context.Context) ([]*BucketInfo, error) { zap.Error(err)) return nil, err } - res, err = conn.ListContainers(ctx, own) + res, err = conn.ListContainers(ctx, own, bearerOpt) if err != nil { n.log.Error("could not fetch container", zap.String("request_id", rid), diff --git a/api/layer/layer.go b/api/layer/layer.go index 59ac8934..4f81afb4 100644 --- a/api/layer/layer.go +++ b/api/layer/layer.go @@ -113,10 +113,19 @@ func (n *layer) Owner(ctx context.Context) *owner.ID { return n.pool.OwnerID() } +// BearerOpt returns client.WithBearer call option with token from context or with nil token. +func (n *layer) BearerOpt(ctx context.Context) client.CallOption { + if tkn, ok := ctx.Value(api.BearerTokenKey).(*token.BearerToken); ok && tkn != nil { + return client.WithBearer(tkn) + } + + return client.WithBearer(nil) +} + // Get NeoFS Object by refs.Address (should be used by auth.Center). func (n *layer) Get(ctx context.Context, address *object.Address) (*object.Object, error) { ops := new(client.GetObjectParams).WithAddress(address) - return n.pool.GetObject(ctx, ops) + return n.pool.GetObject(ctx, ops, n.BearerOpt(ctx)) } // GetBucketInfo returns bucket info by name. diff --git a/api/layer/object.go b/api/layer/object.go index 0716f2ea..f1790146 100644 --- a/api/layer/object.go +++ b/api/layer/object.go @@ -42,7 +42,7 @@ func (n *layer) objectSearch(ctx context.Context, p *findParams) ([]*object.ID, } else if filename != "" { opts.AddFilter(object.AttributeFileName, filename, object.MatchStringEqual) } - return n.pool.SearchObject(ctx, new(client.SearchObjectParams).WithContainerID(p.cid).WithSearchFilters(opts)) + return n.pool.SearchObject(ctx, new(client.SearchObjectParams).WithContainerID(p.cid).WithSearchFilters(opts), n.BearerOpt(ctx)) } // objectFindID returns object id (uuid) based on it's nice name in s3. If @@ -62,7 +62,7 @@ func (n *layer) objectFindID(ctx context.Context, p *findParams) (*object.ID, er // objectHead returns all object's headers. func (n *layer) objectHead(ctx context.Context, address *object.Address) (*object.Object, error) { ops := new(client.ObjectHeaderParams).WithAddress(address).WithAllFields() - return n.pool.GetObjectHeader(ctx, ops) + return n.pool.GetObjectHeader(ctx, ops, n.BearerOpt(ctx)) } // objectGet and write it into provided io.Reader. @@ -70,7 +70,7 @@ func (n *layer) objectGet(ctx context.Context, p *getParams) (*object.Object, er // prepare length/offset writer w := newWriter(p.Writer, p.offset, p.length) ops := new(client.GetObjectParams).WithAddress(p.address).WithPayloadWriter(w) - return n.pool.GetObject(ctx, ops) + return n.pool.GetObject(ctx, ops, n.BearerOpt(ctx)) } // objectPut into NeoFS, took payload from io.Reader. @@ -128,6 +128,7 @@ func (n *layer) objectPut(ctx context.Context, p *PutObjectParams) (*ObjectInfo, oid, err := n.pool.PutObject( ctx, ops, + n.BearerOpt(ctx), ) if err != nil { return nil, err @@ -150,5 +151,5 @@ func (n *layer) objectPut(ctx context.Context, p *PutObjectParams) (*ObjectInfo, func (n *layer) objectDelete(ctx context.Context, address *object.Address) error { dop := new(client.DeleteObjectParams) dop.WithAddress(address) - return n.pool.DeleteObject(ctx, dop) + return n.pool.DeleteObject(ctx, dop, n.BearerOpt(ctx)) }