diff --git a/models/fixtures/public_key.yml b/models/fixtures/public_key.yml index ae620ee2d1..a1c7f4feb6 100644 --- a/models/fixtures/public_key.yml +++ b/models/fixtures/public_key.yml @@ -9,3 +9,36 @@ created_unix: 1559593109 updated_unix: 1565224552 login_source_id: 0 +- + id: 2 + owner_id: 5 + name: user5 + fingerprint: "" + content: "user5" + mode: 2 + type: 3 + created_unix: 1775805112 + updated_unix: 1775805112 + login_source_id: 0 +- + id: 3 + owner_id: 9 + name: user9@localhost + fingerprint: "SHA256:K3RfDvtQ/aYVzh6RfXGFxlffLLTRgksf9UQwTlwSM8M" + content: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDN7KuFUnlztx/UM6PUTyiBAq5SeIqr+qSVFC6JzLQAh user9@localhost" + mode: 2 + type: 1 + created_unix: 1775805112 + updated_unix: 1775805112 + login_source_id: 0 +- + id: 4 + owner_id: 9 + name: user9 + fingerprint: "" + content: "user9" + mode: 2 + type: 3 + created_unix: 1775805112 + updated_unix: 1775805112 + login_source_id: 0 diff --git a/routers/web/user/home.go b/routers/web/user/home.go index 60d6fc2bd0..4fe3f7c9a0 100644 --- a/routers/web/user/home.go +++ b/routers/web/user/home.go @@ -705,6 +705,9 @@ func ShowSSHKeys(ctx *context.Context) { var buf bytes.Buffer for i := range keys { + if keys[i].Type == asymkey_model.KeyTypePrincipal { + continue // Don't display SSH principals, only public keys + } buf.WriteString(keys[i].OmitEmail()) buf.WriteString("\n") } diff --git a/tests/integration/api_private_serv_test.go b/tests/integration/api_private_serv_test.go index 742d2d80d7..dd45f54c36 100644 --- a/tests/integration/api_private_serv_test.go +++ b/tests/integration/api_private_serv_test.go @@ -114,12 +114,12 @@ func TestAPIPrivateServ(t *testing.T) { assert.Empty(t, results) // Cannot pull from a private repo we're not associated with - results, extra = private.ServCommand(ctx, deployKey.ID, "user15", "big_test_private_2", perm.AccessModeRead, "git-upload-pack", "") + results, extra = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_2", perm.AccessModeRead, "git-upload-pack", "") require.Error(t, extra.Error) assert.Empty(t, results) // Cannot pull from a public repo we're not associated with - results, extra = private.ServCommand(ctx, deployKey.ID, "user15", "big_test_public_1", perm.AccessModeRead, "git-upload-pack", "") + results, extra = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_public_1", perm.AccessModeRead, "git-upload-pack", "") require.Error(t, extra.Error) assert.Empty(t, results) diff --git a/tests/integration/user_test.go b/tests/integration/user_test.go index 0f7c099c70..f968f8df81 100644 --- a/tests/integration/user_test.go +++ b/tests/integration/user_test.go @@ -1286,4 +1286,18 @@ func TestExportUserSSHKeys(t *testing.T) { assert.Equal(t, "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDWVj0fQ5N8wNc0LVNA41wDLYJ89ZIbejrPfg/avyj3u/ZohAKsQclxG4Ju0VirduBFF9EOiuxoiFBRr3xRpqzpsZtnMPkWVWb+akZwBFAx8p+jKdy4QXR/SZqbVobrGwip2UjSrri1CtBxpJikojRIZfCnDaMOyd9Jp6KkujvniFzUWdLmCPxUE9zhTaPu0JsEP7MW0m6yx7ZUhHyfss+NtqmFTaDO+QlMR7L2QkDliN2Jl3Xa3PhuWnKJfWhdAq1Cw4oraKUOmIgXLkuiuxVQ6mD3AiFupkmfqdHq6h+uHHmyQqv3gU+/sD8GbGAhf6ftqhTsXjnv1Aj4R8NoDf9BS6KRkzkeun5UisSzgtfQzjOMEiJtmrep2ZQrMGahrXa+q4VKr0aKJfm+KlLfwm/JztfsBcqQWNcTURiCFqz+fgZw0Ey/de0eyMzldYTdXXNRYCKjs9bvBK+6SSXRM7AhftfQ0ZuoW5+gtinPrnmoOaSCEJbAiEiTO/BzOHgowiM=\n", resp.Body.String()) }) + + t.Run("No exported keys and SSH principal", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + resp := MakeRequest(t, NewRequest(t, "GET", "/user5.keys"), http.StatusOK) + + assert.Equal(t, "# Note: This user hasn't uploaded any SSH keys.\n", resp.Body.String()) + }) + + t.Run("Exported key and SSH principal", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + resp := MakeRequest(t, NewRequest(t, "GET", "/user9.keys"), http.StatusOK) + + assert.Equal(t, "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDN7KuFUnlztx/UM6PUTyiBAq5SeIqr+qSVFC6JzLQAh\n", resp.Body.String()) + }) }