prime8dev

prime8dev
git clone https://git.prime8.dev/prime8dev.git
Log | Files | Refs | README | LICENSE

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 }