109 lines
2.4 KiB
Go
109 lines
2.4 KiB
Go
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)
|
|
}
|