mirror of
https://github.com/status-im/consul.git
synced 2025-01-11 06:16:08 +00:00
agent/consul: RPC endpoints to list roots
This commit is contained in:
parent
130098b7b5
commit
5a950190f3
55
agent/consul/connect_ca_endpoint.go
Normal file
55
agent/consul/connect_ca_endpoint.go
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package consul
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/hashicorp/consul/agent/consul/state"
|
||||||
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
|
"github.com/hashicorp/go-memdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ConnectCA manages the Connect CA.
|
||||||
|
type ConnectCA struct {
|
||||||
|
// srv is a pointer back to the server.
|
||||||
|
srv *Server
|
||||||
|
}
|
||||||
|
|
||||||
|
// Roots returns the currently trusted root certificates.
|
||||||
|
func (s *ConnectCA) Roots(
|
||||||
|
args *structs.DCSpecificRequest,
|
||||||
|
reply *structs.IndexedCARoots) error {
|
||||||
|
// Forward if necessary
|
||||||
|
if done, err := s.srv.forward("ConnectCA.Roots", args, args, reply); done {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.srv.blockingQuery(
|
||||||
|
&args.QueryOptions, &reply.QueryMeta,
|
||||||
|
func(ws memdb.WatchSet, state *state.Store) error {
|
||||||
|
index, roots, err := state.CARoots(ws)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
reply.Index, reply.Roots = index, roots
|
||||||
|
if reply.Roots == nil {
|
||||||
|
reply.Roots = make(structs.CARoots, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The API response must NEVER contain the secret information
|
||||||
|
// such as keys and so on. We use a whitelist below to copy the
|
||||||
|
// specific fields we want to expose.
|
||||||
|
for i, r := range reply.Roots {
|
||||||
|
// IMPORTANT: r must NEVER be modified, since it is a pointer
|
||||||
|
// directly to the structure in the memdb store.
|
||||||
|
|
||||||
|
reply.Roots[i] = &structs.CARoot{
|
||||||
|
ID: r.ID,
|
||||||
|
Name: r.Name,
|
||||||
|
RootCert: r.RootCert,
|
||||||
|
RaftIndex: r.RaftIndex,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
@ -4,6 +4,7 @@ func init() {
|
|||||||
registerEndpoint(func(s *Server) interface{} { return &ACL{s} })
|
registerEndpoint(func(s *Server) interface{} { return &ACL{s} })
|
||||||
registerEndpoint(func(s *Server) interface{} { return &Catalog{s} })
|
registerEndpoint(func(s *Server) interface{} { return &Catalog{s} })
|
||||||
registerEndpoint(func(s *Server) interface{} { return NewCoordinate(s) })
|
registerEndpoint(func(s *Server) interface{} { return NewCoordinate(s) })
|
||||||
|
registerEndpoint(func(s *Server) interface{} { return &ConnectCA{s} })
|
||||||
registerEndpoint(func(s *Server) interface{} { return &Health{s} })
|
registerEndpoint(func(s *Server) interface{} { return &Health{s} })
|
||||||
registerEndpoint(func(s *Server) interface{} { return &Intention{s} })
|
registerEndpoint(func(s *Server) interface{} { return &Intention{s} })
|
||||||
registerEndpoint(func(s *Server) interface{} { return &Internal{s} })
|
registerEndpoint(func(s *Server) interface{} { return &Internal{s} })
|
||||||
|
Loading…
x
Reference in New Issue
Block a user