|
|
@@ -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
|
|
|
}
|