82 lines
2.6 KiB
Go
82 lines
2.6 KiB
Go
package transport
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/influxdata/influxdb/v2"
|
|
"github.com/influxdata/influxdb/v2/authorizer"
|
|
"github.com/influxdata/influxdb/v2/kit/platform"
|
|
"github.com/influxdata/influxdb/v2/kit/platform/errors"
|
|
)
|
|
|
|
func newAuthCheckingService(underlying RemoteConnectionService) *authCheckingService {
|
|
return &authCheckingService{underlying}
|
|
}
|
|
|
|
type authCheckingService struct {
|
|
underlying RemoteConnectionService
|
|
}
|
|
|
|
var _ RemoteConnectionService = (*authCheckingService)(nil)
|
|
|
|
func (a authCheckingService) ListRemoteConnections(ctx context.Context, filter influxdb.RemoteConnectionListFilter) (*influxdb.RemoteConnections, error) {
|
|
rs, err := a.underlying.ListRemoteConnections(ctx, filter)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
rrs := rs.Remotes[:0]
|
|
for _, r := range rs.Remotes {
|
|
_, _, err := authorizer.AuthorizeRead(ctx, influxdb.RemotesResourceType, r.ID, r.OrgID)
|
|
if err != nil && errors.ErrorCode(err) != errors.EUnauthorized {
|
|
return nil, err
|
|
}
|
|
if errors.ErrorCode(err) == errors.EUnauthorized {
|
|
continue
|
|
}
|
|
rrs = append(rrs, r)
|
|
}
|
|
return &influxdb.RemoteConnections{Remotes: rrs}, nil
|
|
}
|
|
|
|
func (a authCheckingService) CreateRemoteConnection(ctx context.Context, request influxdb.CreateRemoteConnectionRequest) (*influxdb.RemoteConnection, error) {
|
|
if _, _, err := authorizer.AuthorizeCreate(ctx, influxdb.RemotesResourceType, request.OrgID); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return a.underlying.CreateRemoteConnection(ctx, request)
|
|
}
|
|
|
|
func (a authCheckingService) GetRemoteConnection(ctx context.Context, id platform.ID) (*influxdb.RemoteConnection, error) {
|
|
r, err := a.underlying.GetRemoteConnection(ctx, id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if _, _, err := authorizer.AuthorizeRead(ctx, influxdb.RemotesResourceType, id, r.OrgID); err != nil {
|
|
return nil, err
|
|
}
|
|
return r, nil
|
|
}
|
|
|
|
func (a authCheckingService) UpdateRemoteConnection(ctx context.Context, id platform.ID, request influxdb.UpdateRemoteConnectionRequest) (*influxdb.RemoteConnection, error) {
|
|
r, err := a.underlying.GetRemoteConnection(ctx, id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if _, _, err := authorizer.AuthorizeWrite(ctx, influxdb.RemotesResourceType, id, r.OrgID); err != nil {
|
|
return nil, err
|
|
}
|
|
return a.underlying.UpdateRemoteConnection(ctx, id, request)
|
|
}
|
|
|
|
func (a authCheckingService) DeleteRemoteConnection(ctx context.Context, id platform.ID) error {
|
|
r, err := a.underlying.GetRemoteConnection(ctx, id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if _, _, err := authorizer.AuthorizeWrite(ctx, influxdb.RemotesResourceType, id, r.OrgID); err != nil {
|
|
return err
|
|
}
|
|
return a.underlying.DeleteRemoteConnection(ctx, id)
|
|
}
|