Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

appview/signup: disable signup route if cloudflare config is unavailable

Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>

authored by

Anirudh Oppiliappan and committed by
Tangled
0b922f7b 20910c1a

+23 -12
+22 -3
appview/signup/signup.go
··· 14 14 "tangled.sh/tangled.sh/core/appview/pages" 15 15 "tangled.sh/tangled.sh/core/appview/state/userutil" 16 16 "tangled.sh/tangled.sh/core/appview/xrpcclient" 17 + "tangled.sh/tangled.sh/core/idresolver" 17 18 ) 18 19 19 20 type Signup struct { ··· 28 27 l *slog.Logger 29 28 } 30 29 31 - func New(cfg *config.Config, cf *dns.Cloudflare, database *db.DB, pc posthog.Client, idResolver *idresolver.Resolver, pages *pages.Pages, l *slog.Logger) *Signup { 30 + func New(cfg *config.Config, database *db.DB, pc posthog.Client, idResolver *idresolver.Resolver, pages *pages.Pages, l *slog.Logger) *Signup { 31 + var cf *dns.Cloudflare 32 + if cfg.Cloudflare.ApiToken != "" && cfg.Cloudflare.ZoneId != "" { 33 + var err error 34 + cf, err = dns.NewCloudflare(cfg) 35 + if err != nil { 36 + l.Warn("failed to create cloudflare client, signup will be disabled", "error", err) 37 + } 38 + } 39 + 32 40 return &Signup{ 33 41 config: cfg, 34 42 db: database, 35 - cf: cf, 36 43 posthog: pc, 37 44 idResolver: idResolver, 45 + cf: cf, 38 46 pages: pages, 39 47 l: l, 40 48 } ··· 59 49 } 60 50 61 51 func (s *Signup) signup(w http.ResponseWriter, r *http.Request) { 52 + if s.cf == nil { 53 + http.Error(w, "signup is disabled", http.StatusFailedDependency) 54 + } 62 55 emailId := r.FormValue("email") 63 56 64 57 if !email.IsValidEmail(emailId) { ··· 145 132 return 146 133 } 147 134 135 + if s.cf == nil { 136 + s.l.Error("cloudflare client is nil", "error", "Cloudflare integration is not enabled in configuration") 137 + s.pages.Notice(w, "signup-error", "Account signup is currently disabled. DNS record creation is not available. Please contact support.") 138 + return 139 + } 140 + 148 141 err = s.cf.CreateDNSRecord(r.Context(), dns.Record{ 149 142 Type: "TXT", 150 143 Name: "_atproto." + username, ··· 160 141 }) 161 142 if err != nil { 162 143 s.l.Error("failed to create DNS record", "error", err) 163 - s.pages.Notice(w, "signup-error", "Failed to complete sign up. Try again later.") 144 + s.pages.Notice(w, "signup-error", "Failed to create DNS record for your handle. Please contact support.") 164 145 return 165 146 } 166 147
+1 -1
appview/state/router.go
··· 223 223 func (s *State) SignupRouter() http.Handler { 224 224 logger := log.New("signup") 225 225 226 - sig := signup.New(s.config, s.cf, s.db, s.posthog, s.idResolver, s.pages, logger) 226 + sig := signup.New(s.config, s.db, s.posthog, s.idResolver, s.pages, logger) 227 227 return sig.Router() 228 228 }
-8
appview/state/state.go
··· 20 20 "tangled.sh/tangled.sh/core/appview/cache/session" 21 21 "tangled.sh/tangled.sh/core/appview/config" 22 22 "tangled.sh/tangled.sh/core/appview/db" 23 - "tangled.sh/tangled.sh/core/appview/dns" 24 23 "tangled.sh/tangled.sh/core/appview/notify" 25 24 "tangled.sh/tangled.sh/core/appview/oauth" 26 25 "tangled.sh/tangled.sh/core/appview/pages" ··· 46 47 jc *jetstream.JetstreamClient 47 48 config *config.Config 48 49 repoResolver *reporesolver.RepoResolver 49 - cf *dns.Cloudflare 50 50 knotstream *eventconsumer.Consumer 51 51 spindlestream *eventconsumer.Consumer 52 52 } ··· 137 139 } 138 140 notifier := notify.NewMergedNotifier(notifiers...) 139 141 140 - cf, err := dns.NewCloudflare(config) 141 - if err != nil { 142 - return nil, fmt.Errorf("failed to create Cloudflare client: %w", err) 143 - } 144 - 145 142 state := &State{ 146 143 d, 147 144 notifier, ··· 149 156 jc, 150 157 config, 151 158 repoResolver, 152 - cf, 153 159 knotstream, 154 160 spindlestream, 155 161 }