43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package consul
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/hashicorp/consul/acl"
|
|
"github.com/hashicorp/consul/acl/resolver"
|
|
"github.com/hashicorp/consul/agent/rpc/operator"
|
|
"github.com/hashicorp/consul/proto/private/pboperator"
|
|
"github.com/hashicorp/raft"
|
|
)
|
|
|
|
type OperatorBackend struct {
|
|
srv *Server
|
|
}
|
|
|
|
// NewOperatorBackend returns a operator.Backend implementation that is bound to the given server.
|
|
func NewOperatorBackend(srv *Server) *OperatorBackend {
|
|
return &OperatorBackend{
|
|
srv: srv,
|
|
}
|
|
}
|
|
|
|
func (op *OperatorBackend) ResolveTokenAndDefaultMeta(token string, entMeta *acl.EnterpriseMeta, authzCtx *acl.AuthorizerContext) (resolver.Result, error) {
|
|
res, err := op.srv.ResolveTokenAndDefaultMeta(token, entMeta, authzCtx)
|
|
if err != nil {
|
|
return resolver.Result{}, err
|
|
}
|
|
if err := op.srv.validateEnterpriseToken(res.ACLIdentity); err != nil {
|
|
return resolver.Result{}, err
|
|
}
|
|
return res, err
|
|
}
|
|
|
|
func (op *OperatorBackend) TransferLeader(_ context.Context, request *pboperator.TransferLeaderRequest) (*pboperator.TransferLeaderResponse, error) {
|
|
reply := new(pboperator.TransferLeaderResponse)
|
|
err := op.srv.attemptLeadershipTransfer(raft.ServerID(request.ID))
|
|
reply.Success = err == nil
|
|
return reply, err
|
|
}
|
|
|
|
var _ operator.Backend = (*OperatorBackend)(nil)
|