package main import ( "log" "net/http" ) func IndexHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } session.Values["page"] = "/" flash := Flash{} flash.Error = session.Flashes("error") flash.Success = session.Flashes("success") session.Save(r, w) err = ExecTemplate("index", w, r, flash) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } session.Save(r, w) } func RegisterHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } session.Values["page"] = "/register" flash := Flash{} flash.Error = session.Flashes("error") flash.Success = session.Flashes("success") session.Save(r, w) err = ExecTemplate("register", w, r, flash) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } func PrivacyHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } session.Values["page"] = "/privacy" flash := Flash{} flash.Error = session.Flashes("error") flash.Success = session.Flashes("success") session.Save(r, w) err = ExecTemplate("privacy", w, r, flash) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } func TosHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } session.Values["page"] = "/tos" flash := Flash{} flash.Error = session.Flashes("error") flash.Success = session.Flashes("success") session.Save(r, w) err = ExecTemplate("tos", w, r, flash) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } func CreateNewEntryHandler(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() if err != nil { log.Panic(err) http.Error(w, err.Error(), http.StatusInternalServerError) return } req := Request{} err = decoder.Decode(&req, r.PostForm) if err != nil { log.Panic(err) http.Error(w, err.Error(), http.StatusInternalServerError) return } session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } if !req.Legal { session.AddFlash("Please accept the Terms of Service and the Privacy Policy.", "error") session.Save(r, w) http.Redirect(w, r, "/register", 302) return } if !CompareStrings(req.Email, req.ConfirmEmail) { session.AddFlash("E-Mail don't match.", "error") session.Save(r, w) http.Redirect(w, r, "/register", 302) return } if !CompareStrings(req.Password, req.ConfirmPassword) { session.AddFlash("Passwords don't match.", "error") session.Save(r, w) http.Redirect(w, r, "/register", 302) return } req.Password = Md5Hash(req.Password) err = CreateNewEntry(req.Email, req.Password) if err != nil { session.AddFlash(err.Error(), "error") session.Save(r, w) http.Redirect(w, r, "/register", 302) return } log.Println("Info: New sign up " + req.Email + " from " + GetIP(r)) session.AddFlash("Success! You can login now with your new mail account.", "success") session.Save(r, w) http.Redirect(w, r, "/user", 302) } func AboutHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } session.Values["page"] = "/about" flash := Flash{} flash.Error = session.Flashes("error") flash.Success = session.Flashes("success") session.Save(r, w) err = ExecTemplate("about", w, r, flash) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } session.Save(r, w) } func ServerHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } session.Values["page"] = "/server" flash := Flash{} flash.Error = session.Flashes("error") flash.Success = session.Flashes("success") session.Save(r, w) err = ExecTemplate("server", w, r, flash) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } session.Save(r, w) } func HowtoHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } session.Values["page"] = "/howto" flash := Flash{} flash.Error = session.Flashes("error") flash.Success = session.Flashes("success") session.Save(r, w) err = ExecTemplate("howto", w, r, flash) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } session.Save(r, w) } func UserHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } session.Values["page"] = "/user" flash := Flash{} flash.Error = session.Flashes("error") flash.Success = session.Flashes("success") session.Save(r, w) err = ExecTemplate("user", w, r, flash) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } session.Save(r, w) } func PasswordHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } session.Values["page"] = "/password" flash := Flash{} flash.Error = session.Flashes("error") flash.Success = session.Flashes("success") session.Save(r, w) err = ExecTemplate("password", w, r, flash) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } session.Save(r, w) } func ChangePasswordHandler(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() if err != nil { log.Panic(err) http.Error(w, err.Error(), http.StatusInternalServerError) return } req := ChangePasswordReq{} err = decoder.Decode(&req, r.PostForm) if err != nil { log.Panic(err) http.Error(w, err.Error(), http.StatusInternalServerError) return } session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } if !CompareStrings(req.NewPassword, req.ConfirmPassword) { session.AddFlash("Passwords don't match.", "error") session.Save(r, w) http.Redirect(w, r, "/password", 302) return } req.Password = Md5Hash(req.Password) req.NewPassword = Md5Hash(req.NewPassword) if err := ChangePassword(req.Email, req.Password, req.NewPassword); err != nil { log.Println("Info: ", err) session.AddFlash(err.Error(), "error") session.Save(r, w) http.Redirect(w, r, "/password", 302) return } log.Println("Info: Changed password for " + req.Email + " from " + GetIP(r)) session.AddFlash("Changed your password.", "success") session.Save(r, w) http.Redirect(w, r, "/user", 302) } func ChangeLocaleHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") if err != nil { log.Println("Info: ", err) } err = r.ParseForm() if err != nil { log.Panic(err) http.Error(w, err.Error(), http.StatusInternalServerError) return } locale := r.URL.Query().Get("to") var page string if session.Values["page"] == "" || session.Values["page"] == nil { page = "/" } else { page = session.Values["page"].(string) } if len(locale) == 0 { http.Redirect(w, r, page, 302) return } cookie := http.Cookie{Name: "lang", Value: locale} http.SetCookie(w, &cookie) http.Redirect(w, r, page, 302) }