diff options
Diffstat (limited to 'app/handler.go')
| -rw-r--r-- | app/handler.go | 222 |
1 files changed, 196 insertions, 26 deletions
diff --git a/app/handler.go b/app/handler.go index 97c3558..e7bc738 100644 --- a/app/handler.go +++ b/app/handler.go @@ -9,28 +9,38 @@ import ( ) func IndexHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Get Index") hosts := []Host{} - c := pool.Get() - defer c.Close() - j, err := GetCache(cache_prefix + "database") if j != "" { err = json.Unmarshal([]byte(j), &hosts) if err != nil { log.Println("Error JSON decoding: ", err) + //Db.Where("private = ?", 0).Find(&hosts) Db.Find(&hosts) CacheHosts(cache_prefix+"database", hosts) } } else { log.Println("Cache miss on Index page.") + //Db.Where("private = ?", 0).Find(&hosts) Db.Find(&hosts) CacheHosts(cache_prefix+"database", hosts) } index := mainTempl.Lookup("index.html") + jobs := c.Entries() + + h := []Host{} + for k, _ := range hosts { + if !hosts[k].Private { + h = append(h, hosts[k]) + } + } + sticky, _ := GetCache(cache_prefix + "sticky") + m := Messages{Hosts: h, NextRun: jobs[0].Next, Sticky: sticky} - err = index.ExecuteTemplate(w, "index.html", hosts) + err = index.ExecuteTemplate(w, "index.html", m) if err != nil { log.Println(err) http.Error(w, err.Error(), http.StatusInternalServerError) @@ -38,16 +48,70 @@ func IndexHandler(w http.ResponseWriter, r *http.Request) { } } +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!") - fmt.Fprintf(w, "Processing registration! \n") + 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) + } - fmt.Fprintf(w, "Printing register etc! \n") } +/* func PrintNewJobHandler(w http.ResponseWriter, r *http.Request) { log.Println("Printing job") @@ -65,6 +129,7 @@ func PrintNewJobHandler(w http.ResponseWriter, r *http.Request) { log.Panic(err) } } +*/ func AddNewJobHandler(w http.ResponseWriter, r *http.Request) { log.Printf("Add new job") @@ -72,6 +137,12 @@ func AddNewJobHandler(w http.ResponseWriter, r *http.Request) { 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 { @@ -96,29 +167,27 @@ func AddNewJobHandler(w http.ResponseWriter, r *http.Request) { } if u.Scheme != "http" && u.Scheme != "https" { - log.Println("Scheme neither http nor https.", u.Scheme) session.AddFlash("Unsurportted scheme. Only http:// and https:// is valid.", "error") session.Save(r, w) http.Redirect(w, r, "/admin", 302) - // http.Error(w, "Scheme neither http nor https.", http.StatusInternalServerError) return } host.Monitored = true host.Host = u.Host - log.Printf("%v", host) - query := Db.Debug().Save(&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("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{} - h = append(h, host) + Db.Find(&h) h = CheckPages(h) for k, _ := range h { Db.Debug().Save(&h[k]) @@ -133,6 +202,7 @@ func AddNewJobHandler(w http.ResponseWriter, r *http.Request) { } +/* func ShowJobHandler(w http.ResponseWriter, r *http.Request) { jobs := c.Entries() @@ -140,6 +210,7 @@ func ShowJobHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Job: %v, Schedule: %v; Next %v; Prev %v \n", i.Job, i.Schedule, i.Next, i.Prev) } } +*/ func LoginHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") @@ -155,20 +226,19 @@ func LoginHandler(w http.ResponseWriter, r *http.Request) { if err != nil { log.Println(err) } - log.Println(u) + 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.") - log.Println(u.Name, u.Password) http.Redirect(w, r, "/login", 302) return } session.Values["login"] = true session.Save(r, w) var redirectTarget string - if session.Values["history"] != "" { + if session.Values["history"] != "" && session.Values["history"] != nil { redirectTarget = fmt.Sprintf("%v", session.Values["history"]) session.Values["history"] = "" session.Save(r, w) @@ -178,16 +248,12 @@ func LoginHandler(w http.ResponseWriter, r *http.Request) { } func PrintLoginHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Get Login") session, err := store.Get(r, "_SID") if err != nil { log.Println(err) } - if session.Values["login"] == true { - log.Println("Schon erfolgreich eingeloggt!") - // http.Redirect(w, r, "/", 301) - } else { - log.Println("Nicht eingeloggt.") - } + m := Messages{} m.Success = session.Flashes("success") m.Error = session.Flashes("error") @@ -201,23 +267,21 @@ func PrintLoginHandler(w http.ResponseWriter, r *http.Request) { } func LogoutHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Logout") session, _ := store.Get(r, "_SID") session.Values["login"] = false session.Save(r, w) + log.Println("Logout ", session.Values["login"]) http.Redirect(w, r, "/login", 301) } func AdminHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Get Admin") session, err := store.Get(r, "_SID") - //session.Values["login"] = true // löschen! - //session.Save(r, w) // löschen! if err != nil { log.Println(err) } if session.Values["login"] != true { - // http.Redirect(w, r, "/login", 401) - // w.WriteHeader(403) - // PrintLoginHandler(w, r) session.Values["history"] = "/admin" session.Save(r, w) http.Redirect(w, r, "/login", 302) @@ -226,10 +290,14 @@ func AdminHandler(w http.ResponseWriter, r *http.Request) { hosts := []Host{} Db.Find(&hosts) + jobs := c.Entries() + m := Messages{} m.Success = session.Flashes("success") m.Error = session.Flashes("error") m.Hosts = hosts + m.NextRun = jobs[0].Next + m.Sticky, _ = GetCache(cache_prefix + "sticky") session.Save(r, w) index := mainTempl.Lookup("admin.html") @@ -243,6 +311,7 @@ func AdminHandler(w http.ResponseWriter, r *http.Request) { } func RefreshAllHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Get RefreshAllHandler") session, err := store.Get(r, "_SID") if err != nil { log.Println(err) @@ -266,3 +335,104 @@ func RefreshAllHandler(w http.ResponseWriter, r *http.Request) { session.Save(r, w) http.Redirect(w, r, "/admin", 302) } + +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{} + log.Println(r.PostForm) + log.Println(r.URL.Query()) + 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") + } else { + session.AddFlash("We removed the host.", "success") + } + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) + go FillCache() +} + +func NewStickyHandler(w http.ResponseWriter, r *http.Request) { + log.Println("Get NewStickyHandler") + session, err := store.Get(r, "_SID") + if err != nil { + log.Println(err) + } + if session.Values["login"] != true { + log.Println("Login required. File: New Sticky") + session.AddFlash("Login required.", "error") + 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 + } + sticky := Sticky{} + err = decoder.Decode(&sticky, r.PostForm) + if err != nil { + log.Println(err) + session.AddFlash("Error Parsing form.", "error") + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) + return + } + if r.PostFormValue("Action") == "delete" { + log.Println("Deleting sticky post.") + DelCache(cache_prefix + "sticky") + session.AddFlash("Deleted the information post!", "success") + } else { + if sticky.Sticky == "" { + session.AddFlash("Empty form. Please fill out some text.", "error") + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) + return + } + c := pool.Get() + defer c.Close() + + _, err = c.Do("SET", cache_prefix+"sticky", sticky.Sticky) + if err != nil { + log.Println(err) + session.AddFlash("Error while storing.", "error") + } else { + log.Println("Adding new sticky post.") + session.AddFlash("Updated the information post.", "success") + } + } + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) +} |
