package handlers import ( "log" "net/http" "threadr/models" "github.com/gorilla/sessions" ) func SignupHandler(app *App) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { session := r.Context().Value("session").(*sessions.Session) if r.Method == http.MethodPost { username := r.FormValue("username") password := r.FormValue("password") err := models.CreateUser(app.DB, username, password) if err != nil { log.Printf("Error creating user: %v", err) data := struct { PageData Error string }{ PageData: PageData{ Title: "ThreadR - Sign Up", Navbar: "signup", LoggedIn: false, ShowCookieBanner: true, BasePath: app.Config.ThreadrDir, StaticPath: app.Config.ThreadrDir + "/static", CurrentURL: r.URL.Path, }, Error: "Error creating user: " + err.Error(), } if err := app.Tmpl.ExecuteTemplate(w, "signup", data); err != nil { log.Printf("Error executing template in SignupHandler: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } return } http.Redirect(w, r, app.Config.ThreadrDir+"/login/", http.StatusFound) return } data := struct { PageData Error string }{ PageData: PageData{ Title: "ThreadR - Sign Up", Navbar: "signup", LoggedIn: session.Values["user_id"] != nil, ShowCookieBanner: true, BasePath: app.Config.ThreadrDir, StaticPath: app.Config.ThreadrDir + "/static", CurrentURL: r.URL.Path, }, Error: "", } if err := app.Tmpl.ExecuteTemplate(w, "signup", data); err != nil { log.Printf("Error executing template in SignupHandler: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } } }