feat(sense): implement Control API v1 [T-011]
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestStaticSHA256AuthenticatesScopedPrincipal(t *testing.T) {
|
||||
token := "0123456789abcdef0123456789abcdef"
|
||||
digest := sha256.Sum256([]byte(token))
|
||||
path := filepath.Join(t.TempDir(), "auth.json")
|
||||
document := `{"version":1,"principals":[{` +
|
||||
`"token_sha256":"` + hex.EncodeToString(digest[:]) + `",` +
|
||||
`"subject_id":"operator-1","actor_type":"user","tenant_id":"tenant-a",` +
|
||||
`"site_ids":["site-a"],"permissions":["sense.devices.read"]}]}`
|
||||
if err := os.WriteFile(path, []byte(document), 0o600); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
authenticator, err := LoadStaticSHA256(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
principal, err := authenticator.Authenticate(context.Background(), token)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if principal.TenantID != "tenant-a" || !principal.AllowsSite("site-a") ||
|
||||
principal.AllowsSite("site-b") || !principal.Has(PermissionDevicesRead) {
|
||||
t.Fatalf("unexpected principal: %+v", principal)
|
||||
}
|
||||
if _, err := authenticator.Authenticate(context.Background(), strings.Repeat("x", 32)); err == nil {
|
||||
t.Fatal("unknown token authenticated")
|
||||
}
|
||||
}
|
||||
|
||||
func TestStaticSHA256RejectsUnsafeRegistry(t *testing.T) {
|
||||
tests := []string{
|
||||
`{"version":1,"principals":[]}`,
|
||||
`{"version":1,"principals":[{"token_sha256":"ABC","subject_id":"x","actor_type":"service","tenant_id":"tenant","site_ids":["*"],"permissions":["sense.devices.read"]}]}`,
|
||||
`{"version":1,"principals":[{"token_sha256":"` + strings.Repeat("0", 64) + `","subject_id":"x","actor_type":"system","tenant_id":"tenant","site_ids":["*"],"permissions":["sense.devices.read"]}]}`,
|
||||
`{"version":1,"principals":[{"token_sha256":"` + strings.Repeat("0", 64) + `","subject_id":"x","actor_type":"service","tenant_id":"tenant","site_ids":["*"],"permissions":["admin"]}]}`,
|
||||
}
|
||||
for index, document := range tests {
|
||||
path := filepath.Join(t.TempDir(), "auth.json")
|
||||
if err := os.WriteFile(path, []byte(document), 0o600); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := LoadStaticSHA256(path); err == nil {
|
||||
t.Fatalf("unsafe registry %d was accepted", index)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user