You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
3.0 KiB
137 lines
3.0 KiB
package auth
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/util"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestSignURI(t *testing.T) {
|
|
asserts := assert.New(t)
|
|
General = HMACAuth{SecretKey: []byte(util.RandStringRunes(256))}
|
|
|
|
// 成功
|
|
{
|
|
sign, err := SignURI(General, "/api/v3/something?id=1", 0)
|
|
asserts.NoError(err)
|
|
queries := sign.Query()
|
|
asserts.Equal("1", queries.Get("id"))
|
|
asserts.NotEmpty(queries.Get("sign"))
|
|
}
|
|
|
|
// URI解码失败
|
|
{
|
|
sign, err := SignURI(General, "://dg.;'f]gh./'", 0)
|
|
asserts.Error(err)
|
|
asserts.Nil(sign)
|
|
}
|
|
}
|
|
|
|
func TestCheckURI(t *testing.T) {
|
|
asserts := assert.New(t)
|
|
General = HMACAuth{SecretKey: []byte(util.RandStringRunes(256))}
|
|
|
|
// 成功
|
|
{
|
|
sign, err := SignURI(General, "/api/ok?if=sdf&fd=go", 10)
|
|
asserts.NoError(err)
|
|
asserts.NoError(CheckURI(General, sign))
|
|
}
|
|
|
|
// 过期
|
|
{
|
|
sign, err := SignURI(General, "/api/ok?if=sdf&fd=go", -1)
|
|
asserts.NoError(err)
|
|
asserts.Error(CheckURI(General, sign))
|
|
}
|
|
}
|
|
|
|
func TestSignRequest(t *testing.T) {
|
|
asserts := assert.New(t)
|
|
General = HMACAuth{SecretKey: []byte(util.RandStringRunes(256))}
|
|
|
|
// 非上传请求
|
|
{
|
|
req, err := http.NewRequest("POST", "http://127.0.0.1/api/v3/slave/upload", strings.NewReader("I am body."))
|
|
asserts.NoError(err)
|
|
req = SignRequest(General, req, 0)
|
|
asserts.NotEmpty(req.Header["Authorization"])
|
|
}
|
|
|
|
// 上传请求
|
|
{
|
|
req, err := http.NewRequest(
|
|
"POST",
|
|
"http://127.0.0.1/api/v3/slave/upload",
|
|
strings.NewReader("I am body."),
|
|
)
|
|
asserts.NoError(err)
|
|
req.Header["X-Policy"] = []string{"I am Policy"}
|
|
req = SignRequest(General, req, 10)
|
|
asserts.NotEmpty(req.Header["Authorization"])
|
|
}
|
|
}
|
|
|
|
func TestCheckRequest(t *testing.T) {
|
|
asserts := assert.New(t)
|
|
General = HMACAuth{SecretKey: []byte(util.RandStringRunes(256))}
|
|
|
|
// 缺少请求头
|
|
{
|
|
req, err := http.NewRequest(
|
|
"POST",
|
|
"http://127.0.0.1/api/v3/upload",
|
|
strings.NewReader("I am body."),
|
|
)
|
|
asserts.NoError(err)
|
|
err = CheckRequest(General, req)
|
|
asserts.Error(err)
|
|
asserts.Equal(ErrAuthHeaderMissing, err)
|
|
}
|
|
|
|
// 非上传请求 验证成功
|
|
{
|
|
req, err := http.NewRequest(
|
|
"POST",
|
|
"http://127.0.0.1/api/v3/upload",
|
|
strings.NewReader("I am body."),
|
|
)
|
|
asserts.NoError(err)
|
|
req = SignRequest(General, req, 0)
|
|
err = CheckRequest(General, req)
|
|
asserts.NoError(err)
|
|
}
|
|
|
|
// 上传请求 验证成功
|
|
{
|
|
req, err := http.NewRequest(
|
|
"POST",
|
|
"http://127.0.0.1/api/v3/upload",
|
|
strings.NewReader("I am body."),
|
|
)
|
|
asserts.NoError(err)
|
|
req.Header["X-Policy"] = []string{"I am Policy"}
|
|
req = SignRequest(General, req, 0)
|
|
err = CheckRequest(General, req)
|
|
asserts.NoError(err)
|
|
}
|
|
|
|
// 非上传请求 失败
|
|
{
|
|
req, err := http.NewRequest(
|
|
"POST",
|
|
"http://127.0.0.1/api/v3/upload",
|
|
strings.NewReader("I am body."),
|
|
)
|
|
asserts.NoError(err)
|
|
req = SignRequest(General, req, 0)
|
|
req.Body = ioutil.NopCloser(strings.NewReader("2333"))
|
|
err = CheckRequest(General, req)
|
|
asserts.Error(err)
|
|
}
|
|
}
|