Moritz Schmidt 9 anos atrás
pai
commit
00c96e56cd
1 arquivos alterados com 62 adições e 5 exclusões
  1. 62 5
      usermanager.go

+ 62 - 5
usermanager.go

@@ -4,6 +4,7 @@ import (
   "errors"
   "time"
   "math/rand"
+  "strconv"
   "git.mmnx.de/Moe/databaseutils"
   "git.mmnx.de/Moe/configutils"
   "github.com/dgrijalva/jwt-go"
@@ -21,14 +22,15 @@ const ( // Error constants
   ERR_PASSWORD_MISMATCH = "ERR_PASSWORD_MISMATCH"
   ERR_SESSION_TIMED_OUT = "ERR_SESSION_TIMED_OUT"
   ERR_INVALID_TOKEN = "ERR_INVALID_TOKEN"
+  ERR_USERNAME_TAKEN = "ERR_USERNAME_TAKEN"
 )
 
 type User struct { // User
   ID string
   Username string
   Password string
-  Mail string
   Admin string
+  TokenUsed string
 }
 
 type PageParams struct{
@@ -43,8 +45,8 @@ type PageUserParams struct{
   Error string
   ReqDir string
   Username string
-  Email string
   Admin string
+  Custom []string
   }
 
 type PageUserParamsMessage struct{
@@ -87,8 +89,8 @@ func (user *User) Login(username string, password string) (string, error) {
     user.ID = row[0]
     user.Username = row[1]
     user.Password = string(row[2])
-    user.Mail = row[3]
-    user.Admin = string(row[4])
+    user.Admin = string(row[3])
+    user.TokenUsed = string(row[4])
 
     if err != nil {
       fmt.Printf("Error: ", err.Error())
@@ -179,7 +181,7 @@ func AuthHandler(ctx *iris.Context) {
   } else {
     if err := ctx.Render("login_box.html", PageParams{"1", err.Error(), "login", "0"}); err != nil {
       println(err.Error())
-      } // failed to auth
+    } // failed to auth
 
   }
 }
@@ -220,6 +222,25 @@ func GenerateTokens(numTokens int) []string {
     return tokens
 }
 
+func GetTokens(used bool) []string {
+  dbTokens, err := databaseutils.DBUtil.GetRows("*", "tokens", "used", "0") // get unused tokens
+  if used {
+    dbTokens, err = databaseutils.DBUtil.GetRows("*", "tokens", "used", "1") // get used tokens
+  }
+
+  if err != nil {
+    fmt.Println(err.Error()) // TODO: nicer / outsource
+  }
+
+  tokens := make([]string, 0)
+
+  for i, _ := range dbTokens {
+    tokens = append(tokens, dbTokens[i][1])
+  }
+
+  return tokens
+}
+
 func GetUser(userID string) (User, error) {
   usersArrayID := SearchUser(userID)
 
@@ -229,4 +250,40 @@ func GetUser(userID string) (User, error) {
 
   user := (*Users)[usersArrayID] // user must be logged in to do this -> get from users list
   return user, nil
+}
+
+func SearchUserByUsernameInDB(username string) int {
+  user, err := databaseutils.DBUtil.GetRow("*", "users", "username", username)
+  if err != nil {
+    if err.Error() != "ERR_EMPTY_RESULT" {
+      fmt.Println(err.Error())
+    }
+    return -1
+  }
+
+  userID, err := strconv.Atoi(user[0])
+  if err != nil {
+    fmt.Println(err.Error())
+  }
+
+  return userID
+}
+
+func RegisterUserWithToken(username string, password string, token string) error {
+  tokenID := databaseutils.DBUtil.GetString("id", "tokens", "value", token)
+
+  user := [][]string{[]string{"username", username}, []string{"password", password}, []string{"admin", "0"}, []string{"token-id", tokenID}}
+  err := databaseutils.DBUtil.InsertRow("users", user)
+  if err != nil {
+    fmt.Println(err.Error())
+    return err
+  }
+
+  err = databaseutils.DBUtil.UpdateRow("tokens", "value", token, [][]string{[]string{"used", "1"}})
+  if err != nil {
+    fmt.Println(err.Error())
+    return err
+  }
+
+  return nil
 }