Ужасный код
This commit is contained in:
parent
17a6019ea0
commit
8afc68814e
|
@ -4,16 +4,130 @@ package controllers
|
|||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"encoding/base64"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-playground/validator/v10"
|
||||
"golang-test/database"
|
||||
"golang-test/libs"
|
||||
"golang-test/message"
|
||||
"golang-test/validators"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func tokenGenerator() string {
|
||||
b := make([]byte, 4)
|
||||
rand.Read(b)
|
||||
return fmt.Sprintf("%x", b)
|
||||
//func tokenGenerator() string {
|
||||
// b := make([]byte, 4)
|
||||
// rand.Read(b)
|
||||
// return fmt.Sprintf("%x", b)
|
||||
//}
|
||||
|
||||
// func main() {
|
||||
// a := tokenGenerator()
|
||||
// fmt.Println(a)
|
||||
// }
|
||||
type Token struct {
|
||||
gorm.Model
|
||||
UserID uint
|
||||
token string
|
||||
}
|
||||
|
||||
func main() {
|
||||
a := tokenGenerator()
|
||||
fmt.Println(a)
|
||||
func RegisterUser(c *gin.Context, user database.User) {
|
||||
db := database.Connector()
|
||||
validate := validators.Validate
|
||||
response := message.Response{Status: 200}
|
||||
if err := validate.Struct(user); err != nil {
|
||||
response.Error = libs.GetValidationErrors(err.(validator.ValidationErrors))
|
||||
response.Status = 400
|
||||
message.SendResponse(c, response)
|
||||
return
|
||||
}
|
||||
hash, err := bcrypt.GenerateFromPassword([]byte(user.Password), 12)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
user.Password = string(hash)
|
||||
if err := db.Create(user).Error; err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func LoginUser(c *gin.Context, email, password string) *Token {
|
||||
var user database.User
|
||||
db := database.Connector()
|
||||
validate := validators.Validate
|
||||
if err := db.Where("email = ?", email).First(&user).Error; err != nil {
|
||||
return nil
|
||||
}
|
||||
if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)); err != nil {
|
||||
return nil
|
||||
}
|
||||
token := &Token{
|
||||
UserID: user.ID,
|
||||
Token: generateToken(),
|
||||
}
|
||||
if err := db.Create(token).Error; err != nil {
|
||||
return nil
|
||||
}
|
||||
return token
|
||||
}
|
||||
|
||||
func generateToken() string {
|
||||
b := make([]byte, 4)
|
||||
if _, err := rand.Read(b); err != nil {
|
||||
return ""
|
||||
}
|
||||
return base64.StdEncoding.EncodeToString(b)
|
||||
}
|
||||
|
||||
func GetUserByToken(c *gin.Context, token string) database.User {
|
||||
var tokenStruct Token
|
||||
|
||||
db := database.Connector()
|
||||
validate := validators.Validate
|
||||
if err := db.Where("token = ?", token).First(&tokenStruct).Error; err != nil {
|
||||
return nil
|
||||
}
|
||||
var user database.User
|
||||
if err := db.First(&user, tokenStruct.UserID).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return user
|
||||
}
|
||||
|
||||
func EditUser(c *gin.Context, token string, user database.User) {
|
||||
db := database.Connector()
|
||||
validate := validators.Validate
|
||||
u := GetUserByToken(c, token)
|
||||
if err := validate.Struct(user); err != nil {
|
||||
return
|
||||
}
|
||||
if user.Name != "" {
|
||||
u.Name = user.Name
|
||||
}
|
||||
if user.Email != "" {
|
||||
u.Email = user.Email
|
||||
}
|
||||
if user.Password != "" {
|
||||
hash, err := bcrypt.GenerateFromPassword([]byte(user.Password), 12)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
u.Password = string(hash)
|
||||
}
|
||||
if err := db.Save(u).Error; err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func DeleteUser(c *gin.Context, token string) {
|
||||
u, err := GetUserByToken(db, token)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if err := db.Delete(u).Error; err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ type Manufacturer struct {
|
|||
|
||||
type Product struct {
|
||||
gorm.Model
|
||||
Name string `validate:"required`
|
||||
Name string `validate:"required"`
|
||||
Price uint `validate:"required"`
|
||||
ManufacturerID uint `validate:"required"`
|
||||
Manufacturer *Manufacturer `gorm:"foreignKey:ManufacturerID;references:ID"`
|
||||
|
@ -17,9 +17,9 @@ type Product struct {
|
|||
|
||||
type User struct {
|
||||
gorm.Model
|
||||
Name string
|
||||
Email string
|
||||
Password string
|
||||
Name string `validate:"required"`
|
||||
Email string `validate:"required"`
|
||||
Password string `validate:"required"`
|
||||
Products []*Product `gorm:"many2many:user_products;"`
|
||||
Token string `gorm:"many2many:user_token;"`
|
||||
}
|
||||
|
|
10
main.go
10
main.go
|
@ -70,12 +70,14 @@ func main() {
|
|||
controllers.EditManufacture(c, manufacturer)
|
||||
})
|
||||
|
||||
//Для создания пользователя
|
||||
r.POST("/registration", func(c *gin.Context) {
|
||||
type registrationForm struct {
|
||||
name string
|
||||
email string
|
||||
password string
|
||||
var manufacturer database.Manufacturer
|
||||
if err := c.ShouldBind(&manufacturer); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
}
|
||||
|
||||
controllers.CreateManufacturer(c, manufacturer)
|
||||
})
|
||||
err := r.Run()
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in New Issue