dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit 80c67256578daf24956af8559802a25f00879c3c
parent 75c1fa861f8d18dc9fe739b0b99d340eee7394a6
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Thu,  8 Feb 2024 20:20:42 -0800

display gpg key expired time on user profile

Diffstat:
Mpkg/utils/utils.go | 24++++++++++++++++++++++++
Mpkg/web/handlers/data.go | 9++++++---
Mpkg/web/handlers/handlers.go | 4++++
Mpkg/web/public/views/pages/public-profile.gohtml | 13++++++++++++-
4 files changed, 46 insertions(+), 4 deletions(-)

diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go @@ -448,6 +448,21 @@ func getGCMKeyBytes(keyBytes []byte) (cipher.AEAD, int, error) { return gcm, nonceSize, nil } +func GetKeyExpiredTime(pkey string) (*time.Time, bool) { + e := GetEntityFromPKey(pkey) + if e == nil { + return nil, false + } + i := e.PrimaryIdentity() + sig := i.SelfSignature + if sig.KeyLifetimeSecs == nil || *sig.KeyLifetimeSecs == 0 { + return nil, false + } + expiredTime := e.PrimaryKey.CreationTime.Add(time.Duration(*sig.KeyLifetimeSecs) * time.Second) + expired := e.PrimaryKey.KeyExpired(sig, time.Now()) + return &expiredTime, expired +} + func GetKeyFingerprint(pkey string) string { if e := GetEntityFromPKey(pkey); e != nil { return FormatPgPFingerprint(e.PrimaryKey.Fingerprint) @@ -539,6 +554,15 @@ func GeneratePgpEncryptedMessage(pkey, msg string) (string, error) { armoredWriter, _ := armor.Encode(buffer, "PGP MESSAGE", nil) w, err := openpgp.Encrypt(armoredWriter, []*openpgp.Entity{e}, nil, nil, nil) if err != nil { + + //i := e.PrimaryIdentity() + //sig := i.SelfSignature + //if sig.KeyLifetimeSecs != nil && *sig.KeyLifetimeSecs != 0 { + // expiry := e.PrimaryKey.CreationTime.Add(time.Duration(*sig.KeyLifetimeSecs) * time.Second) + //} + //if e.PrimaryKey.KeyExpired(sig, time.Now()) { + //} + // openpgp: invalid argument: cannot encrypt a message to key id xxx because it has no encryption keys // Likely your key is expired or had expired subkeys. (https://github.com/keybase/keybase-issues/issues/2072#issuecomment-183702559) logrus.Error(err) diff --git a/pkg/web/handlers/data.go b/pkg/web/handlers/data.go @@ -929,9 +929,12 @@ type adminSpamFiltersData struct { } type publicProfileData struct { - User database.User - PublicNotes database.UserPublicNote - UserStyle string + User database.User + PublicNotes database.UserPublicNote + UserStyle string + GpgKeyExpiredTime *time.Time + GpgKeyExpired bool + GpgKeyExpiredSoon bool } type fileDropData struct { diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -698,6 +698,10 @@ func PublicUserProfileHandler(c echo.Context) error { data.User = user data.UserStyle = user.GenerateChatStyle() data.PublicNotes, _ = db.GetUserPublicNotes(user.ID) + data.GpgKeyExpiredTime, data.GpgKeyExpired = utils.GetKeyExpiredTime(user.GPGPublicKey) + if data.GpgKeyExpiredTime != nil { + data.GpgKeyExpiredSoon = data.GpgKeyExpiredTime.AddDate(0, -1, 0).Before(time.Now()) + } return c.Render(http.StatusOK, "public-profile", data) } diff --git a/pkg/web/public/views/pages/public-profile.gohtml b/pkg/web/public/views/pages/public-profile.gohtml @@ -66,7 +66,18 @@ <span style="color: #c0ebff;">{{ if .Data.User.AgePublicKey }}{{ .Data.User.AgePublicKey }}{{ else }}none{{ end }}</span> </div> <div class="mt-3"> - <label for="pgpPublicKey">PGP key: <span style="color: #82e17f;">{{ .Data.User.GPGPublicKey | getKeyFingerprint }}</span></label><br /> + <label for="pgpPublicKey"> + PGP key: + <span style="color: #82e17f;">{{ .Data.User.GPGPublicKey | getKeyFingerprint }}</span> + {{ if .Data.GpgKeyExpiredTime }} + <span class="ml-3"> + ( Expires on: + <span style="color: {{ if .Data.GpgKeyExpired }}red;{{ else if .Data.GpgKeyExpiredSoon }}orange{{ else }}#82e17f{{ end }};"> + {{ .Data.GpgKeyExpiredTime.Format "Jan 02, 2006 15:04:05" }} + </span>) + </span> + {{ end }} + </label><br /> <textarea id="pgpPublicKey" rows="10" class="form-control mono" readonly>{{ .Data.User.GPGPublicKey }}</textarea> </div> <div class="mt-3">