diff options
author | Antoine GIRARD <sapk@users.noreply.github.com> | 2019-04-14 18:43:56 +0200 |
---|---|---|
committer | techknowlogick <matti@mdranta.net> | 2019-04-14 12:43:56 -0400 |
commit | d699de32f2f6fd2216c8d620c8f53011e511b56b (patch) | |
tree | 1588178184132c2ac6f84af763ba003c469dba4c /routers/user/home.go | |
parent | 38889f09cbe039217f159838961b631f8f8d3b46 (diff) | |
download | gitea-d699de32f2f6fd2216c8d620c8f53011e511b56b.tar.gz gitea-d699de32f2f6fd2216c8d620c8f53011e511b56b.zip |
add .gpg url (match github behaviour) (#6610)
* add .gpg url (match github behaviour)
* wildcard
* test to export maximum data
* working POC
* add comment for old imported keys
* cleaning
* Update routers/user/profile.go
Co-Authored-By: sapk <sapk@users.noreply.github.com>
* add migration script
* add integration tests
Diffstat (limited to 'routers/user/home.go')
-rw-r--r-- | routers/user/home.go | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/routers/user/home.go b/routers/user/home.go index 740a9edc4e..8eedeb70bd 100644 --- a/routers/user/home.go +++ b/routers/user/home.go @@ -19,6 +19,8 @@ import ( "github.com/Unknwon/com" "github.com/Unknwon/paginater" + "github.com/keybase/go-crypto/openpgp" + "github.com/keybase/go-crypto/openpgp/armor" ) const ( @@ -384,6 +386,45 @@ func ShowSSHKeys(ctx *context.Context, uid int64) { ctx.PlainText(200, buf.Bytes()) } +// ShowGPGKeys output all the public GPG keys of user by uid +func ShowGPGKeys(ctx *context.Context, uid int64) { + keys, err := models.ListGPGKeys(uid) + if err != nil { + ctx.ServerError("ListGPGKeys", err) + return + } + entities := make([]*openpgp.Entity, 0) + failedEntitiesID := make([]string, 0) + for _, k := range keys { + e, err := models.GPGKeyToEntity(k) + if err != nil { + if models.IsErrGPGKeyImportNotExist(err) { + failedEntitiesID = append(failedEntitiesID, k.KeyID) + continue //Skip previous import without backup of imported armored key + } + ctx.ServerError("ShowGPGKeys", err) + return + } + entities = append(entities, e) + } + var buf bytes.Buffer + + 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, ", ")) + } + writer, _ := armor.Encode(&buf, "PGP PUBLIC KEY BLOCK", headers) + for _, e := range entities { + err = e.Serialize(writer) //TODO find why key are exported with a different cipherTypeByte as original (should not be blocking but strange) + if err != nil { + ctx.ServerError("ShowGPGKeys", err) + return + } + } + writer.Close() + ctx.PlainText(200, buf.Bytes()) +} + func showOrgProfile(ctx *context.Context) { ctx.SetParams(":org", ctx.Params(":username")) context.HandleOrgAssignment(ctx) |