github.com/influxdata/influxdb/v2@v2.7.6/remotes/transport/middleware_auth.go (about) 1 package transport 2 3 import ( 4 "context" 5 6 "github.com/influxdata/influxdb/v2" 7 "github.com/influxdata/influxdb/v2/authorizer" 8 "github.com/influxdata/influxdb/v2/kit/platform" 9 "github.com/influxdata/influxdb/v2/kit/platform/errors" 10 ) 11 12 func newAuthCheckingService(underlying RemoteConnectionService) *authCheckingService { 13 return &authCheckingService{underlying} 14 } 15 16 type authCheckingService struct { 17 underlying RemoteConnectionService 18 } 19 20 var _ RemoteConnectionService = (*authCheckingService)(nil) 21 22 func (a authCheckingService) ListRemoteConnections(ctx context.Context, filter influxdb.RemoteConnectionListFilter) (*influxdb.RemoteConnections, error) { 23 rs, err := a.underlying.ListRemoteConnections(ctx, filter) 24 if err != nil { 25 return nil, err 26 } 27 28 rrs := rs.Remotes[:0] 29 for _, r := range rs.Remotes { 30 _, _, err := authorizer.AuthorizeRead(ctx, influxdb.RemotesResourceType, r.ID, r.OrgID) 31 if err != nil && errors.ErrorCode(err) != errors.EUnauthorized { 32 return nil, err 33 } 34 if errors.ErrorCode(err) == errors.EUnauthorized { 35 continue 36 } 37 rrs = append(rrs, r) 38 } 39 return &influxdb.RemoteConnections{Remotes: rrs}, nil 40 } 41 42 func (a authCheckingService) CreateRemoteConnection(ctx context.Context, request influxdb.CreateRemoteConnectionRequest) (*influxdb.RemoteConnection, error) { 43 if _, _, err := authorizer.AuthorizeCreate(ctx, influxdb.RemotesResourceType, request.OrgID); err != nil { 44 return nil, err 45 } 46 47 return a.underlying.CreateRemoteConnection(ctx, request) 48 } 49 50 func (a authCheckingService) GetRemoteConnection(ctx context.Context, id platform.ID) (*influxdb.RemoteConnection, error) { 51 r, err := a.underlying.GetRemoteConnection(ctx, id) 52 if err != nil { 53 return nil, err 54 } 55 if _, _, err := authorizer.AuthorizeRead(ctx, influxdb.RemotesResourceType, id, r.OrgID); err != nil { 56 return nil, err 57 } 58 return r, nil 59 } 60 61 func (a authCheckingService) UpdateRemoteConnection(ctx context.Context, id platform.ID, request influxdb.UpdateRemoteConnectionRequest) (*influxdb.RemoteConnection, error) { 62 r, err := a.underlying.GetRemoteConnection(ctx, id) 63 if err != nil { 64 return nil, err 65 } 66 if _, _, err := authorizer.AuthorizeWrite(ctx, influxdb.RemotesResourceType, id, r.OrgID); err != nil { 67 return nil, err 68 } 69 return a.underlying.UpdateRemoteConnection(ctx, id, request) 70 } 71 72 func (a authCheckingService) DeleteRemoteConnection(ctx context.Context, id platform.ID) error { 73 r, err := a.underlying.GetRemoteConnection(ctx, id) 74 if err != nil { 75 return err 76 } 77 if _, _, err := authorizer.AuthorizeWrite(ctx, influxdb.RemotesResourceType, id, r.OrgID); err != nil { 78 return err 79 } 80 return a.underlying.DeleteRemoteConnection(ctx, id) 81 }