@@ -714,3 +714,67 @@ func TestV2HasExtendedViewBehavior(t *testing.T) {
714714 assert .GreaterOrEqual (t , len (resp .Data ), 1 , "should see at least the planned event" )
715715 })
716716}
717+
718+ func TestV2InvalidTokenAndClaims (t * testing.T ) {
719+ truncateIncidents (t )
720+ r := initTestsWithHMAC (t )
721+
722+ creatorToken := generateTestToken ("user-a" , []string {"sd_creators" })
723+
724+ components := []int {1 , 2 }
725+ impact := 0
726+ system := false
727+ startDate := time .Now ().Add (time .Hour ).UTC ()
728+ endDate := time .Now ().Add (2 * time .Hour ).UTC ()
729+
730+ incData := v2.IncidentData {
731+ Title : "Test event" , Description : "test" ,
732+ ContactEmail : "test@example.com" , Impact : & impact ,
733+ Components : components , StartDate : startDate ,
734+ EndDate : & endDate , System : & system , Type : event .TypeMaintenance ,
735+ }
736+
737+ t .Run ("invalid token signature returns 401" , func (t * testing.T ) {
738+ wrongSecretToken := jwt .NewWithClaims (jwt .SigningMethodHS256 , jwt.MapClaims {
739+ "preferred_username" : "user-a" ,
740+ "groups" : []interface {}{"sd_creators" },
741+ })
742+ invalidToken , err := wrongSecretToken .SignedString ([]byte ("wrong-secret" ))
743+ require .NoError (t , err )
744+
745+ data , _ := json .Marshal (incData )
746+ w := httptest .NewRecorder ()
747+ req , _ := http .NewRequest (http .MethodPost , "/v2/events" , bytes .NewReader (data ))
748+ req .Header .Set ("Authorization" , "Bearer " + invalidToken )
749+ r .ServeHTTP (w , req )
750+
751+ assert .Equal (t , http .StatusUnauthorized , w .Code )
752+ })
753+
754+ t .Run ("valid token with invalid groups claim returns 401" , func (t * testing.T ) {
755+ invalidClaimsToken := jwt .NewWithClaims (jwt .SigningMethodHS256 , jwt.MapClaims {
756+ "preferred_username" : "user-a" ,
757+ "groups" : "sd_creators" ,
758+ })
759+ tokenWithInvalidClaims , err := invalidClaimsToken .SignedString ([]byte (testHMACSecret ))
760+ require .NoError (t , err )
761+
762+ data , _ := json .Marshal (incData )
763+ w := httptest .NewRecorder ()
764+ req , _ := http .NewRequest (http .MethodPost , "/v2/events" , bytes .NewReader (data ))
765+ req .Header .Set ("Authorization" , "Bearer " + tokenWithInvalidClaims )
766+ r .ServeHTTP (w , req )
767+
768+ assert .Equal (t , http .StatusUnauthorized , w .Code )
769+ })
770+
771+ t .Run ("valid token with valid claims succeeds" , func (t * testing.T ) {
772+ data , _ := json .Marshal (incData )
773+ w := httptest .NewRecorder ()
774+ req , _ := http .NewRequest (http .MethodPost , "/v2/events" , bytes .NewReader (data ))
775+ req .Header .Set ("Authorization" , "Bearer " + creatorToken )
776+ r .ServeHTTP (w , req )
777+
778+ assert .Equal (t , http .StatusOK , w .Code )
779+ })
780+ }
0 commit comments