2019-04-20 09:44:50 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
2022-09-02 22:18:23 +03:00
package integration
2019-04-20 09:44:50 +03:00
import (
2022-08-28 12:43:25 +03:00
"context"
2019-04-20 09:44:50 +03:00
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"testing"
2021-07-24 19:03:58 +03:00
"code.gitea.io/gitea/modules/json"
2019-04-20 09:44:50 +03:00
"code.gitea.io/gitea/modules/setting"
2021-06-09 02:33:54 +03:00
"code.gitea.io/gitea/routers"
2022-09-02 22:18:23 +03:00
"code.gitea.io/gitea/tests"
2019-04-20 09:44:50 +03:00
2021-01-26 18:36:53 +03:00
"gitea.com/go-chi/session"
2019-04-20 09:44:50 +03:00
"github.com/stretchr/testify/assert"
)
func getSessionID ( t * testing . T , resp * httptest . ResponseRecorder ) string {
cookies := resp . Result ( ) . Cookies ( )
found := false
sessionID := ""
for _ , cookie := range cookies {
if cookie . Name == setting . SessionConfig . CookieName {
sessionID = cookie . Value
found = true
}
}
assert . True ( t , found )
assert . NotEmpty ( t , sessionID )
return sessionID
}
func sessionFile ( tmpDir , sessionID string ) string {
return filepath . Join ( tmpDir , sessionID [ 0 : 1 ] , sessionID [ 1 : 2 ] , sessionID )
}
func sessionFileExist ( t * testing . T , tmpDir , sessionID string ) bool {
sessionFile := sessionFile ( tmpDir , sessionID )
_ , err := os . Lstat ( sessionFile )
if err != nil {
if os . IsNotExist ( err ) {
return false
}
assert . NoError ( t , err )
}
return true
}
func TestSessionFileCreation ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2019-04-20 09:44:50 +03:00
oldSessionConfig := setting . SessionConfig . ProviderConfig
defer func ( ) {
setting . SessionConfig . ProviderConfig = oldSessionConfig
2022-08-28 12:43:25 +03:00
c = routers . NormalRoutes ( context . TODO ( ) )
2019-04-20 09:44:50 +03:00
} ( )
var config session . Options
2021-03-02 00:08:10 +03:00
2019-04-20 09:44:50 +03:00
err := json . Unmarshal ( [ ] byte ( oldSessionConfig ) , & config )
assert . NoError ( t , err )
config . Provider = "file"
// Now create a temporaryDirectory
2022-09-04 18:14:53 +03:00
tmpDir := t . TempDir ( )
2019-04-20 09:44:50 +03:00
config . ProviderConfig = tmpDir
newConfigBytes , err := json . Marshal ( config )
assert . NoError ( t , err )
setting . SessionConfig . ProviderConfig = string ( newConfigBytes )
2022-08-28 12:43:25 +03:00
c = routers . NormalRoutes ( context . TODO ( ) )
2019-04-20 09:44:50 +03:00
t . Run ( "NoSessionOnViewIssue" , func ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrintCurrentTest ( t ) ( )
2019-04-20 09:44:50 +03:00
req := NewRequest ( t , "GET" , "/user2/repo1/issues/1" )
resp := MakeRequest ( t , req , http . StatusOK )
sessionID := getSessionID ( t , resp )
// We're not logged in so there should be no session
assert . False ( t , sessionFileExist ( t , tmpDir , sessionID ) )
} )
t . Run ( "CreateSessionOnLogin" , func ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrintCurrentTest ( t ) ( )
2019-04-20 09:44:50 +03:00
req := NewRequest ( t , "GET" , "/user/login" )
resp := MakeRequest ( t , req , http . StatusOK )
sessionID := getSessionID ( t , resp )
// We're not logged in so there should be no session
assert . False ( t , sessionFileExist ( t , tmpDir , sessionID ) )
doc := NewHTMLParser ( t , resp . Body )
req = NewRequestWithValues ( t , "POST" , "/user/login" , map [ string ] string {
"_csrf" : doc . GetCSRF ( ) ,
"user_name" : "user2" ,
"password" : userPassword ,
} )
2022-03-23 07:54:07 +03:00
resp = MakeRequest ( t , req , http . StatusSeeOther )
2019-04-20 09:44:50 +03:00
sessionID = getSessionID ( t , resp )
assert . FileExists ( t , sessionFile ( tmpDir , sessionID ) )
} )
}