Moritz Schmidt vor 9 Jahren
Ursprung
Commit
cc5105f136
5 geänderte Dateien mit 56 neuen und 117 gelöschten Zeilen
  1. 51 115
      main.go
  2. 0 0
      static/img/favicon.ico
  3. 0 0
      templates/home_box.html
  4. 5 2
      templates/layouts/main.html
  5. 0 0
      templates/login_box.html

+ 51 - 115
main.go

@@ -45,127 +45,45 @@ func main() {
 
   /** ROUTING **/
 
+  iris.UseTemplate(html.New(html.Config{
+    Layout: "layouts/main.html",
+  }))
+
   iris.Static("/js", "./static/js", 1)
   iris.Static("/css", "./static/css", 1)
   iris.Static("/img", "./static/img", 1)
   iris.Static("/static", "./static/static", 1)
 
   iris.Post("/login", loginHandler) // login form handler
-  iris.Post("/account", usermanager.AuthHandler, accountUpdateHandler) // Account update handler TODO implement
-  iris.Post("/admin", usermanager.AuthHandler, adminPostHandler)
+  iris.Post("/account", usermanager.AuthHandler, accountUpdateHandler)
+  iris.Post("/admin", usermanager.AuthHandler, usermanager.AdminHandler, adminPostHandler)
 
-  // TODO register with token
-  // TODO reset pw with token
+  iris.Get("/login", templateHandler)
+	iris.Get("/", usermanager.AuthHandler, templateHandler)
+  iris.Get("/account", usermanager.AuthHandler, templateHandler)
+  iris.Get("/help", usermanager.AuthHandler, templateHandler)
 
-	iris.Get("/", usermanager.AuthHandler, func(ctx *iris.Context) {
-    params := usermanager.PageParams{"0", "", "", "0"}
-		if err := ctx.Render("home_boxes.html", params); err != nil {
-			println(err.Error())
-		}
-	})
-
-  iris.Get("/account", usermanager.AuthHandler, func(ctx *iris.Context) { // todo outsource all those
-    err := errors.New(""); err = nil
-    // TODO: OUTSOURCE THIS IN FUNCTION
+  iris.Get("/admin", usermanager.AuthHandler, usermanager.AdminHandler, func(ctx *iris.Context) { // TODO integrate in outsource (templateHandler)
     userID := ctx.GetString("userID")
+    user, err := usermanager.GetUser(userID)
 
-    usersArrayID := usermanager.SearchUser(userID)
-
-    if usersArrayID == -1 { // TODO check if unneccessary (AuthHandler)
-      err = errors.New("User not logged in WTF")
-      ctx.Render("account_box.html", pageUserParams{"1", err.Error(), "account", "", "", "0"})
-      return
-    }
-
-    user := (*usermanager.Users)[usersArrayID] // user must be logged in to do this -> get from users list
-
-    params := usermanager.PageUserParams{"0", "", "account", user.Username, "", user.Admin}
-		if err := ctx.Render("account_box.html", params); err != nil {
-			println(err.Error())
-		}
-	})
-
-  iris.Get("/help", usermanager.AuthHandler, func(ctx *iris.Context) { // todo outsource all those
-    err := errors.New(""); err = nil
-    // TODO: OUTSOURCE THIS IN FUNCTION
-    userID := ctx.GetString("userID")
-
-    usersArrayID := usermanager.SearchUser(userID)
-
-    if usersArrayID == -1 { // TODO check if unneccessary (AuthHandler)
-      err = errors.New("User not logged in WTF")
-      ctx.Render("account_box.html", pageUserParams{"1", err.Error(), "account", "", "", "0"})
-      return
-    }
-
-    user := (*usermanager.Users)[usersArrayID] // user must be logged in to do this -> get from users list
-
-    params := usermanager.PageUserParams{"0", "", "help", user.Username, "", user.Admin}
-		if err := ctx.Render("help_box.html", params); err != nil {
-			println(err.Error())
-		}
-	})
-
-  iris.Get("/admin", usermanager.AuthHandler, func(ctx *iris.Context) { // todo outsource all those
-    err := errors.New(""); err = nil
-    // TODO: OUTSOURCE THIS IN FUNCTION
-    userID := ctx.GetString("userID")
-
-    usersArrayID := usermanager.SearchUser(userID)
-
-    if usersArrayID == -1 { // TODO check if unneccessary (AuthHandler)
-      err = errors.New("User not logged in WTF")
-      //ctx.Render("account_box.html", pageUserParams{"1", err.Error(), "account", "", "", "0"})
-      fmt.Println("Errors: ", err.Error())
-      ctx.Redirect("/")
-      return
-    }
-
-    user := (*usermanager.Users)[usersArrayID] // user must be logged in to do this -> get from users list
-
-    if user.Admin != "1" { // check if user is admin // TODO check if useless / add adminAreaHandler
-      err = errors.New("User no Admin")
-      ctx.Redirect("/")
-      return
+    tokens, err := databaseutils.DBUtil.GetRows("*", "tokens", "used", "0") // get unused tokens
+    if err != nil {
+      fmt.Println(err.Error()) // TODO: nicer
     }
 
-    tokens, err := databaseutils.DBUtil.GetRows("*", "tokens", "used", "0") // get unused tokens
     message := "" // string for textarea output in /admin
 
     for i, _ := range tokens {
       message += tokens[i][1] + "\n"
     }
 
-    if err != nil {
-      fmt.Println(err.Error()) // TODO: nice
-    }
-
     params := usermanager.PageUserParamsMessage{"0", "", "admin", user.Username, "", user.Admin, message}
 		if err := ctx.Render("admin_box.html", params); err != nil {
 			println(err.Error())
 		}
 	})
 
-  iris.Get("/login", func(ctx *iris.Context) {
-    params := usermanager.PageParams{"0", "", "login", "0"}
-    if err := ctx.Render("login.html", params); err != nil { // no error for normal login screen, struct{ Error string }{Error: ""}
-      println(err.Error())
-    }
-  })
-
-  iris.Get("/test", usermanager.AuthHandler, testHandler)
-
-	// remove the layout for a specific route
-	iris.Get("/nolayout", func(ctx *iris.Context) {
-		if err := ctx.Render("page1.html", nil, iris.RenderOptions{"layout": iris.NoLayout}); err != nil {
-			println(err.Error())
-		}
-	})
-
-  iris.UseTemplate(html.New(html.Config{
-    Layout: "layouts/main.html",
-  }))
-
   /** OTHER **/
 
   iris.Listen(":8080")
@@ -179,27 +97,20 @@ func loginHandler(ctx *iris.Context) {
   tokenString, err := user.Login(username, password) // try to login
 
   if err != nil {
-    ctx.Render("login.html", usermanager.PageParams{"1", err.Error(), "login", "0"})
+    ctx.Render("login_box.html", usermanager.PageParams{"1", err.Error(), "login", "0"})
   } else {
     ctx.SetCookieKV("token", tokenString)
     ctx.Redirect("/")
-    //ctx.Render("home.html", nil) // TODO: error-alternative success (main.html)
+    // TODO: error-alternative success (main.html)
   }
 }
 
-func accountUpdateHandler(ctx *iris.Context) {
+func accountUpdateHandler(ctx *iris.Context) { // TODO tidy up?
   err := errors.New(""); err = nil
   username := ctx.FormValueString("username") // POST values
   password := ctx.FormValueString("password")
   userID := ctx.GetString("userID")
   usersArrayID := usermanager.SearchUser(userID)
-
-  if usersArrayID == -1 { // TODO check if this can never happen (routing ...)
-    err = errors.New("User not logged in WTF")
-    ctx.Render("account_box.html", usermanager.PageUserParams{"1", err.Error(), "account", "", "", "0"})
-    return
-  }
-
   user := (*usermanager.Users)[usersArrayID] // user must be logged in to do this -> get from users list
 
   if username != "" && usermanager.SearchUserByUsername(username) != -1 && username != user.Username { // username can't be changed as there already exists a user with that name or it's the old name
@@ -248,7 +159,7 @@ func accountUpdateHandler(ctx *iris.Context) {
 
   // TODO success notifications
 
-  if err != nil { // TODO: template compatible error handling
+  if err != nil {
     ctx.Render("account_box.html", usermanager.PageUserParams{"1", err.Error(), "account", user.Username, user.Mail, user.Admin}) // TODO dynamic
   } else {
     ctx.Render("account_box.html", usermanager.PageUserParams{"0", "", "account", user.Username, user.Mail, user.Admin}) // TODO dynamic
@@ -260,22 +171,47 @@ func adminPostHandler(ctx *iris.Context) {
   userID := ctx.GetString("userID")
   usersArrayID := usermanager.SearchUser(userID)
 
-  if usersArrayID == -1 { // TODO check if this can never happen (routing ...)
-    err = errors.New("User not logged in WTF")
+  err = usermanager.GenerateTokens(5) // tokens
+
+  if err != nil {
+    ctx.Render("admin_box.html", usermanager.PageUserParams{"1", err.Error(), "admin", user.Username, user.Mail, user.Admin}) // TODO dynamic
     fmt.Println(err.Error())
-    ctx.Redirect("/")
     return
   }
 
-  _ = usermanager.GenerateTokens(5) // tokens
-
   ctx.Redirect("/admin") // just redirect so that we see old+new tokens
 
   // TODO success notifications
 
 }
 
-func testHandler(ctx *iris.Context) {
+func templateHandler(ctx *iris.Context) {
+  template := ""
+  switch ctx.RequestPath(false) {
+  case "/":
+    template = "home"
+  case "/account":
+    template = "account"
+  case "/help":
+    template = "help"
+  case "/admin":
+    template = "admin"
+  case "/login":
+    template = "login"
+  }
+
+  // fmt.Println(ctx.RequestPath(false))
+
+  // fmt.Println(template)
+
   userID := ctx.GetString("userID")
-  ctx.Write("Test %d", userID);
+  user, err := usermanager.GetUser(userID)
+  if err != nil { // user is apparently not logged in -> login
+    ctx.MustRender("login_box.html", pageUserParams{"1", err.Error(), template, "", "", "0"})
+    return
+  }
+
+  params := usermanager.PageUserParams{"0", "", template, user.Username, "", user.Admin}
+  ctx.MustRender(template + "_box.html", params);
+
 }

+ 0 - 0
static/img/favicon.ico


+ 0 - 0
templates/home_boxes.html → templates/home_box.html


+ 5 - 2
templates/layouts/main.html

@@ -24,7 +24,7 @@
         <nav>
           <ul class="nav nav-pills float-xs-right">
             <li class="nav-item">
-              {{ if eq .ReqDir ""}}
+              {{ if eq .ReqDir "home"}}
               <a class="nav-link active" href="/">home <span class="sr-only">(current)</span></a>
               {{ else }}
               <a class="nav-link" href="/">home</a>
@@ -57,7 +57,10 @@
         </nav>
         <h3 class="text-muted">mmnx<sub>vpn</sub></h3>
       </div>
-      {{ if eq .HasError "1" }}{{ render "partials/notification_box.html" }}{{ end }}{{ yield }}
+      {{ if eq .HasError "1" }}
+      {{ render "partials/notification_box.html" }}
+      {{ end }}
+      {{ yield }}
       <div class="container">
         <footer class="footer">
           <p>&copy; mmnx 2016</p>

+ 0 - 0
templates/login.html → templates/login_box.html