list

server

This is the main dovel repository, it has the Go code to run dovel SMTP server.

curl https://dovel.email/server.tar tar

d301a8d

Author: blmayer (bleemayer@gmail.com)

Date: Thu Jun 22 20:38:06 2023 -0300

Parent: cf724e0

Added wkd support

Diff

util/wkd/wkd.go

commit d301a8d47986b3b5f360636fb6e56b7d0d356925
Author: blmayer <bleemayer@gmail.com>
Date:   Thu Jun 22 20:38:06 2023 -0300

    Added wkd support

diff --git a/util/wkd/wkd.go b/util/wkd/wkd.go
new file mode 100644
index 0000000..1a86698
--- /dev/null
+++ b/util/wkd/wkd.go
@@ -0,0 +1,33 @@
+package wkd
+
+import (
+	"crypto/sha1"
+	"fmt"
+	"net/http"
+
+	pgp "github.com/ProtonMail/gopenpgp/v2/crypto"
+	"github.com/tv42/zbase32"
+)
+
+const suffix = "/.well-known/openpgpkey/hu/"
+
+func FetchPGPKey(local, domain string) (string, error) {
+	s := sha1.Sum([]byte(local))
+	slug := zbase32.EncodeToString(s[:])
+	res, err := http.Get("https://" + domain + suffix + slug)
+	if err != nil {
+		return "", err
+	}
+
+	if res.StatusCode > 399 {
+		return "", fmt.Errorf("key not found")
+	}
+	defer res.Body.Close()
+
+	key, err := pgp.NewKeyFromReader(res.Body)
+	if err != nil {
+		return "", err
+	}
+
+	return key.GetArmoredPublicKey()
+}