package user import ( "fmt" "math/rand" "strings" "time" "git.umbach.dev/app-idea/rest-api/routers/database" "git.umbach.dev/app-idea/rest-api/routers/debug" "github.com/gofiber/fiber/v2" "github.com/google/uuid" "golang.org/x/crypto/bcrypt" ) func NewUser(c *fiber.Ctx) error { type LoginInput struct { Username string `json:"username"` Email string `json:"email"` Password string `json:"password"` } var input LoginInput // check if given request is complete if err := c.BodyParser(&input); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"status": "error", "message": "Error on login request", "data": err}) } // check in database if username and email is available db, err := database.GetDatabase() if db == nil || err != nil { return c.SendString(err.Error()) } password := []byte(input.Password) hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost) if err != nil { panic(err) } //err = bcrypt.CompareHashAndPassword(hashedPassword, []byte("hello wolrd")) //fmt.Println(err) user_id := strings.Replace(uuid.New().String(), "-", "", -1) user_hashtag := RandomHashtag(6) created := time.Now().Format("2006-02-01 15:04:05") sqlStatement, err := db.Prepare("INSERT INTO users (user_id, user_hashtag, username, email, password, created) VALUES (?, ?, ?, ?, ?, ?);") sqlStatement.Exec(user_id, user_hashtag, input.Username, input.Email, hashedPassword, created) db.Close() debug.Msg("user created", user_id, user_hashtag, input.Username, input.Email) return c.JSON(fiber.Map{"status": 1, "user_hashtag": user_hashtag}) } func RandomHashtag(n int) string { var letters = []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZ") s := make([]rune, n) for i := range s { s[i] = letters[rand.Intn(len(letters))] } //fmt.Println(s) return string(s) } func GetUser(c *fiber.Ctx) error { return c.SendString("user") } func GetUsers(c *fiber.Ctx) error { db, err := database.GetDatabase() // c.Params("id") if db == nil || err != nil { return c.SendString("db error") } list := []string{} var ( name string ) rows, err := db.Query("SELECT username FROM users;") defer rows.Close() fmt.Println("reading data:") for rows.Next() { err := rows.Scan(&name) fmt.Printf("Data row = (%s, %s)\n", name, err) list = append(list, name) } err = rows.Err() fmt.Println("Done") return c.JSON(list) }