mirror of
https://github.com/go-gitea/gitea.git
synced 2025-12-20 08:23:22 +01:00
Add additional logic with tests to restore the previous behaviour when writing the principals file. Fixes: #36212 --------- Signed-off-by: Peter Verraedt <peter.verraedt@kuleuven.be> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
91 lines
2.7 KiB
Go
91 lines
2.7 KiB
Go
// Copyright 2025 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package asymkey
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"code.gitea.io/gitea/modules/setting"
|
|
"code.gitea.io/gitea/modules/test"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestWriteAuthorizedStringForKey(t *testing.T) {
|
|
defer test.MockVariableValue(&setting.AppPath, "/tmp/gitea")()
|
|
defer test.MockVariableValue(&setting.CustomConf, "/tmp/app.ini")()
|
|
writeKey := func(t *testing.T, key *PublicKey) (bool, string, error) {
|
|
sb := &strings.Builder{}
|
|
valid, err := writeAuthorizedStringForKey(key, sb)
|
|
return valid, sb.String(), err
|
|
}
|
|
const validKeyContent = `ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICV0MGX/W9IvLA4FXpIuUcdDcbj5KX4syHgsTy7soVgf`
|
|
|
|
testValid := func(t *testing.T, key *PublicKey, expected string) {
|
|
valid, content, err := writeKey(t, key)
|
|
assert.True(t, valid)
|
|
assert.Equal(t, expected, content)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
testInvalid := func(t *testing.T, key *PublicKey) {
|
|
valid, content, err := writeKey(t, key)
|
|
assert.False(t, valid)
|
|
assert.Empty(t, content)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
t.Run("PublicKey", func(t *testing.T) {
|
|
testValid(t, &PublicKey{
|
|
OwnerID: 123,
|
|
Content: validKeyContent + " any-comment",
|
|
Type: KeyTypeUser,
|
|
}, `# gitea public key
|
|
command="/tmp/gitea --config=/tmp/app.ini serv key-0",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICV0MGX/W9IvLA4FXpIuUcdDcbj5KX4syHgsTy7soVgf user-123
|
|
`)
|
|
})
|
|
|
|
t.Run("PublicKeyWithNewLine", func(t *testing.T) {
|
|
testValid(t, &PublicKey{
|
|
OwnerID: 123,
|
|
Content: validKeyContent + "\nany-more", // the new line should be ignored
|
|
Type: KeyTypeUser,
|
|
}, `# gitea public key
|
|
command="/tmp/gitea --config=/tmp/app.ini serv key-0",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICV0MGX/W9IvLA4FXpIuUcdDcbj5KX4syHgsTy7soVgf user-123
|
|
`)
|
|
})
|
|
|
|
t.Run("PublicKeyInvalid", func(t *testing.T) {
|
|
testInvalid(t, &PublicKey{
|
|
OwnerID: 123,
|
|
Content: validKeyContent + "any-more",
|
|
Type: KeyTypeUser,
|
|
})
|
|
})
|
|
|
|
t.Run("Principal", func(t *testing.T) {
|
|
testValid(t, &PublicKey{
|
|
OwnerID: 123,
|
|
Content: "any-content",
|
|
Type: KeyTypePrincipal,
|
|
}, `# gitea public key
|
|
command="/tmp/gitea --config=/tmp/app.ini serv key-0",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict any-content # user-123
|
|
`)
|
|
})
|
|
|
|
t.Run("PrincipalInvalid", func(t *testing.T) {
|
|
testInvalid(t, &PublicKey{
|
|
OwnerID: 123,
|
|
Content: "a b",
|
|
Type: KeyTypePrincipal,
|
|
})
|
|
testInvalid(t, &PublicKey{
|
|
OwnerID: 123,
|
|
Content: "a\nb",
|
|
Type: KeyTypePrincipal,
|
|
})
|
|
})
|
|
}
|