owner_test.go (881B)
1 package ssh 2 3 import ( 4 "crypto/ed25519" 5 "crypto/rand" 6 "os" 7 "path/filepath" 8 "testing" 9 10 gossh "golang.org/x/crypto/ssh" 11 ) 12 13 func newKey(t *testing.T) gossh.PublicKey { 14 t.Helper() 15 pub, _, err := ed25519.GenerateKey(rand.Reader) 16 if err != nil { 17 t.Fatal(err) 18 } 19 pk, err := gossh.NewPublicKey(pub) 20 if err != nil { 21 t.Fatal(err) 22 } 23 return pk 24 } 25 26 func TestOwnerKeys(t *testing.T) { 27 owner, guest := newKey(t), newKey(t) 28 path := filepath.Join(t.TempDir(), "owner_keys") 29 t.Setenv("GIT_OWNER_KEYS", path) 30 31 if isOwnerKey(owner) { 32 t.Fatal("owner accepted with no keys file") 33 } 34 line := "# me\n" + string(gossh.MarshalAuthorizedKey(owner)) 35 if err := os.WriteFile(path, []byte(line), 0o600); err != nil { 36 t.Fatal(err) 37 } 38 if !isOwnerKey(owner) { 39 t.Error("owner key not recognised") 40 } 41 if isOwnerKey(guest) || isOwnerKey(nil) { 42 t.Error("guest key treated as owner") 43 } 44 }