@@ -11,10 +11,12 @@ import (
1111 "github.com/nicolashery/simply-shared-notes/app/access"
1212 "github.com/nicolashery/simply-shared-notes/app/config"
1313 "github.com/nicolashery/simply-shared-notes/app/db"
14+ "github.com/nicolashery/simply-shared-notes/app/email"
1415 "github.com/nicolashery/simply-shared-notes/app/forms"
1516 "github.com/nicolashery/simply-shared-notes/app/publicid"
1617 "github.com/nicolashery/simply-shared-notes/app/rctx"
1718 "github.com/nicolashery/simply-shared-notes/app/session"
19+ "github.com/nicolashery/simply-shared-notes/app/views/emails"
1820 "github.com/nicolashery/simply-shared-notes/app/views/pages"
1921)
2022
@@ -39,7 +41,7 @@ func handleSpacesNew(cfg *config.Config, logger *slog.Logger) http.HandlerFunc {
3941 }
4042}
4143
42- func handleSpacesCreate (cfg * config.Config , logger * slog.Logger , sqlDB * sql.DB , queries * db.Queries ) http.HandlerFunc {
44+ func handleSpacesCreate (cfg * config.Config , logger * slog.Logger , sqlDB * sql.DB , queries * db.Queries , email * email. Email ) http.HandlerFunc {
4345 return func (w http.ResponseWriter , r * http.Request ) {
4446 requiresCode := cfg .RequiresInvitationCode ()
4547
@@ -110,11 +112,25 @@ func handleSpacesCreate(cfg *config.Config, logger *slog.Logger, sqlDB *sql.DB,
110112 return
111113 }
112114
115+ emailSubject := emails .SpaceCreatedSubject (space )
116+ baseURL := baseUrlFromRequest (r )
117+ emailText := emails .SpaceCreatedText (member .Name , space , baseURL , tokens )
118+ err = email .Send (space .Email , emailSubject , emailText )
119+ if err != nil {
120+ logger .Error (
121+ "failed to send email" ,
122+ slog .Any ("error" , err ),
123+ slog .String ("email" , "space_created" ),
124+ )
125+ }
126+
113127 sess := rctx .GetSession (r .Context ())
114- sess .Values [session .IdentityKey ] = member .ID
115128 sess .AddFlash (session.FlashMessage {
116- Type : session .FlashType_Info ,
117- Content : fmt .Sprintf ("%s, welcome to the space %s!" , member .Name , space .Name ),
129+ Type : session .FlashType_Success ,
130+ Content : fmt .Sprintf (
131+ "Your new space %s was created! Check your emails for the link to the space at: %s!" ,
132+ space .Name , space .Email ,
133+ ),
118134 })
119135 err = sess .Save (r , w )
120136 if err != nil {
@@ -123,7 +139,21 @@ func handleSpacesCreate(cfg *config.Config, logger *slog.Logger, sqlDB *sql.DB,
123139 return
124140 }
125141
126- http .Redirect (w , r , fmt .Sprintf ("/s/%s" , space .AdminToken ), http .StatusSeeOther )
142+ http .Redirect (w , r , "/new/success" , http .StatusSeeOther )
143+ }
144+ }
145+
146+ func handleSpacesNewSuccess (logger * slog.Logger ) http.HandlerFunc {
147+ return func (w http.ResponseWriter , r * http.Request ) {
148+ err := pages .SpacesNewSuccess ().Render (r .Context (), w )
149+ if err != nil {
150+ logger .Error (
151+ "failed to render template" ,
152+ slog .Any ("error" , err ),
153+ slog .String ("template" , "SpacesNewSuccess" ),
154+ )
155+ http .Error (w , "internal server error" , http .StatusInternalServerError )
156+ }
127157 }
128158}
129159
@@ -396,11 +426,7 @@ func handleTokensShow(logger *slog.Logger) http.HandlerFunc {
396426 ViewToken : space .ViewToken ,
397427 }
398428
399- scheme := "http"
400- if r .TLS != nil || r .Header .Get ("X-Forwarded-Proto" ) == "https" {
401- scheme = "https"
402- }
403- baseURL := scheme + "://" + r .Host
429+ baseURL := baseUrlFromRequest (r )
404430
405431 err := pages .TokensShow (baseURL , tokens ).Render (r .Context (), w )
406432 if err != nil {
0 commit comments