summaryrefslogtreecommitdiff
path: root/app/handler.go
diff options
context:
space:
mode:
Diffstat (limited to 'app/handler.go')
-rw-r--r--app/handler.go222
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)
+}