func generateRandomhashtag works now
parent
d9667c6252
commit
b7c044fe1d
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue