Moritz Schmidt il y a 9 ans
Parent
commit
56746ee939

+ 26 - 38
main.go

@@ -13,14 +13,14 @@ import (
   "strconv"
 )
 
-type pageUserParams struct{
+type pageUserParams struct { // TODO outsource
   HasError string
   Error string
   ReqDir string
   Username string
   Email string
   Admin string
-  } // {Error: ""}
+  }
 
 func main() {
 
@@ -39,6 +39,7 @@ func main() {
   //iris.Config.Render.Template.Gzip = true
 
   /** HELPER FUNCTION EXAMPLE **/
+
     /*config := html.DefaultConfig()
     config.Layout = "layouts/main.html"
     config.Helpers["boldme"] = func(input string) raymond.SafeString {
@@ -47,19 +48,19 @@ func main() {
 
   /** ROUTING **/
 
-  iris.UseTemplate(html.New(html.Config{
+  iris.UseTemplate(html.New(html.Config{ // main layout for all pages (like a wrapper for boxes we register downwards)
     Layout: "layouts/main.html",
   }))
 
-  iris.Static("/js", "./static/js", 1)
+  iris.Static("/js", "./static/js", 1) // make js files in static/js available via /js
   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 // TODO: outsource ?
-  iris.Post("/register", registerHandler, usermanager.LogoutHandler) // TODO outsource ?
-  iris.Post("/account", usermanager.AuthHandler, accountUpdateHandler, usermanager.LogoutHandler)
-  iris.Post("/admin", usermanager.AuthHandler, usermanager.AdminHandler, adminPostHandler)
+  iris.Post("/login", loginHandler) // login form handler
+  iris.Post("/register", registerHandler, usermanager.LogoutHandler) // handles registration, logs user out
+  iris.Post("/account", usermanager.AuthHandler, accountUpdateHandler, usermanager.LogoutHandler) // account management
+  iris.Post("/admin", usermanager.AuthHandler, usermanager.AdminHandler, adminPostHandler) // admin panel
 
   iris.Get("/login", templateHandler) // TODO not when logged in
   iris.Get("/logout", usermanager.AuthHandler, usermanager.LogoutHandler)
@@ -82,15 +83,14 @@ func loginHandler(ctx *iris.Context) {
   tokenString, err := user.Login(username, password) // try to login
 
   if err != nil {
-    ctx.Render("login_box.html", usermanager.PageParams{"1", err.Error(), "login", "0"})
+    templatehelpers.ShowError(err.Error(), ctx, "login")
   } else {
     ctx.SetCookieKV("token", tokenString)
-    ctx.Redirect("/")
-    // TODO: error-alternative success (main.html)
+    templatehelpers.ShowNotification("Login successfull", ctx, "home")
   }
 }
 
-func registerHandler(ctx *iris.Context) {
+func registerHandler(ctx *iris.Context) { // TODO outsource
   token := ctx.FormValueString("token") // POST values from login form
   username := ctx.FormValueString("username")
   password := ctx.FormValueString("password")
@@ -112,23 +112,10 @@ func registerHandler(ctx *iris.Context) {
     return
   }
 
-  tokens := usermanager.GetTokens(false) // get all unused tokens, // TODO when v outsourced, use GetToken()
-  unusedToken := false // TODO: outsource this (GetToken())
-  for i, _ := range tokens {
-    if token == tokens[i] {
-      unusedToken = true
-      break
-    }
-  }
-
-  tokens = usermanager.GetTokens(true) // get all used tokens, // TODO when v outsourced, use GetToken()
-  usedToken := false // TODO: outsource this (GetToken())
-  for i, _ := range tokens {
-    if token == tokens[i] {
-      usedToken = true
-      break
-    }
-  }
+  unusedTokens := usermanager.GetTokens(false) // get all unused tokens
+  usedTokens := usermanager.GetTokens(true) // get all used tokens
+  unusedToken := usermanager.IsTokenUsed(unusedTokens, token)
+  usedToken := usermanager.IsTokenUsed(usedTokens, token)
 
   if !unusedToken && !usedToken { // token doesnt exist
     templatehelpers.ShowError(usermanager.ERR_INVALID_TOKEN, ctx, "register")
@@ -162,17 +149,21 @@ func registerHandler(ctx *iris.Context) {
       templatehelpers.ShowError(err.Error(), ctx, "login")
     } else {
       ctx.SetCookieKV("token", tokenString)
-      ctx.Redirect("/")
-      // TODO: error-alternative success (main.html)
+      templatehelpers.ShowNotification("registration successfull", ctx, "home")
     }
 
   } else {
 
-    // TODO maybe check whether to login or logout
-
     if err := usermanager.UserUpdateProcessor(username, password, tokenUserIDStr); err != nil {
       templatehelpers.ShowError(err.Error(), ctx, "register")
       return
+    } else {
+      tokenString, err := user.Login(username, password) // try to login with new data
+      if err != nil {
+        templatehelpers.ShowError(err.Error(), ctx, "login")
+      }
+      ctx.SetCookieKV("token", tokenString)
+      templatehelpers.ShowNotification("reset successfull", ctx, "home")
     }
   }
 }
@@ -187,15 +178,12 @@ func accountUpdateHandler(ctx *iris.Context) {
     return
   }
 
+  templatehelpers.ShowNotification("updated successfull", ctx, "account")
 }
 
 func adminPostHandler(ctx *iris.Context) {
   _ = usermanager.GenerateTokens(5) // generate tokens and store in db, we don't need them now
-
-  ctx.Redirect("/admin") // just redirect so that we see old+new tokens
-
-  // TODO success notifications
-
+  templatehelpers.ShowNotification("tokens generated", ctx, "admin")
 }
 
 func templateHandler(ctx *iris.Context) {

+ 4 - 0
static/css/narrow-jumbotron.css

@@ -165,6 +165,10 @@ textarea#tokens {
   position: relative;
 }
 
+.alert-danger, .alert-success {
+  padding: 15px;
+}
+
 /* Responsive: Portrait tablets and up */
 @media screen and (min-width: 48em) {
   /* Remove the padding we set earlier */

+ 3 - 1
templates/layouts/main.html

@@ -66,7 +66,9 @@
         </nav>
         <h3 class="text-muted">mmnx<sub>vpn</sub></h3>
       </div>
-      {{ if eq .HasError "1" }}
+      {{ if eq .NotificationType "1" }}
+      {{ render "partials/error_box.html" }}
+      {{ else if eq .NotificationType "2"}}
       {{ render "partials/notification_box.html" }}
       {{ end }}
       {{ yield }}

+ 1 - 0
templates/partials/error_box.html

@@ -0,0 +1 @@
+<p class="alert-danger">{{.Notification}}</p>

+ 1 - 1
templates/partials/notification_box.html

@@ -1 +1 @@
-<p class="bg-danger">{{.Error}}</p>
+<p class="alert-success">{{.Notification}}</p>