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