mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-22 08:42:32 -05:00
Fix key signature error page (#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`](e81ccc406b/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`](e81ccc406b/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. Before: ![image](https://user-images.githubusercontent.com/25481501/209404800-0e7c39ce-861a-455b-b234-62498d750aa8.png) After: ![image](https://user-images.githubusercontent.com/25481501/209404821-c70f81c6-fd10-4197-ab58-61cb9fc873d8.png) Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
parent
a609cae9fb
commit
b76970f2e4
3 changed files with 18 additions and 7 deletions
|
@ -64,11 +64,16 @@ func (key *GPGKey) AfterLoad(session *xorm.Session) {
|
||||||
|
|
||||||
// PaddedKeyID show KeyID padded to 16 characters
|
// PaddedKeyID show KeyID padded to 16 characters
|
||||||
func (key *GPGKey) PaddedKeyID() string {
|
func (key *GPGKey) PaddedKeyID() string {
|
||||||
if len(key.KeyID) > 15 {
|
return PaddedKeyID(key.KeyID)
|
||||||
return key.KeyID
|
}
|
||||||
|
|
||||||
|
// PaddedKeyID show KeyID padded to 16 characters
|
||||||
|
func PaddedKeyID(keyID string) string {
|
||||||
|
if len(keyID) > 15 {
|
||||||
|
return keyID
|
||||||
}
|
}
|
||||||
zeros := "0000000000000000"
|
zeros := "0000000000000000"
|
||||||
return zeros[0:16-len(key.KeyID)] + key.KeyID
|
return zeros[0:16-len(keyID)] + keyID
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListGPGKeys returns a list of public keys belongs to given user.
|
// ListGPGKeys returns a list of public keys belongs to given user.
|
||||||
|
|
|
@ -99,14 +99,18 @@ func KeysPost(ctx *context.Context) {
|
||||||
loadKeysData(ctx)
|
loadKeysData(ctx)
|
||||||
ctx.Data["Err_Content"] = true
|
ctx.Data["Err_Content"] = true
|
||||||
ctx.Data["Err_Signature"] = true
|
ctx.Data["Err_Signature"] = true
|
||||||
ctx.Data["KeyID"] = err.(asymkey_model.ErrGPGInvalidTokenSignature).ID
|
keyID := err.(asymkey_model.ErrGPGInvalidTokenSignature).ID
|
||||||
|
ctx.Data["KeyID"] = keyID
|
||||||
|
ctx.Data["PaddedKeyID"] = asymkey_model.PaddedKeyID(keyID)
|
||||||
ctx.RenderWithErr(ctx.Tr("settings.gpg_invalid_token_signature"), tplSettingsKeys, &form)
|
ctx.RenderWithErr(ctx.Tr("settings.gpg_invalid_token_signature"), tplSettingsKeys, &form)
|
||||||
case asymkey_model.IsErrGPGNoEmailFound(err):
|
case asymkey_model.IsErrGPGNoEmailFound(err):
|
||||||
loadKeysData(ctx)
|
loadKeysData(ctx)
|
||||||
|
|
||||||
ctx.Data["Err_Content"] = true
|
ctx.Data["Err_Content"] = true
|
||||||
ctx.Data["Err_Signature"] = true
|
ctx.Data["Err_Signature"] = true
|
||||||
ctx.Data["KeyID"] = err.(asymkey_model.ErrGPGNoEmailFound).ID
|
keyID := err.(asymkey_model.ErrGPGNoEmailFound).ID
|
||||||
|
ctx.Data["KeyID"] = keyID
|
||||||
|
ctx.Data["PaddedKeyID"] = asymkey_model.PaddedKeyID(keyID)
|
||||||
ctx.RenderWithErr(ctx.Tr("settings.gpg_no_key_email_found"), tplSettingsKeys, &form)
|
ctx.RenderWithErr(ctx.Tr("settings.gpg_no_key_email_found"), tplSettingsKeys, &form)
|
||||||
default:
|
default:
|
||||||
ctx.ServerError("AddPublicKey", err)
|
ctx.ServerError("AddPublicKey", err)
|
||||||
|
@ -138,7 +142,9 @@ func KeysPost(ctx *context.Context) {
|
||||||
loadKeysData(ctx)
|
loadKeysData(ctx)
|
||||||
ctx.Data["VerifyingID"] = form.KeyID
|
ctx.Data["VerifyingID"] = form.KeyID
|
||||||
ctx.Data["Err_Signature"] = true
|
ctx.Data["Err_Signature"] = true
|
||||||
ctx.Data["KeyID"] = err.(asymkey_model.ErrGPGInvalidTokenSignature).ID
|
keyID := err.(asymkey_model.ErrGPGInvalidTokenSignature).ID
|
||||||
|
ctx.Data["KeyID"] = keyID
|
||||||
|
ctx.Data["PaddedKeyID"] = asymkey_model.PaddedKeyID(keyID)
|
||||||
ctx.RenderWithErr(ctx.Tr("settings.gpg_invalid_token_signature"), tplSettingsKeys, &form)
|
ctx.RenderWithErr(ctx.Tr("settings.gpg_invalid_token_signature"), tplSettingsKeys, &form)
|
||||||
default:
|
default:
|
||||||
ctx.ServerError("VerifyGPG", err)
|
ctx.ServerError("VerifyGPG", err)
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
<p>{{.locale.Tr "settings.gpg_token_required"}}</p>
|
<p>{{.locale.Tr "settings.gpg_token_required"}}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label for="token">{{.locale.Tr "setting.gpg_token"}}
|
<label for="token">{{.locale.Tr "settings.gpg_token"}}
|
||||||
<input readonly="" value="{{.TokenToSign}}">
|
<input readonly="" value="{{.TokenToSign}}">
|
||||||
<div class="help">
|
<div class="help">
|
||||||
<p>{{.locale.Tr "settings.gpg_token_help"}}</p>
|
<p>{{.locale.Tr "settings.gpg_token_help"}}</p>
|
||||||
|
|
Loading…
Reference in a new issue