|
|
|
package middleware
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http"
|
|
|
|
"net/http/httptest"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/conf"
|
|
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/util"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestSession(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
|
|
|
|
{
|
|
|
|
handler := Session("2333")
|
|
|
|
asserts.NotNil(handler)
|
|
|
|
asserts.NotNil(Store)
|
|
|
|
asserts.IsType(emptyFunc(), handler)
|
|
|
|
}
|
|
|
|
{
|
|
|
|
conf.RedisConfig.Server = "123"
|
|
|
|
asserts.Panics(func() {
|
|
|
|
Session("2333")
|
|
|
|
})
|
|
|
|
conf.RedisConfig.Server = ""
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func emptyFunc() gin.HandlerFunc {
|
|
|
|
return func(c *gin.Context) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCSRFInit(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
sessionFunc := Session("233")
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
c.Request, _ = http.NewRequest("GET", "/test", nil)
|
|
|
|
sessionFunc(c)
|
|
|
|
CSRFInit()(c)
|
|
|
|
asserts.True(util.GetSession(c, "CSRF").(bool))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCSRFCheck(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
sessionFunc := Session("233")
|
|
|
|
|
|
|
|
// 通过检查
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
c.Request, _ = http.NewRequest("GET", "/test", nil)
|
|
|
|
sessionFunc(c)
|
|
|
|
CSRFInit()(c)
|
|
|
|
CSRFCheck()(c)
|
|
|
|
asserts.False(c.IsAborted())
|
|
|
|
}
|
|
|
|
|
|
|
|
// 未通过检查
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
c.Request, _ = http.NewRequest("GET", "/test", nil)
|
|
|
|
sessionFunc(c)
|
|
|
|
CSRFCheck()(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
}
|
|
|
|
}
|