tenseleyflow/shithub / bf76678

Browse files

S33: register webhook worker jobs

Authored by espadonne
SHA
bf76678a177af1e1a75bd6b6bc9e2ae8d5ddb876
Parents
ff0e41e
Tree
c4a13ed

1 changed file

StatusFile+-
M cmd/shithubd/worker.go 27 0
cmd/shithubd/worker.gomodified
@@ -19,9 +19,11 @@ import (
1919
 
2020
 	"github.com/tenseleyFlow/shithub/internal/auth/audit"
2121
 	"github.com/tenseleyFlow/shithub/internal/auth/email"
22
+	"github.com/tenseleyFlow/shithub/internal/auth/secretbox"
2223
 	"github.com/tenseleyFlow/shithub/internal/infra/config"
2324
 	"github.com/tenseleyFlow/shithub/internal/infra/db"
2425
 	"github.com/tenseleyFlow/shithub/internal/infra/storage"
26
+	"github.com/tenseleyFlow/shithub/internal/webhook"
2527
 	"github.com/tenseleyFlow/shithub/internal/worker"
2628
 	"github.com/tenseleyFlow/shithub/internal/worker/jobs"
2729
 )
@@ -122,6 +124,31 @@ var workerCmd = &cobra.Command{
122124
 			UnsubscribeKey: notifUnsubscribeKey(cfg, logger),
123125
 		}))
124126
 
127
+		// Webhook delivery (S33). The fan-out drains domain_events
128
+		// past its own cursor; deliver runs per-row HTTP POSTs;
129
+		// purge-old prunes terminal rows past the retention window.
130
+		// We reuse the TOTP key as the at-rest secretbox key — both
131
+		// are encrypted-blob columns in the same trust domain.
132
+		hookBox, hookBoxErr := secretbox.FromBase64(cfg.Auth.TOTPKeyB64)
133
+		if hookBoxErr != nil {
134
+			logger.Warn("webhook: secretbox unavailable; webhook delivery disabled",
135
+				"hint", "set Auth.TOTPKeyB64 to a base64 32-byte key",
136
+				"error", hookBoxErr)
137
+		} else {
138
+			p.Register(webhook.KindWebhookFanout, jobs.WebhookFanout(jobs.WebhookFanoutDeps{
139
+				Pool: pool, Logger: logger,
140
+			}))
141
+			p.Register(webhook.KindWebhookDeliver, jobs.WebhookDeliver(jobs.WebhookDeliverDeps{
142
+				Pool:      pool,
143
+				Logger:    logger,
144
+				SecretBox: hookBox,
145
+				SSRF:      webhook.DefaultSSRFConfig(),
146
+			}))
147
+			p.Register(webhook.KindWebhookPurgeOld, jobs.WebhookPurgeOld(jobs.WebhookPurgeOldDeps{
148
+				Pool: pool, Logger: logger, Retention: 30 * 24 * time.Hour,
149
+			}))
150
+		}
151
+
125152
 		return p.Run(ctx)
126153
 	},
127154
 }