Skip to content

Commit 1177bc1

Browse files
luggesexelimiting-factor
authored andcommitted
feat: Display error message in the UI if SSH key management is disabled (#13875)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/13875 Reviewed-by: 0ko <0ko@noreply.codeberg.org>
1 parent 0f7b493 commit 1177bc1

3 files changed

Lines changed: 44 additions & 1 deletion

File tree

options/locale_next/locale_en-US.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@
189189
"keys.ssh.link": "SSH keys",
190190
"keys.gpg.link": "GPG keys",
191191
"keys.verify.token.hint": "The token is only valid for 1 minute. <a href=\"%[1]s\">Get a new one if it expired</a>.",
192+
"keys.ssh.disabled": "SSH key management is disabled on this instance by an administrator.",
192193
"admin.federation.federation": "Federation",
193194
"admin.federation.hosts": "Hosts",
194195
"admin.federation.hosts.title": "Federation hosts",

templates/user/settings/keys.tmpl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings sshkeys")}}
22
<div class="user-setting-content">
3-
{{if not ($.UserDisabledFeatures.Contains "manage_ssh_keys")}}
3+
{{if $.UserDisabledFeatures.Contains "manage_ssh_keys"}}
4+
<div class="ui warning message">
5+
<p>{{ctx.Locale.Tr "keys.ssh.disabled"}}</p>
6+
</div>
7+
{{else}}
48
{{template "user/settings/keys_ssh" .}}
59
{{end}}
610
{{template "user/settings/keys_principal" .}}

tests/integration/setting_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"forgejo.org/models/db"
1313
"forgejo.org/models/unittest"
1414
user_model "forgejo.org/models/user"
15+
"forgejo.org/modules/container"
1516
"forgejo.org/modules/setting"
1617
"forgejo.org/modules/test"
1718
"forgejo.org/modules/translation"
@@ -274,3 +275,40 @@ func TestAdminAvatarSizeNotice(t *testing.T) {
274275
htmlDoc.doc.Find("form div:has(input[name=\"avatar\"]) .help").Text(),
275276
"Custom avatar may not exceed 1 MiB in size or be larger than 4096x4096 pixels")
276277
}
278+
279+
func TestSSHKeyManagementStatus(t *testing.T) {
280+
defer tests.PrepareTestEnv(t)()
281+
locale := translation.NewLocale("en-US")
282+
283+
t.Run("Enabled", func(t *testing.T) {
284+
defer tests.PrintCurrentTest(t)()
285+
session := loginUser(t, "user2")
286+
req := NewRequest(t, "GET", "/user/settings/keys")
287+
resp := session.MakeRequest(t, req, http.StatusOK)
288+
htmlDoc := NewHTMLParser(t, resp.Body)
289+
290+
htmlDoc.AssertElement(t, "#add-ssh-button", true)
291+
292+
assert.NotContains(t,
293+
htmlDoc.doc.Find(".user-setting-content .ui.warning.message").Text(),
294+
locale.TrString("keys.ssh.disabled"),
295+
)
296+
})
297+
298+
t.Run("Disabled", func(t *testing.T) {
299+
defer tests.PrintCurrentTest(t)()
300+
defer test.MockVariableValue(&setting.Admin.UserDisabledFeatures, container.SetOf("manage_ssh_keys"))()
301+
302+
session := loginUser(t, "user2")
303+
req := NewRequest(t, "GET", "/user/settings/keys")
304+
resp := session.MakeRequest(t, req, http.StatusOK)
305+
htmlDoc := NewHTMLParser(t, resp.Body)
306+
307+
htmlDoc.AssertElement(t, "#add-ssh-button", false)
308+
309+
assert.Contains(t,
310+
htmlDoc.doc.Find(".user-setting-content .ui.warning.message").Text(),
311+
locale.TrString("keys.ssh.disabled"),
312+
)
313+
})
314+
}

0 commit comments

Comments
 (0)