- 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`](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.
This commit is contained in:
parent
53db977e7e
commit
75f128ebf8
3 changed files with 20 additions and 6 deletions
|
@ -68,8 +68,16 @@ func (key *GPGKey) PaddedKeyID() string {
|
||||||
if len(key.KeyID) > 15 {
|
if len(key.KeyID) > 15 {
|
||||||
return key.KeyID
|
return key.KeyID
|
||||||
}
|
}
|
||||||
|
return PaddedKeyID(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.
|
||||||
|
|
|
@ -100,14 +100,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)
|
||||||
|
@ -139,7 +143,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,11 +18,11 @@
|
||||||
<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>
|
||||||
<p><code>{{$.locale.Tr "settings.gpg_token_code" .TokenToSign .PaddedKeyID}}</code></p>
|
<p><code>{{$.locale.Tr "settings.gpg_token_code" .TokenToSign .KeyID}}</code></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
|
|
Reference in a new issue