| 1 | package operator |
| 2 | |
| 3 | import ( |
| 4 | "encoding/base64" |
| 5 | "math" |
| 6 | "testing" |
| 7 | "time" |
| 8 | |
| 9 | family "amadan.net/rastrillo/rastrillo/crypto" |
| 10 | ) |
| 11 | |
| 12 | func TestPinnedSqidVectorsAndReservedInteger(t *testing.T) { |
| 13 | for n, want := range map[int64]string{1: "Uk", 2: "gb", 3: "Ef", 1000: "pnd", math.MaxInt64: "AqkYhRmbHpEX"} { |
| 14 | got, e := TeamSQID(n) |
| 15 | if e != nil || got != want { |
| 16 | t.Fatal(n, got, e) |
| 17 | } |
| 18 | decoded := teamCodec.Decode(got) |
| 19 | if len(decoded) != 1 || decoded[0] != uint64(n) { |
| 20 | t.Fatal("roundtrip") |
| 21 | } |
| 22 | } |
| 23 | for _, n := range []int64{0, -1, math.MinInt64} { |
| 24 | if _, e := TeamSQID(n); e != ErrRefused { |
| 25 | t.Fatal("invalid ID") |
| 26 | } |
| 27 | } |
| 28 | if validTeam(1, "gb") || validTeam(1, "Ukextra") { |
| 29 | t.Fatal("alternate mapping") |
| 30 | } |
| 31 | } |
| 32 | func TestOwnerReceiptBoundIdentityAndFreshness(t *testing.T) { |
| 33 | k, e := family.Generate() |
| 34 | if e != nil { |
| 35 | t.Fatal(e) |
| 36 | } |
| 37 | p := OwnerReceipt{1, "owner-seed", token(7), "https://id.oficina.works", "https://oficina.works", 1, "Uk", "pr_aaaaaaaaaaaaaaaaaaaaaaaaaa", "owner", 2000000000, 2000000300} |
| 38 | raw, e := SignOwner(k, p) |
| 39 | if e != nil { |
| 40 | t.Fatal(e) |
| 41 | } |
| 42 | v, e := NewOwnerVerifier(base64.RawURLEncoding.EncodeToString(k.SignPub()), p.Issuer, p.Directory) |
| 43 | if e != nil { |
| 44 | t.Fatal(e) |
| 45 | } |
| 46 | got, e := v.Verify(raw, time.Unix(p.Issued, 0)) |
| 47 | if e != nil || got != p { |
| 48 | t.Fatal(e) |
| 49 | } |
| 50 | for _, n := range []int64{p.Issued - 1, p.Expires, p.Expires + 1} { |
| 51 | if _, e := v.Verify(raw, time.Unix(n, 0)); e != ErrRefused { |
| 52 | t.Fatal("freshness") |
| 53 | } |
| 54 | } |
| 55 | foreign, e := NewOwnerVerifier(base64.RawURLEncoding.EncodeToString(k.SignPub()), p.Issuer, "https://other.oficina.works") |
| 56 | if e != nil { |
| 57 | t.Fatal(e) |
| 58 | } |
| 59 | if _, e = foreign.Verify(raw, time.Unix(p.Issued, 0)); e != ErrRefused { |
| 60 | t.Fatal("foreign directory") |
| 61 | } |
| 62 | p.TeamSQID = "gb" |
| 63 | if _, e = SignOwner(k, p); e != ErrRefused { |
| 64 | t.Fatal("mismatched team") |
| 65 | } |
| 66 | p.TeamSQID = "Uk" |
| 67 | p.Role = "member" |
| 68 | if _, e = SignOwner(k, p); e != ErrRefused { |
| 69 | t.Fatal("nonowner") |
| 70 | } |
| 71 | } |
| 72 | |