89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
package fileauth
|
|
|
|
import (
|
|
"crypto/hmac"
|
|
"crypto/sha1"
|
|
"encoding/base64"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
SetB64Mode(B64ModePadded)
|
|
os.Exit(m.Run())
|
|
}
|
|
|
|
func TestMarshalPutPolicyUpload_productionShape(t *testing.T) {
|
|
got, err := MarshalPutPolicyUpload("other-doc", 1735689600)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
want := `{"scope":"other-doc","deadline":1735689600}`
|
|
if string(got) != want {
|
|
t.Fatalf("upload policy mismatch\ngot: %s\nwant: %s", got, want)
|
|
}
|
|
}
|
|
|
|
func TestBuildUploadTokenParts_javaAlgorithm(t *testing.T) {
|
|
const (
|
|
accessKey = "accessKey"
|
|
secret = "secret"
|
|
bucket = "other-doc"
|
|
deadline = int64(1735689600)
|
|
policyJSON = `{"scope":"other-doc","deadline":1735689600}`
|
|
)
|
|
|
|
mac := hmac.New(sha1.New, []byte(secret))
|
|
_, _ = mac.Write([]byte(policyJSON))
|
|
wantSign := base64.URLEncoding.EncodeToString(mac.Sum(nil))
|
|
wantPolicyB64 := base64.URLEncoding.EncodeToString([]byte(policyJSON))
|
|
wantToken := accessKey + ":" + wantSign + ":" + wantPolicyB64
|
|
|
|
parts, err := BuildUploadTokenPartsForUpload(accessKey, secret, bucket, deadline)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if parts.UploadToken != wantToken {
|
|
t.Fatalf("token mismatch\ngot: %s\nwant: %s", parts.UploadToken, wantToken)
|
|
}
|
|
if parts.SignInput != policyJSON {
|
|
t.Fatalf("signInput=%q want policy JSON", parts.SignInput)
|
|
}
|
|
if parts.EncodedSign != wantSign {
|
|
t.Fatalf("encodedSign=%q want %q", parts.EncodedSign, wantSign)
|
|
}
|
|
if parts.EncodedPutPolicy != wantPolicyB64 {
|
|
t.Fatalf("policyB64=%q want %q", parts.EncodedPutPolicy, wantPolicyB64)
|
|
}
|
|
if parts.Algorithm != algorithmJavaUpload {
|
|
t.Fatalf("algorithm=%q", parts.Algorithm)
|
|
}
|
|
}
|
|
|
|
func TestCreateUploadTokenAtFile_ignoresFilenameInScope(t *testing.T) {
|
|
parts, err := BuildUploadTokenPartsAtFile("ak", "sec", "other-doc", "different.pdf", 1735689600)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if parts.PolicyJSON != `{"scope":"other-doc","deadline":1735689600}` {
|
|
t.Fatalf("filename must not affect scope: %q", parts.PolicyJSON)
|
|
}
|
|
}
|
|
|
|
func TestUploadToken_paddedVsRawB64(t *testing.T) {
|
|
SetB64Mode(B64ModePadded)
|
|
padded, err := BuildUploadTokenPartsForUpload("ak", "sec", "b", 1735689600)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
SetB64Mode(B64ModeRaw)
|
|
raw, err := BuildUploadTokenPartsForUpload("ak", "sec", "b", 1735689600)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
SetB64Mode(B64ModePadded)
|
|
if padded.UploadToken == raw.UploadToken {
|
|
t.Fatal("padded vs raw token should differ")
|
|
}
|
|
}
|