Forráskód Böngészése

registerhandler ausgelagert, kleinere anpassungen

Moritz Schmidt 9 éve
szülő
commit
a1ebc7951d
1 módosított fájl, 73 hozzáadás és 4 törlés
  1. 73 4
      usermanager.go

+ 73 - 4
usermanager.go

@@ -200,23 +200,37 @@ func AuthHandler(ctx *iris.Context) {
   tokenString := ctx.GetCookie("token")
   isAuthed, userID, err := VerifyUserLoggedIn(tokenString)
 
-  ctx.Set("userID", userID) // save userID for in-context use
-
   if err != nil {
     // fmt.Println("Auth error: ", err.Error())
   }
 
-
   if isAuthed {
+    ctx.Set("userID", userID) // save userID for in-context use
     ctx.Next() // successfully authed, next handler
   } else {
     if err := ctx.Render("login_box.html", PageUserParams{"1", err.Error(), "login", "", "0", []string{}}); err != nil {
-      println(err.Error())
+      //println(err.Error()) // TODO log this somewhere
     } // failed to auth
 
   }
 }
 
+func CanBeAuthedHandler(ctx *iris.Context) {
+  tokenString := ctx.GetCookie("token")
+  isAuthed, userID, err := VerifyUserLoggedIn(tokenString)
+
+  if isAuthed {
+    ctx.Set("userID", userID) // save userID for in-context use
+  } else if err != nil {
+    if !((err.Error() != "ERR_SESSION_TIMED_OUT") || (err.Error() != "ERR_INVALID_TOKEN")) { // ignore ERR_SESSION_TIMED_OUT and ERR_INVALID_TOKEN
+      templatehelpers.ShowError(err.Error(), ctx, "register")
+      return
+    }
+  }
+
+  ctx.Next() // authed users can now use their accounts, next handler
+}
+
 func AdminHandler(ctx *iris.Context) {
   userID := ctx.GetString("userID")
   user, err := GetUser(userID)
@@ -413,4 +427,59 @@ func IsTokenUsed(tokens []string, token string) bool {
     }
   }
   return usedToken
+}
+
+func RegisterHandler(ctx *iris.Context) {
+  token := ctx.FormValueString("token") // POST values from login form
+  username := ctx.FormValueString("username")
+  password := ctx.FormValueString("password")
+
+  unusedTokens := GetTokens(false) // get all unused tokens
+  usedTokens := GetTokens(true) // get all used tokens
+  unusedToken := IsTokenUsed(unusedTokens, token) // check if token is unused
+  usedToken := IsTokenUsed(usedTokens, token) // check if token is used
+
+  if !unusedToken && !usedToken { // token doesnt exist
+    templatehelpers.ShowError(ERR_INVALID_TOKEN, ctx, "register")
+    return
+  }
+
+  tokenUserID, err := SearchUserByTokenInDB(token)
+  if err != nil { // id of user, we're going to change if exists
+    if err.Error() != "ERR_EMPTY_RESULT" { // if no user found for that token let them register
+      templatehelpers.ShowError(err.Error(), ctx, "register")
+      return
+    }
+  }
+
+  tokenUserIDStr := strconv.FormatInt(int64(tokenUserID), 10)
+  user := User{} // new user
+
+  if tokenUserIDStr == "-1" { // register a new account
+    passwordBin, _ := bcrypt.GenerateFromPassword([]byte(password), 15) // hash password
+
+    err := RegisterUserWithToken(username, string(passwordBin), token) // register user
+    if err != nil {
+      templatehelpers.ShowError(err.Error(), ctx, "register")
+      return
+    }
+
+    tokenString, err := user.Login(username, password) // try to login
+
+    if err != nil {
+      templatehelpers.ShowError(err.Error(), ctx, "login")
+    } else {
+      ctx.SetCookieKV("token", tokenString) // set tokenString as cookie
+      templatehelpers.ShowNotification("registration successfull", ctx, "home")
+    }
+
+  } else { // used token -> update
+    if err := UserUpdateProcessor(username, password, tokenUserIDStr); err != nil { // simply try to update
+      templatehelpers.ShowError(err.Error(), ctx, "register")
+      return
+    } else {
+      user.Logout(tokenUserIDStr) // log user out from system
+      templatehelpers.ShowNotification("reset successfull", ctx, "login")
+    }
+  }
 }