package router import ( "net/http" "github.com/ewhal/nyaa/service/captcha" "github.com/ewhal/nyaa/service/user" "github.com/ewhal/nyaa/service/user/form" "github.com/ewhal/nyaa/service/user/permission" "github.com/ewhal/nyaa/util/languages" "github.com/ewhal/nyaa/util/modelHelper" "github.com/gorilla/mux" ) //var viewTemplate = template.Must(template.New("view").Funcs(FuncMap).ParseFiles("templates/index.html", "templates/view.html")) //var viewTemplate = template.Must(template.New("view").Funcs(FuncMap).ParseFiles("templates/index.html", "templates/view.html")) // Getting View User Registration func UserRegisterFormHandler(w http.ResponseWriter, r *http.Request) { _, errorUser := userService.CurrentUser(r) if (errorUser != nil) { b := form.RegistrationForm{} modelHelper.BindValueForm(&b, r) b.CaptchaID = captcha.GetID() languages.SetTranslationFromRequest(viewRegisterTemplate, r, "en-us") htv := UserRegisterTemplateVariables{b, form.NewErrors(), NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)} err := viewRegisterTemplate.ExecuteTemplate(w, "index.html", htv) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } else { HomeHandler(w, r) } } // Getting View User Login func UserLoginFormHandler(w http.ResponseWriter, r *http.Request) { b := form.LoginForm{} modelHelper.BindValueForm(&b, r) languages.SetTranslationFromRequest(viewLoginTemplate, r, "en-us") htv := UserLoginFormVariables{b, form.NewErrors(), NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)} err := viewLoginTemplate.ExecuteTemplate(w, "index.html", htv) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } // Getting User Profile func UserProfileHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id := vars["id"] userProfile, _, errorUser := userService.RetrieveUserForAdmin(id) if (errorUser == nil) { currentUser := GetUser(r) view := r.URL.Query().Get("view") if ((view == "edit")&&(userPermission.CurrentOrAdmin(currentUser, userProfile.Id))) { } else { languages.SetTranslationFromRequest(viewProfileTemplate, r, "en-us") htv := UserProfileVariables{&userProfile, form.NewErrors(), NewSearchForm(), Navigation{}, currentUser, r.URL, mux.CurrentRoute(r)} err := viewProfileTemplate.ExecuteTemplate(w, "index.html", htv) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } } else { searchForm := NewSearchForm() searchForm.HideAdvancedSearch = true languages.SetTranslationFromRequest(notFoundTemplate, r, "en-us") err := notFoundTemplate.ExecuteTemplate(w, "index.html", NotFoundTemplateVariables{Navigation{}, searchForm, GetUser(r), r.URL, mux.CurrentRoute(r)}) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } } // Getting View User Profile Update func UserProfileFormHandler(w http.ResponseWriter, r *http.Request) { } // Post Registration controller, we do some check on the form here, the rest on user service func UserRegisterPostHandler(w http.ResponseWriter, r *http.Request) { // Check same Password b := form.RegistrationForm{} err := form.NewErrors() if !captcha.Authenticate(captcha.Extract(r)) { err["errors"] = append(err["errors"], "Wrong captcha!") } if (len(err) == 0) { if len(r.PostFormValue("email")) > 0 { _, err = form.EmailValidation(r.PostFormValue("email"), err) } _, err = form.ValidateUsername(r.PostFormValue("username"), err) if (len(err) == 0) { modelHelper.BindValueForm(&b, r) err = modelHelper.ValidateForm(&b, err) if (len(err) == 0) { _, errorUser := userService.CreateUser(w, r) if (errorUser != nil) { err["errors"] = append(err["errors"], errorUser.Error()) } if (len(err) == 0) { b := form.RegistrationForm{} languages.SetTranslationFromRequest(viewRegisterSuccessTemplate, r, "en-us") htv := UserRegisterTemplateVariables{b, err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)} errorTmpl := viewRegisterSuccessTemplate.ExecuteTemplate(w, "index.html", htv) if errorTmpl != nil { http.Error(w, errorTmpl.Error(), http.StatusInternalServerError) } } } } } if (len(err) > 0) { b.CaptchaID = captcha.GetID() languages.SetTranslationFromRequest(viewRegisterTemplate, r, "en-us") htv := UserRegisterTemplateVariables{b, err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)} errorTmpl := viewRegisterTemplate.ExecuteTemplate(w, "index.html", htv) if errorTmpl != nil { http.Error(w, errorTmpl.Error(), http.StatusInternalServerError) } } } func UserVerifyEmailHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) token := vars["token"] err := form.NewErrors() _, errEmail := userService.EmailVerification(token, w) if (errEmail != nil) { err["errors"] = append(err["errors"], errEmail.Error()) } languages.SetTranslationFromRequest(viewVerifySuccessTemplate, r, "en-us") htv := UserVerifyTemplateVariables{err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)} errorTmpl := viewVerifySuccessTemplate.ExecuteTemplate(w, "index.html", htv) if errorTmpl != nil { http.Error(w, errorTmpl.Error(), http.StatusInternalServerError) } } // Post Login controller func UserLoginPostHandler(w http.ResponseWriter, r *http.Request) { b := form.LoginForm{} modelHelper.BindValueForm(&b, r) err := form.NewErrors() err = modelHelper.ValidateForm(&b, err) if (len(err) == 0) { _, errorUser := userService.CreateUserAuthentication(w, r) if (errorUser != nil) { err["errors"] = append(err["errors"], errorUser.Error()) languages.SetTranslationFromRequest(viewLoginTemplate, r, "en-us") htv := UserLoginFormVariables{b, err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)} errorTmpl := viewLoginTemplate.ExecuteTemplate(w, "index.html", htv) if errorTmpl != nil { http.Error(w, errorTmpl.Error(), http.StatusInternalServerError) } } else { url, _ := Router.Get("home").URL() http.Redirect(w, r, url.String(), http.StatusSeeOther) } } } // Logout func UserLogoutHandler(w http.ResponseWriter, r *http.Request) { _, _ = userService.ClearCookie(w) url, _ := Router.Get("home").URL() http.Redirect(w, r, url.String(), http.StatusSeeOther) } // Post Profule Update controller func UserProfilePostHandler(w http.ResponseWriter, r *http.Request) { }