diff options
Diffstat (limited to 'app/handler.go')
| -rw-r--r-- | app/handler.go | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/app/handler.go b/app/handler.go new file mode 100644 index 0000000..c3093d6 --- /dev/null +++ b/app/handler.go @@ -0,0 +1,247 @@ +package main + +import ( + "encoding/json" + "fmt" + "log" + "net/http" + "net/url" +) + +func SetupHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Get Setup") + u := User{} + if Db.Find(&u).RecordNotFound() { + PrintRegisterHandler(w, r) + } else { + http.Redirect(w, r, "/login", 302) + } +} + +func RegisterHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Processing registration!") + session, err := store.Get(r, "_SID") + if err != nil { + log.Println(err) + } + u := User{} + err = r.ParseForm() + if err != nil { + log.Println(err) + } + err = decoder.Decode(&u, r.PostForm) + if err != nil { + log.Println(err) + } + u.Password, _ = HashPassword(u.Password) + query := Db.Create(&u) + if query.Error != nil { + session.AddFlash("Registration failed.", "error") + session.Save(r, w) + http.Redirect(w, r, "/register", 302) + return + } + session.AddFlash("Registration completed!", "success") + session.Values["login"] = true + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) +} + +func PrintRegisterHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Get Registration") + session, err := store.Get(r, "_SID") + if err != nil { + log.Println(err) + } + if session.Values["login"] == true { + http.Redirect(w, r, "/admin", 302) + log.Println("Schon erfolgreich eingeloggt!") + return + } + m := Messages{} + m.Success = session.Flashes("success") + m.Error = session.Flashes("error") + session.Save(r, w) + templ := mainTempl.Lookup("login.html") + + err = templ.ExecuteTemplate(w, "register.html", m) + if err != nil { + log.Panic(err) + } + +} + +func AddNewJobHandler(w http.ResponseWriter, r *http.Request) { + log.Printf("Add new job") + session, err := store.Get(r, "_SID") + if err != nil { + log.Println(err) + } + if session.Values["login"] != true { + session.Values["history"] = "/new" + session.Save(r, w) + http.Redirect(w, r, "/login", 302) + return + } + + err = r.ParseForm() + if err != nil { + log.Panic(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + host := Host{} + err = decoder.Decode(&host, r.PostForm) + if err != nil { + log.Println(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + u, err := url.Parse(host.Url) + if err != nil { + log.Println(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + if u.Scheme != "http" && u.Scheme != "https" { + session.AddFlash("Unsurportted scheme. Only http:// and https:// is valid.", "error") + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) + return + } + + host.Monitored = true + host.Host = u.Host + + query := Db.Save(&host) + if query.Error != nil { + log.Println(err) + //session.AddFlash("Befehl konnte auf Grund eines Problems nicht ausgeführt werden.", "error") + session.AddFlash("There was an error. :(", "error") + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) + } + + go func() { + h := []Host{} + Db.Find(&h) + h = CheckPages(h) + for k, _ := range h { + Db.Debug().Save(&h[k]) + } + CacheHosts(cache_prefix+"database", h) + }() + + session.AddFlash("Job added!", "success") + session.Save(r, w) + + http.Redirect(w, r, "/admin", 302) + +} + +func LoginHandler(w http.ResponseWriter, r *http.Request) { + session, err := store.Get(r, "_SID") + if err != nil { + log.Println(err) + } + u := User{} + err = r.ParseForm() + if err != nil { + log.Println(err) + } + err = decoder.Decode(&u, r.PostForm) + if err != nil { + log.Println(err) + } + log.Println("Processing Login", u.Name) + login := login(u.Name, u.Password, session) + if !login { + session.AddFlash("Login failed.", "error") + session.Save(r, w) + log.Println("Login failed.") + http.Redirect(w, r, "/login", 302) + return + } + session.Values["login"] = true + session.Save(r, w) + var redirectTarget string + if session.Values["history"] != "" && session.Values["history"] != nil { + redirectTarget = fmt.Sprintf("%v", session.Values["history"]) + session.Values["history"] = "" + session.Save(r, w) + http.Redirect(w, r, redirectTarget, 301) + } + http.Redirect(w, r, "/admin", 301) +} + +func PrintLoginHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Get Login") + session, err := store.Get(r, "_SID") + if err != nil { + log.Println(err) + } + + m := Messages{} + m.Success = session.Flashes("success") + m.Error = session.Flashes("error") + session.Save(r, w) + templ := mainTempl.Lookup("login.html") + + err = templ.ExecuteTemplate(w, "login.html", m) + if err != nil { + log.Panic(err) + } +} + +func LogoutHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Logout") + session, _ := store.Get(r, "_SID") + session.Values["login"] = false + session.Save(r, w) + http.Redirect(w, r, "/login", 301) +} + +func DeleteHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Get Delete") + session, err := store.Get(r, "_SID") + if err != nil { + log.Println(err) + } + if session.Values["login"] != true { + session.Values["history"] = "/admin" + session.Save(r, w) + http.Redirect(w, r, "/login", 302) + return + } + err = r.ParseForm() + if err != nil { + log.Println(err) + session.AddFlash("Error parsing form.", "error") + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) + return + } + host := Host{} + err = decoder.Decode(&host, r.URL.Query()) + if err != nil { + log.Println(err) + session.AddFlash("Error parsing form.", "error") + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) + return + } + log.Println("Deleting host where id = ", host.Id) + query := Db.Where("id = ?", host.Id).Delete(&host) + if query.Error != nil { + session.AddFlash("Deleting failed.", "error") + log.Println("Deleting failed.", query.Error) + } else { + session.AddFlash("We removed the host.", "success") + } + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) + go FillCache() +} |
