package controllers import ( "fmt" "net/http" "git.kealoha.me/lks/lenslocked/models" "git.kealoha.me/lks/lenslocked/templates" "git.kealoha.me/lks/lenslocked/views" ) type Users struct { Templates struct { Signup Template Signin Template } UserService *models.UserService } func (u Users) GetSignup(w http.ResponseWriter, r *http.Request) { var data struct { Email string } data.Email = r.FormValue("email") u.Templates.Signup.Execute(w, r, data) } func (u Users) PostSignup(w http.ResponseWriter, r *http.Request) { email := r.FormValue("email") password := r.FormValue("password") user, err := u.UserService.Create(email, password) if err != nil { fmt.Println(err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } fmt.Fprintf(w, "User created: %+v", user) } func (u Users) GetSignin(w http.ResponseWriter, r *http.Request) { var data struct { Email string } data.Email = r.FormValue("email") u.Templates.Signin.Execute(w, r, data) } func (u Users) PostSignin(w http.ResponseWriter, r *http.Request) { var data struct { Email string Password string } data.Email = r.FormValue("email") data.Password = r.FormValue("password") user, err := u.UserService.Authenticate(data.Email, data.Password) if err != nil { fmt.Println(err) http.Error(w, "Something went wrong.", http.StatusInternalServerError) return } // Bad cookie cookie := http.Cookie{ Name: "bad", Value: user.Email, Path: "/", } http.SetCookie(w, &cookie) fmt.Fprintf(w, "User authenticated: %+v", user) } func (u Users) CurrentUser(w http.ResponseWriter, r *http.Request) { email, err := r.Cookie("bad") if err != nil { fmt.Fprint(w, "The bad cookie could not be read.") return } fmt.Fprintf(w, "Bad cookie: %s\n", email.Value) } func WithTemplates(user_service *models.UserService, signup Template, signin Template) Users { u := Users{} u.Templates.Signup = signup u.Templates.Signin = signin u.UserService = user_service return u } func Default(user_service *models.UserService, templatePath ...string) Users { signup_tpl := views.Must(views.FromFS(templates.FS, "signup.gohtml", "tailwind.gohtml")) signin_tpl := views.Must(views.FromFS(templates.FS, "signin.gohtml", "tailwind.gohtml")) err := signup_tpl.TestTemplate(nil) if err != nil { panic(err) } err = signin_tpl.TestTemplate(nil) if err != nil { panic(err) } return WithTemplates(user_service, signup_tpl, signin_tpl) }