func generateRandomhashtag works now

master
Alex 2021-05-30 20:11:07 +02:00
parent d9667c6252
commit b7c044fe1d
1 changed files with 46 additions and 76 deletions

View File

@ -4,7 +4,6 @@ import (
"crypto/rand"
"database/sql"
"encoding/base64"
"errors"
"math/big"
"regexp"
"strings"
@ -92,24 +91,20 @@ func NewUser(c *fiber.Ctx) error {
return c.SendStatus(fiber.StatusForbidden)
}
user := structs.User{}
user := structs.User{Email: input.Email}
db := database.DB
user.Email = input.Email
//db = database.DB
if !isEmailAvailable(database.DB, user, input.Email) {
if !isEmailAvailable(db, user.Email) {
return c.SendStatus(fiber.StatusUnprocessableEntity)
}
if input.Hashtag == "" {
input.Hashtag, err = generateRandomString(6)
//input.Hashtag, err = generateRandomHashtag(database.DB, 6)
input.Hashtag, err = generateRandomHashtag(db, 6)
if err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
} else if !isHashtagValid(database.DB, input.Hashtag) {
} else if !isHashtagValid(db, 1, input.Hashtag) {
return c.SendStatus(fiber.StatusUnprocessableEntity)
}
@ -120,33 +115,23 @@ func NewUser(c *fiber.Ctx) error {
return c.SendStatus(fiber.StatusInternalServerError)
}
userId := strings.Replace(uuid.New().String(), "-", "", -1)
//created := time.Now().Format("2006-01-02 15:04:05") // YYYY-MM-DD hh:mm:ss
now := time.Now()
//user := structs.User{ID: userId, Hashtag: input.Hashtag, Name: input.Username, Email: input.Email, Password: string(hashedPassword), LastLogin: time.Now(), CreatedAt: time.Now()}
user.ID = userId
user.ID = strings.Replace(uuid.New().String(), "-", "", -1)
user.Hashtag = input.Hashtag
user.Name = input.Username
user.Password = string(hashedPassword)
user.LastLogin = time.Now()
user.CreatedAt = time.Now()
user.LastLogin = now
user.CreatedAt = now
res := database.DB.Create(&user)
res := db.Create(&user)
log.Infoln("inserted", res, user)
//stmt, err := db.Prepare("INSERT INTO users (user_id, user_hashtag, username, email, password, created) VALUES (?, ?, ?, ?, ?, ?);")
//stmt.Exec(userId, input.Hashtag, input.Username, input.Email, hashedPassword, created)
//stmt.Close()
if err != nil {
log.Warnln("Failed to insert user to db:", err.Error())
if res.Error != nil {
log.Warnln("Failed to insert user to db:", res.Error)
return c.SendStatus(fiber.StatusInternalServerError)
}
sessionId, err := createUserSession(database.DB, userId, c.IP(), string(c.Context().UserAgent()))
sessionId, err := createUserSession(db, user.ID, c.IP(), string(c.Context().UserAgent()))
if err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
@ -158,13 +143,20 @@ func NewUser(c *fiber.Ctx) error {
c.Cookie(&fiber.Cookie{Name: "username", Value: input.Username, Secure: true, Expires: expires})
c.Cookie(&fiber.Cookie{Name: "user_hashtag", Value: input.Hashtag, Secure: true, Expires: expires})
log.Debugln("user created", userId, input.Hashtag, input.Username, input.Email)
log.Debugln("user created", user)
return c.SendStatus(fiber.StatusCreated)
}
func generateRandomString(n int) (string, error) {
const letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
func generateRandomString(n int, t int) (string, error) {
var letters string
if t == 1 {
letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
} else {
letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
}
r := make([]byte, n)
for i := 0; i < n; i++ {
@ -178,30 +170,21 @@ func generateRandomString(n int) (string, error) {
return string(r), nil
}
/*
func generateRandomHashtag(db *gorm.DB, n int) (string, error) {
c := make(chan bool)
var s string
var err error
for {
s, err = generateRandomString(6)
s, err = generateRandomString(6, 0)
if err != nil {
log.Warnln("Error generating Hashtag:", err)
log.Warnln("error generating hashtag:", err)
return "", err
}
go func() {
/*err := db.QueryRow("SELECT user_hashtag FROM users WHERE user_hashtag = ?", s).Scan(&s)
if err == sql.ErrNoRows {
c <- true
} else {
c <- false
}
c <- true
c <- isHashtagValid(db, 0, s)
}()
if msg := <-c; msg {
@ -210,21 +193,22 @@ func generateRandomHashtag(db *gorm.DB, n int) (string, error) {
}
return s, nil
} */
}
func isHashtagValid(db *gorm.DB, h string) bool {
if !isUpper(h) || len(h) < 2 || len(h) > 6 {
func isHashtagValid(db *gorm.DB, t int, h string) bool {
if t == 1 && !isUpper(h) || len(h) < 2 || len(h) > 6 {
return false
}
/*
err := db.QueryRow("SELECT user_hashtag FROM users WHERE user_hashtag = ?", h).Scan(&h)
if err == sql.ErrNoRows {
return true
}
return false */
var res string
return true
db.Raw("SELECT hashtag FROM users WHERE hashtag = ?", h).Scan(&res)
if res == "" {
return true
} else {
return false
}
}
func isUpper(s string) bool {
@ -252,24 +236,16 @@ func isEmailValid(e string) bool {
return emailRegex.MatchString(e)
}
func isEmailAvailable(db *gorm.DB, user structs.User, email string) bool {
log.Infoln("isEmailAvailable email", user.Email)
func isEmailAvailable(db *gorm.DB, email string) bool {
var res string
err := db.First(&user, "email = ?", user.Email).Error
db.Raw("SELECT email FROM users WHERE email = ?", email).Scan(&res)
log.Warnln("isEmailErr", errors.Is(err, gorm.ErrRecordNotFound))
if errors.Is(err, gorm.ErrRecordNotFound) {
if res == "" {
return true
} else {
return false
}
return false
/*err := db.QueryRow("SELECT email FROM users WHERE email = ?", e).Scan(&e)
if err == sql.ErrNoRows {
return true
} */
//return false
}
func SessionIdCheck(c *fiber.Ctx) error {
@ -334,21 +310,15 @@ func deleteSession(db *sql.DB, sessionId string) {
}
func deleteExpiredSessions(db *gorm.DB) {
err := db.Exec("DELETE FROM sessions WHERE expires < CURRENT_TIMESTAMP()")
if err.Error != nil {
log.Warnln("err deleting expired sessions:", err.Error)
}
/*_, err := db.Exec("DELETE FROM `sessions` WHERE expires < CURRENT_TIMESTAMP()")
err := db.Exec("DELETE FROM sessions WHERE expires < ?", time.Now()).Error
if err != nil {
log.Warnln("err deleting expired sessions:", err)
} */
}
}
func createUserSession(db *gorm.DB, userId string, ip string, userAgent string) (string, error) {
sessionId, err := generateRandomString(32)
sessionId, err := generateRandomString(32, 1)
if err != nil {
log.Warnln("Failed to generate user session:", err)