From 36db28e7a18173ca781b2c1e4cda3a4b4afe65d9 Mon Sep 17 00:00:00 2001 From: Gusted Date: Fri, 23 Dec 2022 21:49:58 +0100 Subject: [PATCH 1/2] Fix key signature error page - When the GPG key has a error, e.g. signature invalid or email doesn't match the user. A page will be shown that 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 a undefined variable `.PaddedKeyID` is a function implemented on the `GPGKey` struct, given that we don't have that we use `KeyID` 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 reference to a Key. --- templates/user/settings/keys_gpg.tmpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/user/settings/keys_gpg.tmpl b/templates/user/settings/keys_gpg.tmpl index fe6c0bbeb1f79..29134d6badf8e 100644 --- a/templates/user/settings/keys_gpg.tmpl +++ b/templates/user/settings/keys_gpg.tmpl @@ -18,11 +18,11 @@

{{.locale.Tr "settings.gpg_token_required"}}

-
From e8be792e96ce8d35c62e2c0af100add61e87db38 Mon Sep 17 00:00:00 2001 From: zeripath Date: Thu, 29 Dec 2022 21:29:36 +0000 Subject: [PATCH 2/2] Ensure KeyID is padded (#6) Signed-off-by: Andrew Thornton Signed-off-by: Andrew Thornton --- models/asymkey/gpg_key.go | 11 ++++++++--- routers/web/user/setting/keys.go | 12 +++++++++--- templates/user/settings/keys_gpg.tmpl | 2 +- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/models/asymkey/gpg_key.go b/models/asymkey/gpg_key.go index ecd9041e65612..be019184eb5bb 100644 --- a/models/asymkey/gpg_key.go +++ b/models/asymkey/gpg_key.go @@ -64,11 +64,16 @@ func (key *GPGKey) AfterLoad(session *xorm.Session) { // PaddedKeyID show KeyID padded to 16 characters func (key *GPGKey) PaddedKeyID() string { - if len(key.KeyID) > 15 { - 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" - 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. diff --git a/routers/web/user/setting/keys.go b/routers/web/user/setting/keys.go index 89be795599bda..ec50eef9c18de 100644 --- a/routers/web/user/setting/keys.go +++ b/routers/web/user/setting/keys.go @@ -99,14 +99,18 @@ func KeysPost(ctx *context.Context) { loadKeysData(ctx) ctx.Data["Err_Content"] = 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) case asymkey_model.IsErrGPGNoEmailFound(err): loadKeysData(ctx) ctx.Data["Err_Content"] = 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) default: ctx.ServerError("AddPublicKey", err) @@ -138,7 +142,9 @@ func KeysPost(ctx *context.Context) { loadKeysData(ctx) ctx.Data["VerifyingID"] = form.KeyID 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) default: ctx.ServerError("VerifyGPG", err) diff --git a/templates/user/settings/keys_gpg.tmpl b/templates/user/settings/keys_gpg.tmpl index 29134d6badf8e..0968069c3a0af 100644 --- a/templates/user/settings/keys_gpg.tmpl +++ b/templates/user/settings/keys_gpg.tmpl @@ -22,7 +22,7 @@

{{.locale.Tr "settings.gpg_token_help"}}

-

{{$.locale.Tr "settings.gpg_token_code" .TokenToSign .KeyID}}

+

{{$.locale.Tr "settings.gpg_token_code" .TokenToSign .PaddedKeyID}}