Skip to content

Commit a9fa6be

Browse files
committed
new issue spiffe#522 potential solutions
1 parent d0c7a70 commit a9fa6be

File tree

2 files changed

+66
-169
lines changed

2 files changed

+66
-169
lines changed

api/agent/spire_apis.go

+48-83
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import (
44
"context"
55
"errors"
66

7-
"github.com/google/uuid"
8-
7+
tornjakTypes "github.com/spiffe/tornjak/pkg/agent/types"
98
grpc "google.golang.org/grpc"
109
"google.golang.org/grpc/credentials/insecure"
1110

@@ -21,8 +20,8 @@ import (
2120
type HealthcheckRequest grpc_health_v1.HealthCheckRequest
2221
type HealthcheckResponse grpc_health_v1.HealthCheckResponse
2322

24-
func (s *Server) SPIREHealthcheck(inp HealthcheckRequest) (*HealthcheckResponse, error) { //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
25-
inpReq := grpc_health_v1.HealthCheckRequest(inp) //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
23+
func (s *Server) SPIREHealthcheck(inp HealthcheckRequest) (*HealthcheckResponse, error) {
24+
inpReq := grpc_health_v1.HealthCheckRequest(inp)
2625
var conn *grpc.ClientConn
2726
conn, err := grpc.Dial(s.SpireServerAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
2827
if err != nil {
@@ -39,130 +38,96 @@ func (s *Server) SPIREHealthcheck(inp HealthcheckRequest) (*HealthcheckResponse,
3938
return (*HealthcheckResponse)(resp), nil
4039
}
4140

42-
type DebugServerRequest debugServer.GetInfoRequest
43-
type DebugServerResponse debugServer.GetInfoResponse
44-
45-
func (s *Server) DebugServer(inp DebugServerRequest) (*DebugServerResponse, error) { //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
46-
inpReq := debugServer.GetInfoRequest(inp) //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
47-
var conn *grpc.ClientConn
48-
conn, err := grpc.Dial(s.SpireServerAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
49-
if err != nil {
50-
return nil, err
51-
}
52-
defer conn.Close()
53-
client := debugServer.NewDebugClient(conn)
41+
type ListSelectorsRequest struct{}
42+
type ListSelectorsResponse tornjakTypes.AgentInfoList
5443

55-
resp, err := client.GetInfo(context.Background(), &inpReq)
44+
// ListSelectors returns a list of selectors from the local DB
45+
func (s *Server) ListSelectors(inp ListSelectorsRequest) (*ListSelectorsResponse, error) {
46+
resp, err := s.Db.GetAgentSelectors()
5647
if err != nil {
5748
return nil, err
5849
}
59-
60-
return (*DebugServerResponse)(resp), nil
50+
return (*ListSelectorsResponse)(&resp), nil
6151
}
6252

63-
type ListAgentsRequest agent.ListAgentsRequest
64-
type ListAgentsResponse agent.ListAgentsResponse
53+
type RegisterSelectorRequest tornjakTypes.AgentInfo
6554

66-
func (s *Server) ListAgents(inp ListAgentsRequest) (*ListAgentsResponse, error) { //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
67-
inpReq := agent.ListAgentsRequest(inp) //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
68-
var conn *grpc.ClientConn
69-
conn, err := grpc.Dial(s.SpireServerAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
70-
if err != nil {
71-
return nil, err
55+
// DefineSelectors registers an agent to the local DB
56+
func (s *Server) DefineSelectors(inp RegisterSelectorRequest) error {
57+
sinfo := tornjakTypes.AgentInfo(inp)
58+
if len(sinfo.Spiffeid) == 0 {
59+
return errors.New("agent's info missing mandatory field - Spiffeid")
7260
}
73-
defer conn.Close()
74-
client := agent.NewAgentClient(conn)
75-
76-
resp, err := client.ListAgents(context.Background(), &inpReq)
77-
if err != nil {
78-
return nil, err
79-
}
80-
81-
return (*ListAgentsResponse)(resp), nil
61+
return s.Db.CreateAgentEntry(sinfo)
8262
}
8363

84-
type BanAgentRequest agent.BanAgentRequest
64+
type UpdateSelectorRequest tornjakTypes.AgentInfo
8565

86-
func (s *Server) BanAgent(inp BanAgentRequest) error { //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
87-
inpReq := agent.BanAgentRequest(inp) //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
88-
var conn *grpc.ClientConn
89-
conn, err := grpc.Dial(s.SpireServerAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
90-
if err != nil {
91-
return err
92-
}
93-
defer conn.Close()
94-
client := agent.NewAgentClient(conn)
95-
96-
_, err = client.BanAgent(context.Background(), &inpReq)
97-
if err != nil {
98-
return err
66+
// UpdateSelectors updates an existing selector
67+
func (s *Server) UpdateSelectors(inp UpdateSelectorRequest) error {
68+
sinfo := tornjakTypes.AgentInfo(inp)
69+
if len(sinfo.Spiffeid) == 0 {
70+
return errors.New("agent's info missing mandatory field - Spiffeid")
9971
}
100-
101-
return nil
72+
return s.Db.UpdateAgentEntry(sinfo)
10273
}
10374

104-
type DeleteAgentRequest agent.DeleteAgentRequest
105-
106-
func (s *Server) DeleteAgent(inp DeleteAgentRequest) error { //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
107-
inpReq := agent.DeleteAgentRequest(inp) //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
108-
var conn *grpc.ClientConn
109-
conn, err := grpc.Dial(s.SpireServerAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
110-
if err != nil {
111-
return err
112-
}
113-
defer conn.Close()
114-
client := agent.NewAgentClient(conn)
75+
type DeleteSelectorRequest struct {
76+
Spiffeid string `json:"spiffeid"` // Identifier for the selector to delete
77+
}
11578

116-
_, err = client.DeleteAgent(context.Background(), &inpReq)
117-
if err != nil {
118-
return err
79+
// DeleteSelectors deletes a specified selector
80+
func (s *Server) DeleteSelectors(inp DeleteSelectorRequest) error {
81+
if len(inp.Spiffeid) == 0 {
82+
return errors.New("input missing mandatory field - Spiffeid")
11983
}
120-
121-
return nil
84+
return s.Db.DeleteAgentEntry(inp.Spiffeid)
12285
}
12386

124-
type CreateJoinTokenRequest agent.CreateJoinTokenRequest
125-
type CreateJoinTokenResponse types.JoinToken
87+
// Debug Server
88+
89+
type DebugServerRequest debugServer.GetInfoRequest
90+
type DebugServerResponse debugServer.GetInfoResponse
12691

127-
func (s *Server) CreateJoinToken(inp CreateJoinTokenRequest) (*CreateJoinTokenResponse, error) { //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
128-
inpReq := agent.CreateJoinTokenRequest(inp) //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
92+
func (s *Server) DebugServer(inp DebugServerRequest) (*DebugServerResponse, error) {
93+
inpReq := debugServer.GetInfoRequest(inp)
12994
var conn *grpc.ClientConn
13095
conn, err := grpc.Dial(s.SpireServerAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
13196
if err != nil {
13297
return nil, err
13398
}
13499
defer conn.Close()
135-
client := agent.NewAgentClient(conn)
100+
client := debugServer.NewDebugClient(conn)
136101

137-
joinToken, err := client.CreateJoinToken(context.Background(), &inpReq)
102+
resp, err := client.GetInfo(context.Background(), &inpReq)
138103
if err != nil {
139104
return nil, err
140105
}
141106

142-
return (*CreateJoinTokenResponse)(joinToken), nil
107+
return (*DebugServerResponse)(resp), nil
143108
}
144109

145-
// Entries
110+
// List Agents
146111

147-
type ListEntriesRequest entry.ListEntriesRequest
148-
type ListEntriesResponse entry.ListEntriesResponse
112+
type ListAgentsRequest agent.ListAgentsRequest
113+
type ListAgentsResponse agent.ListAgentsResponse
149114

150-
func (s *Server) ListEntries(inp ListEntriesRequest) (*ListEntriesResponse, error) { //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
151-
inpReq := entry.ListEntriesRequest(inp) //nolint:govet //Ignoring mutex (not being used) - sync.Mutex by value is unused for linter govet
115+
func (s *Server) ListAgents(inp ListAgentsRequest) (*ListAgentsResponse, error) {
116+
inpReq := agent.ListAgentsRequest(inp)
152117
var conn *grpc.ClientConn
153118
conn, err := grpc.Dial(s.SpireServerAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
154119
if err != nil {
155120
return nil, err
156121
}
157122
defer conn.Close()
158-
client := entry.NewEntryClient(conn)
123+
client := agent.NewAgentClient(conn)
159124

160-
resp, err := client.ListEntries(context.Background(), &inpReq)
125+
resp, err := client.ListAgents(context.Background(), &inpReq)
161126
if err != nil {
162127
return nil, err
163128
}
164129

165-
return (*ListEntriesResponse)(resp), nil
130+
return (*ListAgentsResponse)(resp), nil
166131
}
167132

168133
type BatchCreateEntryRequest entry.BatchCreateEntryRequest

api/agent/tornjak_apis.go

+18-86
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,12 @@ import (
66
tornjakTypes "github.com/spiffe/tornjak/pkg/agent/types"
77
)
88

9-
/*
10-
11-
Agent
12-
13-
ListAgents(ListAgentsRequest) returns (ListAgentsResponse);
14-
BanAgent(BanAgentRequest) returns (google.protobuf.Empty);
15-
DeleteAgent(DeleteAgentRequest) returns (google.protobuf.Empty);
16-
CreateJoinToken(CreateJoinTokenRequest) returns (spire.types.JoinToken);
17-
18-
Entries
19-
20-
ListEntries(ListEntriesRequest) returns (ListEntriesResponse);
21-
BatchCreateEntry(BatchCreateEntryRequest) returns (BatchCreateEntryResponse);
22-
GetEntry(GetEntryRequest) returns (spire.types.Entry);
23-
24-
*/
9+
// Existing types and functions...
2510

2611
type ListSelectorsRequest struct{}
2712
type ListSelectorsResponse tornjakTypes.AgentInfoList
2813

29-
// ListSelectors returns list of agents from the local DB with the following info
30-
// spiffeid string
31-
// plugin string
14+
// ListSelectors returns list of selectors from the local DB
3215
func (s *Server) ListSelectors(inp ListSelectorsRequest) (*ListSelectorsResponse, error) {
3316
resp, err := s.Db.GetAgentSelectors()
3417
if err != nil {
@@ -39,9 +22,7 @@ func (s *Server) ListSelectors(inp ListSelectorsRequest) (*ListSelectorsResponse
3922

4023
type RegisterSelectorRequest tornjakTypes.AgentInfo
4124

42-
// DefineSelectors registers an agent to the local DB with the following info
43-
// spiffeid string
44-
// plugin string
25+
// DefineSelectors registers an agent to the local DB
4526
func (s *Server) DefineSelectors(inp RegisterSelectorRequest) error {
4627
sinfo := tornjakTypes.AgentInfo(inp)
4728
if len(sinfo.Spiffeid) == 0 {
@@ -50,76 +31,27 @@ func (s *Server) DefineSelectors(inp RegisterSelectorRequest) error {
5031
return s.Db.CreateAgentEntry(sinfo)
5132
}
5233

53-
type ListAgentMetadataRequest tornjakTypes.AgentMetadataRequest
54-
type ListAgentMetadataResponse tornjakTypes.AgentInfoList
55-
56-
// ListAgentMetadata takes in list of agent spiffeids
57-
// and returns list of those agents from the local DB with following info
58-
// spiffeid string
59-
// plugin string
60-
// cluster string
61-
// if no metadata found, no row is included
62-
// if no spiffeids are specified, all agent metadata is returned
63-
func (s *Server) ListAgentMetadata(inp ListAgentMetadataRequest) (*ListAgentMetadataResponse, error) {
64-
inpReq := tornjakTypes.AgentMetadataRequest(inp)
65-
resp, err := s.Db.GetAgentsMetadata(inpReq)
66-
if err != nil {
67-
return nil, err
68-
}
69-
return (*ListAgentMetadataResponse)(&resp), nil
70-
}
71-
72-
type ListClustersRequest struct{}
73-
type ListClustersResponse tornjakTypes.ClusterInfoList
34+
type UpdateSelectorRequest tornjakTypes.AgentInfo
7435

75-
// ListClusters returns list of clusters from the local DB with the following info
76-
// name string
77-
// details json
78-
func (s *Server) ListClusters(inp ListClustersRequest) (*ListClustersResponse, error) {
79-
retVal, err := s.Db.GetClusters()
80-
if err != nil {
81-
return nil, err
36+
// UpdateSelectors updates an existing selector
37+
func (s *Server) UpdateSelectors(inp UpdateSelectorRequest) error {
38+
sinfo := tornjakTypes.AgentInfo(inp)
39+
if len(sinfo.Spiffeid) == 0 {
40+
return errors.New("agent's info missing mandatory field - Spiffeid")
8241
}
83-
return (*ListClustersResponse)(&retVal), nil
42+
return s.Db.UpdateAgentEntry(sinfo) // Assume UpdateAgentEntry is implemented in your Db interface
8443
}
8544

86-
type RegisterClusterRequest tornjakTypes.ClusterInput
87-
88-
// DefineCluster registers cluster to local DB
89-
func (s *Server) DefineCluster(inp RegisterClusterRequest) error {
90-
cinfo := tornjakTypes.ClusterInfo(inp.ClusterInstance)
91-
if len(cinfo.Name) == 0 {
92-
return errors.New("cluster definition missing mandatory field - Name")
93-
} else if len(cinfo.PlatformType) == 0 {
94-
return errors.New("cluster definition missing mandatory field - PlatformType")
95-
} else if len(cinfo.EditedUid) > 0 {
96-
return errors.New("cluster definition attempts renaming on create cluster - EditedUid")
97-
}
98-
return s.Db.CreateClusterEntry(cinfo)
45+
type DeleteSelectorRequest struct {
46+
Spiffeid string `json:"spiffeid"` // Identifier for the selector to delete
9947
}
10048

101-
type EditClusterRequest tornjakTypes.ClusterInput
102-
103-
// EditCluster registers cluster to local DB
104-
func (s *Server) EditCluster(inp EditClusterRequest) error {
105-
cinfo := tornjakTypes.ClusterInfo(inp.ClusterInstance)
106-
if len(cinfo.Uid) == 0 {
107-
return errors.New("cluster definition missing mandatory field - Name")
108-
} else if len(cinfo.PlatformType) == 0 {
109-
return errors.New("cluster definition missing mandatory field - PlatformType")
110-
} else if len(cinfo.EditedUid) == 0 {
111-
return errors.New("cluster definition missing mandatory field - EditedUid")
49+
// DeleteSelectors deletes a specified selector
50+
func (s *Server) DeleteSelectors(inp DeleteSelectorRequest) error {
51+
if len(inp.Spiffeid) == 0 {
52+
return errors.New("input missing mandatory field - Spiffeid")
11253
}
113-
return s.Db.EditClusterEntry(cinfo)
54+
return s.Db.DeleteAgentEntry(inp.Spiffeid) // Assume DeleteAgentEntry is implemented in your Db interface
11455
}
11556

116-
type DeleteClusterRequest tornjakTypes.ClusterInput
117-
118-
// DeleteCluster deletes cluster with name cinfo.Name and assignment to agents
119-
func (s *Server) DeleteCluster(inp DeleteClusterRequest) error {
120-
cinfo := tornjakTypes.ClusterInfo(inp.ClusterInstance)
121-
if len(cinfo.Name) == 0 {
122-
return errors.New("input missing mandatory field - Name")
123-
}
124-
return s.Db.DeleteClusterEntry(cinfo.Name)
125-
}
57+
// Existing ListAgentMetadata, ListClusters, etc...

0 commit comments

Comments
 (0)