oficina / memoria Public

Clone
git clone https://amadan.net/oficina/memoria

Plain git — no account needed to clone.

Download

Download this file

1package memoria
2
3import (
4 assertioncrypto "amadan.net/rastrillo/rastrillo/crypto"
5 "bytes"
6 "crypto/sha256"
7 "encoding/base64"
8 "encoding/hex"
9 "encoding/json"
10 "testing"
11)
12
13func TestHomeConfigRequiresCompleteExplicitCredentials(t *testing.T) {
14 env := map[string]string{"MEMORIA_DEK": base64.StdEncoding.EncodeToString(bytes.Repeat([]byte{2}, 32)), "MEMORIA_INSTANCE_KEY": "test-only-instance", "MEMORIA_OWNERS": "alice@example.test", "MEMORIA_ALLOW_LOGGED_MAIL": "1", "MEMORIA_ORIGIN": homeTestOrigin}
15 get := func(k string) string { return env[k] }
16 cfg, err := LoadConfig(get)
17 if err != nil || cfg.Home != nil {
18 t.Fatalf("standalone: %v", err)
19 }
20 key, err := assertioncrypto.Generate()
21 if err != nil {
22 t.Fatal(err)
23 }
24 sum := sha256.Sum256(key.SignPub())
25 id := hex.EncodeToString(sum[:])
26 raw, err := json.Marshal(map[string]string{id: base64.StdEncoding.EncodeToString(key.SignPub())})
27 if err != nil {
28 t.Fatal(err)
29 }
30 fields := map[string]string{"MEMORIA_HOME_ISSUER": homeTestIssuer, "MEMORIA_HOME_CONSUMER_ID": "memoria-test", "MEMORIA_HOME_KEYS_BASE64": base64.StdEncoding.EncodeToString(raw), "MEMORIA_HOME_DEK_BASE64": base64.StdEncoding.EncodeToString(bytes.Repeat([]byte{7}, 32))}
31 for k, v := range fields {
32 env[k] = v
33 }
34 cfg, err = LoadConfig(get)
35 if err != nil || cfg.Home == nil {
36 t.Fatalf("complete: %v", err)
37 }
38 if cfg.Home.Issuer != homeTestIssuer || !bytes.Equal(cfg.Home.Keys[id], key.SignPub()) {
39 t.Fatal("changed credentials")
40 }
41 for k, v := range fields {
42 delete(env, k)
43 if _, err = LoadConfig(get); err == nil {
44 t.Fatalf("accepted without %s", k)
45 }
46 env[k] = v
47 }
48}
49