@@ -925,6 +925,56 @@ func TestThatVerifySessionReturns401IfNoAccessTokenIsSentAndMiddlewareIsNotAdded
925925 assert .Equal (t , res .StatusCode , 401 )
926926}
927927
928+ func TestThatAntiCSRFCheckIsSkippedIfSessionRequiredIsFalseAndNoAccessTokenIsPassed (t * testing.T ) {
929+ AntiCsrf := AntiCSRF_VIA_CUSTOM_HEADER
930+ configValue := supertokens.TypeInput {
931+ Supertokens : & supertokens.ConnectionInfo {
932+ ConnectionURI : "http://localhost:8080" ,
933+ },
934+ AppInfo : supertokens.AppInfo {
935+ AppName : "SuperTokens" ,
936+ WebsiteDomain : "supertokens.io" ,
937+ APIDomain : "api.supertokens.io" ,
938+ },
939+ RecipeList : []supertokens.Recipe {
940+ Init (& sessmodels.TypeInput {
941+ AntiCsrf : & AntiCsrf ,
942+ GetTokenTransferMethod : func (req * http.Request , forCreateNewSession bool , userContext supertokens.UserContext ) sessmodels.TokenTransferMethod {
943+ return sessmodels .CookieTransferMethod
944+ },
945+ }),
946+ },
947+ }
948+ BeforeEach ()
949+ unittesting .StartUpST ("localhost" , "8080" )
950+ defer AfterEach ()
951+ err := supertokens .Init (configValue )
952+ if err != nil {
953+ t .Error (err .Error ())
954+ }
955+
956+ app := getTestApp ([]typeTestEndpoint {})
957+ defer app .Close ()
958+
959+ session , err := CreateNewSessionWithoutRequestResponse ("test-user" , map [string ]interface {}{}, map [string ]interface {}{}, nil )
960+ assert .NoError (t , err )
961+
962+ sessionTokens := session .GetAllSessionTokensDangerously ()
963+
964+ req , err := http .NewRequest (http .MethodGet , app .URL + "/verify" , nil )
965+ assert .NoError (t , err )
966+ req .Header .Add ("Cookie" , "sAccessToken=" + * sessionTokens .RefreshToken )
967+
968+ res , err := http .DefaultClient .Do (req )
969+ assert .Equal (t , res .StatusCode , 401 )
970+
971+ req , err = http .NewRequest (http .MethodGet , app .URL + "/verify-optional" , nil )
972+ assert .NoError (t , err )
973+
974+ res , err = http .DefaultClient .Do (req )
975+ assert .Equal (t , res .StatusCode , 200 )
976+ }
977+
928978type typeTestEndpoint struct {
929979 path string
930980 overrideGlobalClaimValidators func (globalClaimValidators []claims.SessionClaimValidator , sessionContainer sessmodels.SessionContainer , userContext supertokens.UserContext ) ([]claims.SessionClaimValidator , error )
@@ -971,6 +1021,19 @@ func getTestApp(endpoints []typeTestEndpoint) *httptest.Server {
9711021 w .Write (respBytes )
9721022 })
9731023
1024+ False := false
1025+ mux .HandleFunc ("/verify-optional" , VerifySession (& sessmodels.VerifySessionOptions {
1026+ SessionRequired : & False ,
1027+ }, func (rw http.ResponseWriter , r * http.Request ) {
1028+ GetSession (r , rw , & sessmodels.VerifySessionOptions {
1029+ SessionRequired : & False ,
1030+ })
1031+ }))
1032+
1033+ mux .HandleFunc ("/verify" , VerifySession (& sessmodels.VerifySessionOptions {}, func (rw http.ResponseWriter , r * http.Request ) {
1034+ GetSession (r , rw , & sessmodels.VerifySessionOptions {})
1035+ }))
1036+
9741037 mux .HandleFunc ("/default-claims" , VerifySession (nil , func (w http.ResponseWriter , r * http.Request ) {
9751038 sessionContainer := GetSessionFromRequestContext (r .Context ())
9761039 resp := map [string ]interface {}{
0 commit comments