Detailed changes
@@ -42,7 +42,8 @@ func (u *User) PublicKeys() []ssh.PublicKey {
if err := tx.Select(&keyStrings, `SELECT public_key
FROM public_key
INNER JOIN user ON user.id = public_key.user_id
- WHERE user.username = ?;`, u.username); err != nil {
+ WHERE user.username = ?
+ ORDER BY public_key.id asc;`, u.username); err != nil {
return err
}
@@ -14,6 +14,7 @@ import (
"testing"
"time"
+ "github.com/charmbracelet/keygen"
"github.com/charmbracelet/soft-serve/server"
"github.com/charmbracelet/soft-serve/server/config"
"github.com/charmbracelet/soft-serve/server/test"
@@ -28,26 +29,19 @@ func TestScript(t *testing.T) {
t.Setenv("SOFT_SERVE_TEST_NO_HOOKS", "1")
- // we'll use this key to talk with soft serve, and since testscript changes
- // the cwd, we need to get its full path here
- key, err := filepath.Abs("./testdata/admin1")
- if err != nil {
- t.Fatal(err)
- }
-
- // git does not handle 0600, and on clone, will save the files with its
- // default perm, 0644, which is too open for ssh.
- for _, f := range []string{
- "admin1",
- "admin2",
- "user1",
- "user2",
- } {
- if err := os.Chmod(filepath.Join("./testdata/", f), 0o600); err != nil {
+ mkkey := func(name string) (string, *keygen.SSHKeyPair) {
+ path := filepath.Join(t.TempDir(), name)
+ pair, err := keygen.New(path, keygen.WithKeyType(keygen.Ed25519), keygen.WithWrite())
+ if err != nil {
t.Fatal(err)
}
+ return path, pair
}
+ key, admin1 := mkkey("admin1")
+ _, admin2 := mkkey("admin2")
+ _, user1 := mkkey("user1")
+
sshArgs := []string{
"-F", "/dev/null",
"-o", "StrictHostKeyChecking=no",
@@ -108,13 +102,14 @@ func TestScript(t *testing.T) {
Setup: func(e *testscript.Env) error {
sshPort := test.RandomPort()
e.Setenv("SSH_PORT", fmt.Sprintf("%d", sshPort))
+ e.Setenv("ADMIN1_AUTHORIZED_KEY", admin1.AuthorizedKey())
+ e.Setenv("ADMIN2_AUTHORIZED_KEY", admin2.AuthorizedKey())
+ e.Setenv("USER1_AUTHORIZED_KEY", user1.AuthorizedKey())
data := t.TempDir()
cfg := config.Config{
- Name: "Test Soft Serve",
- DataPath: data,
- InitialAdminKeys: []string{
- "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJI/1tawpdPmzuJcTGTJ+QReqB6cRUdKj4iQIdJUFdrl",
- },
+ Name: "Test Soft Serve",
+ DataPath: data,
+ InitialAdminKeys: []string{admin1.AuthorizedKey()},
SSH: config.SSHConfig{
ListenAddr: fmt.Sprintf("localhost:%d", sshPort),
PublicURL: fmt.Sprintf("ssh://localhost:%d", sshPort),
@@ -1,7 +0,0 @@
------BEGIN OPENSSH PRIVATE KEY-----
-b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
-QyNTUxOQAAACCSP9bWsKXT5s7iXExkyfkEXqgenEVHSo+IkCHSVBXa5QAAAJiqgq7EqoKu
-xAAAAAtzc2gtZWQyNTUxOQAAACCSP9bWsKXT5s7iXExkyfkEXqgenEVHSo+IkCHSVBXa5Q
-AAAEDzMZNK49XhgnQJruAFQr04Eijji5ZMZzN9dA/tmEP0m5I/1tawpdPmzuJcTGTJ+QRe
-qB6cRUdKj4iQIdJUFdrlAAAAD2Nhcmxvc0BkYXJrc3RhcgECAwQFBg==
------END OPENSSH PRIVATE KEY-----
@@ -1 +0,0 @@
-ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJI/1tawpdPmzuJcTGTJ+QReqB6cRUdKj4iQIdJUFdrl carlos@darkstar
@@ -1,7 +0,0 @@
------BEGIN OPENSSH PRIVATE KEY-----
-b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
-QyNTUxOQAAACD41Hl4Qc49fP1mW6nA9WjyZQgC8wTDGcYaWlOOSoFaiwAAAJjWOn0F1jp9
-BQAAAAtzc2gtZWQyNTUxOQAAACD41Hl4Qc49fP1mW6nA9WjyZQgC8wTDGcYaWlOOSoFaiw
-AAAEDC5WZCusu7Dwmj1M6tEqPietXnnklOhfnAzBqUtoNpl/jUeXhBzj18/WZbqcD1aPJl
-CALzBMMZxhpaU45KgVqLAAAAD2Nhcmxvc0BkYXJrc3RhcgECAwQFBg==
------END OPENSSH PRIVATE KEY-----
@@ -1 +0,0 @@
-ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjUeXhBzj18/WZbqcD1aPJlCALzBMMZxhpaU45KgVqL carlos@darkstar
@@ -1,7 +1,7 @@
# vi: set ft=conf
# setup
soft repo import test https://github.com/charmbracelet/catwalk.git
-soft user create foo --key "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix"
+soft user create foo --key "$USER1_AUTHORIZED_KEY"
# list collabs
soft repo collab list test
@@ -1,19 +1,20 @@
# vi: set ft=conf
-# set-username
+# get original username
soft info
-cmp stdout info1.txt
+cmpenv stdout info1.txt
+# set another username
soft set-username test
soft info
-cmp stdout info2.txt
+cmpenv stdout info2.txt
-- info1.txt --
Username: admin
Admin: true
Public keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJI/1tawpdPmzuJcTGTJ+QReqB6cRUdKj4iQIdJUFdrl
+ $ADMIN1_AUTHORIZED_KEY
-- info2.txt --
Username: test
Admin: true
Public keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJI/1tawpdPmzuJcTGTJ+QReqB6cRUdKj4iQIdJUFdrl
+ $ADMIN1_AUTHORIZED_KEY
@@ -1,78 +1,71 @@
# vi: set ft=conf
# add key to admin
-soft user add-pubkey admin "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjUeXhBzj18/WZbqcD1aPJlCALzBMMZxhpaU45KgVqL"
+soft user add-pubkey admin "$ADMIN2_AUTHORIZED_KEY"
soft user info admin
soft info
-cmp stdout info.txt
+cmpenv stdout info.txt
# list admin pubkeys
soft pubkey list
-cmp stdout admin_key_list1.txt
+cmpenv stdout admin_key_list1.txt
# remove key
-soft pubkey remove "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjUeXhBzj18/WZbqcD1aPJlCALzBMMZxhpaU45KgVqL"
+soft pubkey remove $ADMIN2_AUTHORIZED_KEY
soft pubkey list
-cmp stdout admin_key_list2.txt
+cmpenv stdout admin_key_list2.txt
# add key back key
-soft pubkey add "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjUeXhBzj18/WZbqcD1aPJlCALzBMMZxhpaU45KgVqL"
+soft pubkey add $ADMIN2_AUTHORIZED_KEY
soft pubkey list
-cmp stdout admin_key_list1.txt
-
+cmpenv stdout admin_key_list1.txt
# list users
soft user list
-cmp stdout list1.txt
-
+cmpenv stdout list1.txt
# create a new user
-soft user create foo --key "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix"
+soft user create foo --key "$USER1_AUTHORIZED_KEY"
soft user list
-cmp stdout list2.txt
-
+cmpenv stdout list2.txt
# get new user info
soft user info foo
-cmp stdout foo_info1.txt
-
+cmpenv stdout foo_info1.txt
# make user admin
soft user set-admin foo true
soft user info foo
-cmp stdout foo_info2.txt
-
+cmpenv stdout foo_info2.txt
# remove admin
soft user set-admin foo false
soft user info foo
-cmp stdout foo_info3.txt
-
+cmpenv stdout foo_info3.txt
# remove key from user
-soft user remove-pubkey foo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix"
+soft user remove-pubkey foo "$USER1_AUTHORIZED_KEY"
soft user info foo
-cmp stdout foo_info4.txt
+cmpenv stdout foo_info4.txt
# rename user
soft user set-username foo foo2
soft user info foo2
-cmp stdout foo_info5.txt
-
+cmpenv stdout foo_info5.txt
# remove user
soft user delete foo2
-cmp stdout foo_delete.txt
+! stdout .
soft user list
-cmp stdout list1.txt
+cmpenv stdout list1.txt
-- info.txt --
Username: admin
Admin: true
Public keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJI/1tawpdPmzuJcTGTJ+QReqB6cRUdKj4iQIdJUFdrl
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjUeXhBzj18/WZbqcD1aPJlCALzBMMZxhpaU45KgVqL
+ $ADMIN1_AUTHORIZED_KEY
+ $ADMIN2_AUTHORIZED_KEY
-- list1.txt --
admin
-- list2.txt --
@@ -82,17 +75,17 @@ foo
Username: foo
Admin: false
Public keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix
+ $USER1_AUTHORIZED_KEY
-- foo_info2.txt --
Username: foo
Admin: true
Public keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix
+ $USER1_AUTHORIZED_KEY
-- foo_info3.txt --
Username: foo
Admin: false
Public keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix
+ $USER1_AUTHORIZED_KEY
-- foo_info4.txt --
Username: foo
Admin: false
@@ -102,8 +95,7 @@ Username: foo2
Admin: false
Public keys:
-- admin_key_list1.txt --
-ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJI/1tawpdPmzuJcTGTJ+QReqB6cRUdKj4iQIdJUFdrl
-ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjUeXhBzj18/WZbqcD1aPJlCALzBMMZxhpaU45KgVqL
+$ADMIN1_AUTHORIZED_KEY
+$ADMIN2_AUTHORIZED_KEY
-- admin_key_list2.txt --
-ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJI/1tawpdPmzuJcTGTJ+QReqB6cRUdKj4iQIdJUFdrl
--- foo_delete.txt --
+$ADMIN1_AUTHORIZED_KEY
@@ -1,7 +0,0 @@
------BEGIN OPENSSH PRIVATE KEY-----
-b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
-QyNTUxOQAAACAM154Sf+kq5R2SPg5029Z/9Ci+v1TkE3mvKi6L04mYsQAAAJgAOMy/ADjM
-vwAAAAtzc2gtZWQyNTUxOQAAACAM154Sf+kq5R2SPg5029Z/9Ci+v1TkE3mvKi6L04mYsQ
-AAAECH03vQo8gCmxbUqHWlcM2buCgIi4x6IR4WWkXlXqhzoAzXnhJ/6SrlHZI+DnTb1n/0
-KL6/VOQTea8qLovTiZixAAAAD2Nhcmxvc0BkYXJrc3RhcgECAwQFBg==
------END OPENSSH PRIVATE KEY-----
@@ -1 +0,0 @@
-ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix carlos@darkstar
@@ -1,7 +0,0 @@
------BEGIN OPENSSH PRIVATE KEY-----
-b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
-QyNTUxOQAAACChLkp+T1IWDQ5I5BI5Q8YQrP7aKdQLVe7+Pn9/xEM5LwAAAJiupdpmrqXa
-ZgAAAAtzc2gtZWQyNTUxOQAAACChLkp+T1IWDQ5I5BI5Q8YQrP7aKdQLVe7+Pn9/xEM5Lw
-AAAECrufZjft7PHyL8FQLnR/D73VySS1A6UZdEQmL+W/+gJ6EuSn5PUhYNDkjkEjlDxhCs
-/top1AtV7v4+f3/EQzkvAAAAD2Nhcmxvc0BkYXJrc3RhcgECAwQFBg==
------END OPENSSH PRIVATE KEY-----
@@ -1 +0,0 @@
-ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKEuSn5PUhYNDkjkEjlDxhCs/top1AtV7v4+f3/EQzkv carlos@darkstar