Skip to content

Commit 75f128e

Browse files
authored
Fix key signature error page (#22229) (#22230)
- Backport of #22229 - When the GPG key contains an error, such as an invalid signature or an email address that does not match the user.A page will be shown that says you must provide a signature for the token. - This page had two errors: one had the wrong translation key and the other tried to use an undefined variable [`.PaddedKeyID`](https://github.com/go-gitea/gitea/blob/e81ccc406bf723a5a58d685e7782f281736affd4/models/asymkey/gpg_key.go#L65-L72), which is a function implemented on the `GPGKey` struct, given that we don't have that, we use [`KeyID`](https://github.com/go-gitea/gitea/blob/e81ccc406bf723a5a58d685e7782f281736affd4/routers/web/user/setting/keys.go#L102) which is [the fingerprint of the publickey](https://pkg.go.dev/golang.org/x/crypto/openpgp/packet#PublicKey.KeyIdString) and is a valid way for opengpg to refer to a key.
1 parent 53db977 commit 75f128e

File tree

3 files changed

+20
-6
lines changed

3 files changed

+20
-6
lines changed

Diff for: models/asymkey/gpg_key.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,16 @@ func (key *GPGKey) PaddedKeyID() string {
6868
if len(key.KeyID) > 15 {
6969
return key.KeyID
7070
}
71+
return PaddedKeyID(key.KeyID)
72+
}
73+
74+
// PaddedKeyID show KeyID padded to 16 characters
75+
func PaddedKeyID(keyID string) string {
76+
if len(keyID) > 15 {
77+
return keyID
78+
}
7179
zeros := "0000000000000000"
72-
return zeros[0:16-len(key.KeyID)] + key.KeyID
80+
return zeros[0:16-len(keyID)] + keyID
7381
}
7482

7583
// ListGPGKeys returns a list of public keys belongs to given user.

Diff for: routers/web/user/setting/keys.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,18 @@ func KeysPost(ctx *context.Context) {
100100
loadKeysData(ctx)
101101
ctx.Data["Err_Content"] = true
102102
ctx.Data["Err_Signature"] = true
103-
ctx.Data["KeyID"] = err.(asymkey_model.ErrGPGInvalidTokenSignature).ID
103+
keyID := err.(asymkey_model.ErrGPGInvalidTokenSignature).ID
104+
ctx.Data["KeyID"] = keyID
105+
ctx.Data["PaddedKeyID"] = asymkey_model.PaddedKeyID(keyID)
104106
ctx.RenderWithErr(ctx.Tr("settings.gpg_invalid_token_signature"), tplSettingsKeys, &form)
105107
case asymkey_model.IsErrGPGNoEmailFound(err):
106108
loadKeysData(ctx)
107109

108110
ctx.Data["Err_Content"] = true
109111
ctx.Data["Err_Signature"] = true
110-
ctx.Data["KeyID"] = err.(asymkey_model.ErrGPGNoEmailFound).ID
112+
keyID := err.(asymkey_model.ErrGPGNoEmailFound).ID
113+
ctx.Data["KeyID"] = keyID
114+
ctx.Data["PaddedKeyID"] = asymkey_model.PaddedKeyID(keyID)
111115
ctx.RenderWithErr(ctx.Tr("settings.gpg_no_key_email_found"), tplSettingsKeys, &form)
112116
default:
113117
ctx.ServerError("AddPublicKey", err)
@@ -139,7 +143,9 @@ func KeysPost(ctx *context.Context) {
139143
loadKeysData(ctx)
140144
ctx.Data["VerifyingID"] = form.KeyID
141145
ctx.Data["Err_Signature"] = true
142-
ctx.Data["KeyID"] = err.(asymkey_model.ErrGPGInvalidTokenSignature).ID
146+
keyID := err.(asymkey_model.ErrGPGInvalidTokenSignature).ID
147+
ctx.Data["KeyID"] = keyID
148+
ctx.Data["PaddedKeyID"] = asymkey_model.PaddedKeyID(keyID)
143149
ctx.RenderWithErr(ctx.Tr("settings.gpg_invalid_token_signature"), tplSettingsKeys, &form)
144150
default:
145151
ctx.ServerError("VerifyGPG", err)

Diff for: templates/user/settings/keys_gpg.tmpl

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818
<p>{{.locale.Tr "settings.gpg_token_required"}}</p>
1919
</div>
2020
<div class="field">
21-
<label for="token">{{.locale.Tr "setting.gpg_token"}}
21+
<label for="token">{{.locale.Tr "settings.gpg_token"}}
2222
<input readonly="" value="{{.TokenToSign}}">
2323
<div class="help">
2424
<p>{{.locale.Tr "settings.gpg_token_help"}}</p>
25-
<p><code>{{$.locale.Tr "settings.gpg_token_code" .TokenToSign .PaddedKeyID}}</code></p>
25+
<p><code>{{$.locale.Tr "settings.gpg_token_code" .TokenToSign .KeyID}}</code></p>
2626
</div>
2727
</div>
2828
<div class="field">

0 commit comments

Comments
 (0)