M crypto/crypto.go => crypto/crypto.go +4 -3
@@ 15,9 15,10 @@ import (
"github.com/vaughan0/go-ini"
)
+var WebhookPubkey ed25519.PublicKey
+
var (
webhookSk ed25519.PrivateKey
- webhookPk ed25519.PublicKey
bearerKey []byte
fernetKey *fernet.Key
)
@@ 32,7 33,7 @@ func InitCrypto(config ini.File) {
log.Fatalf("base64 decode webhooks private key: %v", err)
}
webhookSk = ed25519.NewKeyFromSeed(seed)
- webhookPk, _ = webhookSk.Public().(ed25519.PublicKey)
+ WebhookPubkey, _ = webhookSk.Public().(ed25519.PublicKey)
b64fernet, ok := config.Get("sr.ht", "network-key")
if !ok {
@@ 52,7 53,7 @@ func Sign(payload []byte) []byte {
}
func Verify(payload, signature []byte) bool {
- return ed25519.Verify(webhookPk, payload, signature)
+ return ed25519.Verify(WebhookPubkey, payload, signature)
}
func Encrypt(payload []byte) []byte {
M server/server.go => server/server.go +6 -2
@@ 3,6 3,7 @@ package server
import (
"context"
"database/sql"
+ "encoding/base64"
"encoding/json"
"fmt"
"log"
@@ 30,6 31,7 @@ import (
"git.sr.ht/~sircmpwn/core-go/auth"
"git.sr.ht/~sircmpwn/core-go/config"
+ "git.sr.ht/~sircmpwn/core-go/crypto"
"git.sr.ht/~sircmpwn/core-go/database"
"git.sr.ht/~sircmpwn/core-go/email"
"git.sr.ht/~sircmpwn/core-go/redis"
@@ 124,9 126,11 @@ func (server *Server) WithSchema(
r.Handle("/query/metrics", promhttp.Handler())
r.Get("/query/api-meta.json", func(w http.ResponseWriter, r *http.Request) {
+ pkey := base64.StdEncoding.EncodeToString(crypto.WebhookPubkey)
info := struct {
- Scopes []string `json:"scopes"`
- }{scopes}
+ Scopes []string `json:"scopes"`
+ WebhookPulic string `json:"webhook-pubkey"`
+ }{scopes, pkey}
j, err := json.Marshal(&info)
if err != nil {