From f8898c30dc028e8bddadffacbd357c76b0c3506b Mon Sep 17 00:00:00 2001
From: KN4CK3R <admin@oldschoolhack.me>
Date: Wed, 2 Mar 2022 17:32:18 +0100
Subject: [PATCH] Add note to GPG key response if user has no keys (#18961)

* Prevent invalid key response.

* Display note instead of 404 response.

* Fixed test.

Co-authored-by: zeripath <art27@cantab.net>
Co-authored-by: 6543 <6543@obermui.de>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
---
 integrations/user_test.go | 1 +
 routers/web/user/home.go  | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/integrations/user_test.go b/integrations/user_test.go
index c12c2be40..4cfe7700e 100644
--- a/integrations/user_test.go
+++ b/integrations/user_test.go
@@ -121,6 +121,7 @@ func TestExportUserGPGKeys(t *testing.T) {
 	defer prepareTestEnv(t)()
 	// Export empty key list
 	testExportUserGPGKeys(t, "user1", `-----BEGIN PGP PUBLIC KEY BLOCK-----
+Note: This user hasn't uploaded any GPG keys.
 
 
 =twTO
diff --git a/routers/web/user/home.go b/routers/web/user/home.go
index 33512d97c..379e1f8e2 100644
--- a/routers/web/user/home.go
+++ b/routers/web/user/home.go
@@ -736,6 +736,7 @@ func ShowGPGKeys(ctx *context.Context, uid int64) {
 		ctx.ServerError("ListGPGKeys", err)
 		return
 	}
+
 	entities := make([]*openpgp.Entity, 0)
 	failedEntitiesID := make([]string, 0)
 	for _, k := range keys {
@@ -755,6 +756,8 @@ func ShowGPGKeys(ctx *context.Context, uid int64) {
 	headers := make(map[string]string)
 	if len(failedEntitiesID) > 0 { // If some key need re-import to be exported
 		headers["Note"] = fmt.Sprintf("The keys with the following IDs couldn't be exported and need to be reuploaded %s", strings.Join(failedEntitiesID, ", "))
+	} else if len(entities) == 0 {
+		headers["Note"] = "This user hasn't uploaded any GPG keys."
 	}
 	writer, _ := armor.Encode(&buf, "PGP PUBLIC KEY BLOCK", headers)
 	for _, e := range entities {