summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorHorus32015-02-25 16:41:52 +0100
committerHorus32015-02-25 16:41:52 +0100
commit49ffcba2c3c4a19d147dd792d7f6c99b7545a491 (patch)
tree4fbd8a283ef7ab13f92e11e5030ad5c362be4524 /app
parent9e1d8d0fb2b57903b1c6c0c2765b7808655c74a0 (diff)
downloadstatuspage-49ffcba2c3c4a19d147dd792d7f6c99b7545a491.tar.gz
UX on front end.
Diffstat (limited to 'app')
-rw-r--r--app/Makefile2
-rw-r--r--app/cache.go2
-rwxr-xr-xapp/env.sh16
-rw-r--r--app/fetch.go2
-rw-r--r--app/handler.go94
-rw-r--r--app/jobs.go2
-rw-r--r--app/main.go10
-rw-r--r--app/struct.go12
-rw-r--r--app/test.go4
-rw-r--r--app/user.go19
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)
}
diff --git a/app/env.sh b/app/env.sh
index 05cd7ec..e64a094 100755
--- a/app/env.sh
+++ b/app/env.sh
@@ -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)
+}