@@ -47,11 +47,11 @@ var _ = Describe("agent service", Ordered, func() {
4747 Expect (tx .Error ).To (BeNil ())
4848 agentID := uuid .New ()
4949
50- user := auth.User {
51- Username : "admin" ,
52- Organization : "admin" ,
50+ agentJWT := auth.AgentJWT {
51+ OrgID : "admin" ,
52+ SourceID : sourceID . String () ,
5353 }
54- ctx := auth .NewTokenContext (context .TODO (), user )
54+ ctx := auth .NewTokenContext (context .TODO (), agentJWT )
5555
5656 srv := handlers .NewAgentHandler (service .NewAgentService (s ))
5757 resp , err := srv .UpdateAgentStatus (ctx , server.UpdateAgentStatusRequestObject {
@@ -94,11 +94,11 @@ var _ = Describe("agent service", Ordered, func() {
9494 Expect (tx .Error ).To (BeNil ())
9595 agentID := uuid .New ()
9696
97- user := auth.User {
98- Username : "admin" ,
99- Organization : "admin" ,
97+ agentJWT := auth.AgentJWT {
98+ OrgID : "admin" ,
99+ SourceID : sourceID . String () ,
100100 }
101- ctx := auth .NewTokenContext (context .TODO (), user )
101+ ctx := auth .NewTokenContext (context .TODO (), agentJWT )
102102
103103 srv := handlers .NewAgentHandler (service .NewAgentService (s ))
104104 resp , err := srv .UpdateAgentStatus (ctx , server.UpdateAgentStatusRequestObject {
@@ -128,11 +128,11 @@ var _ = Describe("agent service", Ordered, func() {
128128 tx = gormdb .Exec (fmt .Sprintf (insertAgentStm , agentID , "not-connected" , "status-info-1" , "cred_url-1" , sourceID ))
129129 Expect (tx .Error ).To (BeNil ())
130130
131- user := auth.User {
132- Username : "admin" ,
133- Organization : "admin" ,
131+ agentJWT := auth.AgentJWT {
132+ OrgID : "admin" ,
133+ SourceID : sourceID . String () ,
134134 }
135- ctx := auth .NewTokenContext (context .TODO (), user )
135+ ctx := auth .NewTokenContext (context .TODO (), agentJWT )
136136
137137 srv := handlers .NewAgentHandler (service .NewAgentService (s ))
138138 resp , err := srv .UpdateAgentStatus (ctx , server.UpdateAgentStatusRequestObject {
@@ -174,11 +174,11 @@ var _ = Describe("agent service", Ordered, func() {
174174 tx := gormdb .Exec (fmt .Sprintf (insertSourceWithUsernameStm , sourceID , "admin" , "admin" ))
175175 Expect (tx .Error ).To (BeNil ())
176176
177- user := auth.User {
178- Username : "batman " ,
179- Organization : "wayne_enterprises" ,
177+ agentJWT := auth.AgentJWT {
178+ OrgID : "wayne_enterprises " ,
179+ SourceID : sourceID ,
180180 }
181- ctx := auth .NewTokenContext (context .TODO (), user )
181+ ctx := auth .NewTokenContext (context .TODO (), agentJWT )
182182
183183 srv := handlers .NewAgentHandler (service .NewAgentService (s ))
184184 resp , err := srv .UpdateAgentStatus (ctx , server.UpdateAgentStatusRequestObject {
@@ -194,6 +194,41 @@ var _ = Describe("agent service", Ordered, func() {
194194 Expect (reflect .TypeOf (resp ).String ()).To (Equal (reflect .TypeOf (server.UpdateAgentStatus400JSONResponse {}).String ()))
195195 })
196196
197+ It ("rejects update when JWT source_id does not match target source" , func () {
198+ sourceID := uuid .New ()
199+ differentSourceID := uuid .New ()
200+ tx := gormdb .Exec (fmt .Sprintf (insertSourceWithUsernameStm , sourceID , "admin" , "admin" ))
201+ Expect (tx .Error ).To (BeNil ())
202+ agentID := uuid .New ()
203+
204+ // JWT has a different source_id than the one being updated
205+ agentJWT := auth.AgentJWT {
206+ OrgID : "admin" ,
207+ SourceID : differentSourceID .String (),
208+ }
209+ ctx := auth .NewTokenContext (context .TODO (), agentJWT )
210+
211+ srv := handlers .NewAgentHandler (service .NewAgentService (s ))
212+ resp , err := srv .UpdateAgentStatus (ctx , server.UpdateAgentStatusRequestObject {
213+ Id : agentID ,
214+ Body : & apiAgent.UpdateAgentStatusJSONRequestBody {
215+ Status : string (v1alpha1 .AgentStatusWaitingForCredentials ),
216+ StatusInfo : "waiting-for-credentials" ,
217+ CredentialUrl : "http://agent.com" ,
218+ Version : "version-1" ,
219+ SourceId : sourceID ,
220+ },
221+ })
222+ Expect (err ).To (BeNil ())
223+ Expect (reflect .TypeOf (resp ).String ()).To (Equal (reflect .TypeOf (server.UpdateAgentStatus403JSONResponse {}).String ()))
224+
225+ // Verify no agent was created
226+ count := - 1
227+ tx = gormdb .Raw ("SELECT COUNT(*) FROM agents;" ).Scan (& count )
228+ Expect (tx .Error ).To (BeNil ())
229+ Expect (count ).To (Equal (0 ))
230+ })
231+
197232 AfterEach (func () {
198233 gormdb .Exec ("DELETE FROM agents;" )
199234 gormdb .Exec ("DELETE FROM sources;" )
@@ -209,11 +244,11 @@ var _ = Describe("agent service", Ordered, func() {
209244 tx = gormdb .Exec (fmt .Sprintf (insertAgentStm , agentID , "not-connected" , "status-info-1" , "cred_url-1" , sourceID ))
210245 Expect (tx .Error ).To (BeNil ())
211246
212- user := auth.User {
213- Username : "admin" ,
214- Organization : "admin" ,
247+ agentJWT := auth.AgentJWT {
248+ OrgID : "admin" ,
249+ SourceID : sourceID . String () ,
215250 }
216- ctx := auth .NewTokenContext (context .TODO (), user )
251+ ctx := auth .NewTokenContext (context .TODO (), agentJWT )
217252
218253 srv := handlers .NewAgentHandler (service .NewAgentService (s ))
219254 resp , err := srv .UpdateSourceInventory (ctx , server.UpdateSourceInventoryRequestObject {
@@ -251,11 +286,11 @@ var _ = Describe("agent service", Ordered, func() {
251286 tx = gormdb .Exec (fmt .Sprintf (insertAgentStm , secondAgentID , "not-connected" , "status-info-1" , "cred_url-1" , sourceID ))
252287 Expect (tx .Error ).To (BeNil ())
253288
254- user := auth.User {
255- Username : "admin" ,
256- Organization : "admin" ,
289+ agentJWT := auth.AgentJWT {
290+ OrgID : "admin" ,
291+ SourceID : sourceID . String () ,
257292 }
258- ctx := auth .NewTokenContext (context .TODO (), user )
293+ ctx := auth .NewTokenContext (context .TODO (), agentJWT )
259294
260295 // first agent request
261296 srv := handlers .NewAgentHandler (service .NewAgentService (s ))
@@ -308,11 +343,11 @@ var _ = Describe("agent service", Ordered, func() {
308343 tx = gormdb .Exec (fmt .Sprintf (insertAgentStm , uuid .New (), "not-connected" , "status-info-1" , "cred_url-1" , secondSourceID ))
309344 Expect (tx .Error ).To (BeNil ())
310345
311- user := auth.User {
312- Username : "admin" ,
313- Organization : "admin" ,
346+ agentJWT := auth.AgentJWT {
347+ OrgID : "admin" ,
348+ SourceID : firstSourceID . String () ,
314349 }
315- ctx := auth .NewTokenContext (context .TODO (), user )
350+ ctx := auth .NewTokenContext (context .TODO (), agentJWT )
316351
317352 srv := handlers .NewAgentHandler (service .NewAgentService (s ))
318353 resp , err := srv .UpdateSourceInventory (ctx , server.UpdateSourceInventoryRequestObject {
@@ -334,11 +369,11 @@ var _ = Describe("agent service", Ordered, func() {
334369 tx = gormdb .Exec (fmt .Sprintf (insertAgentStm , firstAgentID , "not-connected" , "status-info-1" , "cred_url-1" , firstSourceID ))
335370 Expect (tx .Error ).To (BeNil ())
336371
337- user := auth.User {
338- Username : "admin" ,
339- Organization : "admin" ,
372+ agentJWT := auth.AgentJWT {
373+ OrgID : "admin" ,
374+ SourceID : firstSourceID . String () ,
340375 }
341- ctx := auth .NewTokenContext (context .TODO (), user )
376+ ctx := auth .NewTokenContext (context .TODO (), agentJWT )
342377
343378 srv := handlers .NewAgentHandler (service .NewAgentService (s ))
344379 resp , err := srv .UpdateSourceInventory (ctx , server.UpdateSourceInventoryRequestObject {
@@ -367,6 +402,41 @@ var _ = Describe("agent service", Ordered, func() {
367402
368403 })
369404
405+ It ("rejects inventory update when JWT source_id does not match target source" , func () {
406+ sourceID := uuid .New ()
407+ differentSourceID := uuid .New ()
408+ agentID := uuid .New ()
409+ tx := gormdb .Exec (fmt .Sprintf (insertSourceWithUsernameStm , sourceID , "admin" , "admin" ))
410+ Expect (tx .Error ).To (BeNil ())
411+ tx = gormdb .Exec (fmt .Sprintf (insertAgentStm , agentID , "not-connected" , "status-info-1" , "cred_url-1" , sourceID ))
412+ Expect (tx .Error ).To (BeNil ())
413+
414+ // JWT has a different source_id than the one being updated
415+ agentJWT := auth.AgentJWT {
416+ OrgID : "admin" ,
417+ SourceID : differentSourceID .String (),
418+ }
419+ ctx := auth .NewTokenContext (context .TODO (), agentJWT )
420+
421+ srv := handlers .NewAgentHandler (service .NewAgentService (s ))
422+ resp , err := srv .UpdateSourceInventory (ctx , server.UpdateSourceInventoryRequestObject {
423+ Id : sourceID ,
424+ Body : & apiAgent.SourceStatusUpdate {
425+ AgentId : agentID ,
426+ Inventory : v1alpha1.Inventory {
427+ VcenterId : "vcenter" ,
428+ },
429+ },
430+ })
431+ Expect (err ).To (BeNil ())
432+ Expect (reflect .TypeOf (resp ).String ()).To (Equal (reflect .TypeOf (server.UpdateSourceInventory403JSONResponse {}).String ()))
433+
434+ // Verify inventory was not updated
435+ source , err := s .Source ().Get (ctx , sourceID )
436+ Expect (err ).To (BeNil ())
437+ Expect (source .Inventory ).To (BeNil ())
438+ })
439+
370440 AfterEach (func () {
371441 gormdb .Exec ("DELETE FROM agents;" )
372442 gormdb .Exec ("DELETE FROM sources;" )
0 commit comments