@@ -88,6 +88,11 @@ func validateAndNormaliseUserInput(appInfo supertokens.NormalisedAppinfo, config
8888 sessionExpiredStatusCode = * config .SessionExpiredStatusCode
8989 }
9090
91+ invalidClaimStatusCode := 403
92+ if config != nil && config .InvalidClaimStatusCode != nil {
93+ invalidClaimStatusCode = * config .InvalidClaimStatusCode
94+ }
95+
9196 if config != nil && config .AntiCsrf != nil {
9297 if * config .AntiCsrf != antiCSRF_NONE && * config .AntiCsrf != antiCSRF_VIA_CUSTOM_HEADER && * config .AntiCsrf != antiCSRF_VIA_TOKEN {
9398 return sessmodels.TypeNormalisedInput {}, errors .New ("antiCsrf config must be one of 'NONE' or 'VIA_CUSTOM_HEADER' or 'VIA_TOKEN'" )
@@ -127,6 +132,13 @@ func validateAndNormaliseUserInput(appInfo supertokens.NormalisedAppinfo, config
127132 }
128133 return sendUnauthorisedResponse (* recipeInstance , message , req , res )
129134 },
135+ OnInvalidClaim : func (validationErrors []claims.ClaimValidationError , req * http.Request , res http.ResponseWriter ) error {
136+ recipeInstance , err := getRecipeInstanceOrThrowError ()
137+ if err != nil {
138+ return err
139+ }
140+ return sendInvalidClaimResponse (* recipeInstance , validationErrors , req , res )
141+ },
130142 }
131143
132144 if config != nil && config .ErrorHandlers != nil {
@@ -136,6 +148,9 @@ func validateAndNormaliseUserInput(appInfo supertokens.NormalisedAppinfo, config
136148 if config .ErrorHandlers .OnUnauthorised != nil {
137149 errorHandlers .OnUnauthorised = config .ErrorHandlers .OnUnauthorised
138150 }
151+ if config .ErrorHandlers .OnInvalidClaim != nil {
152+ errorHandlers .OnInvalidClaim = config .ErrorHandlers .OnInvalidClaim
153+ }
139154 }
140155
141156 IsAnIPAPIDomain , err := supertokens .IsAnIPAddress (topLevelAPIDomain )
@@ -178,6 +193,7 @@ func validateAndNormaliseUserInput(appInfo supertokens.NormalisedAppinfo, config
178193 CookieSameSite : cookieSameSite ,
179194 CookieSecure : cookieSecure ,
180195 SessionExpiredStatusCode : sessionExpiredStatusCode ,
196+ InvalidClaimStatusCode : invalidClaimStatusCode ,
181197 AntiCsrf : antiCsrf ,
182198 ErrorHandlers : errorHandlers ,
183199 Jwt : Jwt ,
@@ -297,6 +313,13 @@ func sendUnauthorisedResponse(recipeInstance Recipe, _ string, _ *http.Request,
297313 return supertokens .SendNon200Response (response , "unauthorised" , recipeInstance .Config .SessionExpiredStatusCode )
298314}
299315
316+ func sendInvalidClaimResponse (recipeInstance Recipe , claimValidationErrors []claims.ClaimValidationError , _ * http.Request , response http.ResponseWriter ) error {
317+ return supertokens .SendNon200ResponseWithPayload (response , map [string ]interface {}{
318+ "message" : "invalid claim" ,
319+ "claimValidationErrors" : claimValidationErrors ,
320+ }, recipeInstance .Config .InvalidClaimStatusCode )
321+ }
322+
300323func sendTokenTheftDetectedResponse (recipeInstance Recipe , sessionHandle string , _ string , _ * http.Request , response http.ResponseWriter ) error {
301324 _ , err := (* recipeInstance .RecipeImpl .RevokeSession )(sessionHandle , & map [string ]interface {}{})
302325 if err != nil {
0 commit comments