// Process login action func (self *AuthController) ProcessLogin(w http.ResponseWriter, req *http.Request, r render.Render, di *di.DI) { email := req.FormValue("Email") user := di.UserManager().FindActiveByEmail(email) if user == nil { // not authenticated // message: Invalid credentials r.Redirect("/auth/") return } password := req.FormValue("Password") if di.UserManager().CheckPassword(user, password) { // message: Hello, {userName} authManager := di.AuthManager() token := authManager.GenerateToken(user) // set cookie cookie := http.Cookie{Name: "gousertoken", Value: token, Path: "/"} http.SetCookie(w, &cookie) r.Redirect("/users/") } else { // not authorized // message: Invalid credentials r.Redirect("/auth/") } }
// Process register: check form, create new inactive user and send activation email func (self *RegisterController) ProcessRegister(params martini.Params, req *http.Request, r render.Render, di *di.DI) { userManager := di.UserManager() user := userManager.NewUser() // need validate user.Email = req.FormValue("Email") rawPassword := req.FormValue("Password") user.Password = userManager.CryptPassword(rawPassword) user.FullName = req.FormValue("FullName") user.Address = req.FormValue("Address") user.Phone = req.FormValue("Phone") user.IsActive = false user.Hash = userManager.GenerateHash(user.Email + user.FullName) userManager.Create(user) // send email mailer := di.Mailer() go mailer.Send(mailer.BuildRegistrationMail(user)) // message: "Activation link was sent to your email." r.Redirect("/users/") }
/** * Route /users/:id/view/ */ func (u *UserController) View(params martini.Params, r render.Render, di *di.DI, templateVars utils.TemplateVars) { userManager := di.UserManager() id := params["id"] user := userManager.FindById(id) if user == nil { r.HTML(404, "error/404", templateVars) } else { templateVars.SetData(user) r.HTML(200, "user/view", templateVars) } }
// Check activation link and activate user func (self *RegisterController) ProcessActivate(params martini.Params, req *http.Request, r render.Render, di *di.DI, templateVars utils.TemplateVars) { userManager := di.UserManager() user := userManager.FindInActiveByHash(params["hash"]) if user == nil { r.HTML(404, "error/404", templateVars) return } user.IsActive = true user.Hash = "" userManager.Update(user) // message "Activation complete. How you can enter on site." r.Redirect("/auth/") }
/** * Save user * Route /users/save/profile/ */ func (u *UserController) Save(req *http.Request, r render.Render, di *di.DI, templateVars utils.TemplateVars) { authManager := di.AuthManager() if !authManager.IsAuthenticated() { r.HTML(403, "error/403", templateVars) return } userManager := di.UserManager() currentUser := authManager.CurrentUser() // clone user newUser := *currentUser newUser.FullName = req.FormValue("FullName") newUser.Address = req.FormValue("Address") newUser.Phone = req.FormValue("Phone") userManager.Update(&newUser) // store user updates to log di.UpdateLogManager().StoreChanges(currentUser, &newUser) // redirect strId := strconv.FormatInt(currentUser.Id, 10) r.Redirect("/users/" + strId + "/view/") }
/** * Routes '/', '/users/' */ func (u *UserController) List(r render.Render, di *di.DI, templateVars utils.TemplateVars) { userManager := di.UserManager() all := userManager.FindAll() templateVars.SetData(all) r.HTML(200, "user/list", templateVars) }