diff options
| author | Horus3 | 2015-02-25 16:41:52 +0100 |
|---|---|---|
| committer | Horus3 | 2015-02-25 16:41:52 +0100 |
| commit | 49ffcba2c3c4a19d147dd792d7f6c99b7545a491 (patch) | |
| tree | 4fbd8a283ef7ab13f92e11e5030ad5c362be4524 /app | |
| parent | 9e1d8d0fb2b57903b1c6c0c2765b7808655c74a0 (diff) | |
| download | statuspage-49ffcba2c3c4a19d147dd792d7f6c99b7545a491.tar.gz | |
UX on front end.
Diffstat (limited to 'app')
| -rw-r--r-- | app/Makefile | 2 | ||||
| -rw-r--r-- | app/cache.go | 2 | ||||
| -rwxr-xr-x | app/env.sh | 16 | ||||
| -rw-r--r-- | app/fetch.go | 2 | ||||
| -rw-r--r-- | app/handler.go | 94 | ||||
| -rw-r--r-- | app/jobs.go | 2 | ||||
| -rw-r--r-- | app/main.go | 10 | ||||
| -rw-r--r-- | app/struct.go | 12 | ||||
| -rw-r--r-- | app/test.go | 4 | ||||
| -rw-r--r-- | app/user.go | 19 |
10 files changed, 145 insertions, 18 deletions
diff --git a/app/Makefile b/app/Makefile index 71b936c..c53bfbb 100644 --- a/app/Makefile +++ b/app/Makefile @@ -1,5 +1,5 @@ # Modify env.sh and uncomment to change config. -#include env.sh +include env.sh # Start the race detector with "TEST_RACE=1 make test" on the command line. ifdef TEST_RACE diff --git a/app/cache.go b/app/cache.go index 4e8ece2..014a795 100644 --- a/app/cache.go +++ b/app/cache.go @@ -35,5 +35,5 @@ func DelCache(key string) error { func FillCache() error { h := []Host{} Db.Find(&h) - return CacheHosts("database", h) + return CacheHosts(cache_prefix+"database", h) } @@ -2,15 +2,15 @@ # Call this script with make or source it. # Database -export STATUS_DB_DRIVER=sqlite3 -export STATUS_DB_CREDENTIALS=../db/status.db -export STATUS_DB_IMPORT_DRIVER=github.com/mattn/go-sqlite3 -export STATUS_DB_LOG=true +#export STATUS_DB_DRIVER=sqlite3 +#export STATUS_DB_CREDENTIALS=../db/status.db +#export STATUS_DB_IMPORT_DRIVER=github.com/mattn/go-sqlite3 +#export STATUS_DB_LOG=true # Redis -export STATUS_REDIS_SERVER=127.0.0.1 -export STATUS_REDIS_PORT=6379 +#export STATUS_REDIS_SERVER=127.0.0.1 +#export STATUS_REDIS_PORT=6379 # Http -export STATUS_HTTP_IP=127.0.0.1 -export STATUS_HTTP_PORT=8080 +#export STATUS_HTTP_IP=127.0.0.1 +#export STATUS_HTTP_PORT=8080 diff --git a/app/fetch.go b/app/fetch.go index 3ddd97b..3969314 100644 --- a/app/fetch.go +++ b/app/fetch.go @@ -26,11 +26,13 @@ func CheckPage(h []Host) []Host { h[k].Success = false h[k].Monitored = false h[k].Reason = fmt.Sprintf("%v", err) + h[k].Class = "danger" } else { h[k].Status = resp.Status h[k].StatusCode = int64(resp.StatusCode) h[k].Success = true h[k].Reason = "" + h[k].Class = "success" } } diff --git a/app/handler.go b/app/handler.go index 3f30c9f..cdf8421 100644 --- a/app/handler.go +++ b/app/handler.go @@ -106,12 +106,13 @@ func AddNewJobHandler(w http.ResponseWriter, r *http.Request) { 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, "/new", 302) + 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) Db.Debug().Save(&host) @@ -123,12 +124,13 @@ func AddNewJobHandler(w http.ResponseWriter, r *http.Request) { 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, "/new", 302) + http.Redirect(w, r, "/admin", 302) } @@ -139,3 +141,91 @@ 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") + 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(u) + 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) + http.Redirect(w, r, "/admin", 301) +} + +func PrintLoginHandler(w http.ResponseWriter, r *http.Request) { + 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 := FlashMessages{} + 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) { + session, _ := store.Get(r, "_SID") + session.Values["login"] = false + session.Save(r, w) + http.Redirect(w, r, "/", 301) +} + +func AdminHandler(w http.ResponseWriter, r *http.Request) { + session, err := store.Get(r, "_SID") + if err != nil { + log.Println(err) + } + if session.Values["login"] != true { + // http.Redirect(w, r, "/login", 401) + PrintLoginHandler(w, r) + return + } + hosts := []Host{} + Db.Find(&hosts) + + a := Admin{} + a.Success = session.Flashes("success") + a.Error = session.Flashes("error") + a.Hosts = hosts + session.Save(r, w) + + index := mainTempl.Lookup("admin.html") + + err = index.ExecuteTemplate(w, "admin.html", a) + if err != nil { + log.Println(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } +} diff --git a/app/jobs.go b/app/jobs.go index 5298dc3..6f0d456 100644 --- a/app/jobs.go +++ b/app/jobs.go @@ -1,7 +1,7 @@ package main func jobRun() { - c.AddFunc("@every 10m", healthCheck) + c.AddFunc("@every 30s", healthCheck) c.Start() } diff --git a/app/main.go b/app/main.go index b2c210c..4c3f9f7 100644 --- a/app/main.go +++ b/app/main.go @@ -15,10 +15,14 @@ var decoder = schema.NewDecoder() var store = sessions.NewCookieStore([]byte(RandomKey())) -var mainTempl = template.Must(template.New("global").ParseGlob("../views/*.html")) +var mainTempl = template.Must(template.New("global").Funcs(template.FuncMap{"add": add}).ParseGlob("../views/*.html")) var c = cron.New() +func add(x, y int) int { + return x + y +} + func main() { decoder.IgnoreUnknownKeys(true) store.Options = &sessions.Options{ @@ -40,6 +44,9 @@ func main() { r := mux.NewRouter() r.HandleFunc("/", IndexHandler) + r.HandleFunc("/login", LoginHandler).Methods("POST") + r.HandleFunc("/login", PrintLoginHandler).Methods("GET") + r.HandleFunc("/logout", LogoutHandler) r.HandleFunc("/session", SessionHandler) r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("./../static")))) r.HandleFunc("/register", RegisterHandler).Methods("POST") @@ -47,6 +54,7 @@ func main() { r.HandleFunc("/new", AddNewJobHandler).Methods("POST") r.HandleFunc("/new", PrintNewJobHandler).Methods("GET") r.HandleFunc("/jobs", ShowJobHandler) + r.HandleFunc("/admin", AdminHandler) http.Handle("/", r) diff --git a/app/struct.go b/app/struct.go index 73e1dc7..172a54d 100644 --- a/app/struct.go +++ b/app/struct.go @@ -7,8 +7,9 @@ import ( /* Maybe worth saving uptime history? */ type Host struct { - Id int64 - Url string + Id int64 + Host string + Url string // Protocoll string // e.g. http Monitored bool // disable monitoring on error Private bool @@ -25,6 +26,7 @@ type Host struct { CreatedAt time.Time DeletedAt time.Time UpdatedAt time.Time + Class string } type User struct { @@ -41,3 +43,9 @@ type FlashMessages struct { Success []interface{} Error []interface{} } + +type Admin struct { + Success []interface{} + Error []interface{} + Hosts []Host +} diff --git a/app/test.go b/app/test.go index 331dad5..419cd7f 100644 --- a/app/test.go +++ b/app/test.go @@ -6,9 +6,9 @@ import ( ) func insertHost() { - h := Host{Url: "http://www.iamfabulous.de/", Monitored: true, Private: false} + h := Host{Host: "www.iamfabulous.de", Url: "http://www.iamfabulous.de/", Monitored: true, Private: false, Class: "info"} Db.Create(&h) - h = Host{Url: "https://iamfabulousadsfadfdsf.de/", Monitored: true, Private: false} + h = Host{Host: "iamfabulousadsfadfdsf.de", Url: "https://iamfabulousadsfadfdsf.de/", Monitored: true, Private: false, Class: "info"} Db.Create(&h) // c := pool.Get() diff --git a/app/user.go b/app/user.go new file mode 100644 index 0000000..62616da --- /dev/null +++ b/app/user.go @@ -0,0 +1,19 @@ +package main + +import ( + "github.com/gorilla/sessions" +) + +func login(name, password string, session *sessions.Session) bool { + if name == "" { + session.AddFlash("Empty name.", "error") + return false + } + if password == "" { + session.AddFlash("Empty password.", "error") + return false + } + u := User{} + Db.Find(&u).Where("name = ?", name) + return VerifyPassword(password, u.Password) +} |
