Ужасный код
This commit is contained in:
parent
17a6019ea0
commit
8afc68814e
|
@ -4,16 +4,130 @@ package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"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 {
|
//func tokenGenerator() string {
|
||||||
b := make([]byte, 4)
|
// b := make([]byte, 4)
|
||||||
rand.Read(b)
|
// rand.Read(b)
|
||||||
return fmt.Sprintf("%x", b)
|
// return fmt.Sprintf("%x", b)
|
||||||
|
//}
|
||||||
|
|
||||||
|
// func main() {
|
||||||
|
// a := tokenGenerator()
|
||||||
|
// fmt.Println(a)
|
||||||
|
// }
|
||||||
|
type Token struct {
|
||||||
|
gorm.Model
|
||||||
|
UserID uint
|
||||||
|
token string
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func RegisterUser(c *gin.Context, user database.User) {
|
||||||
a := tokenGenerator()
|
db := database.Connector()
|
||||||
fmt.Println(a)
|
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 {
|
type Product struct {
|
||||||
gorm.Model
|
gorm.Model
|
||||||
Name string `validate:"required`
|
Name string `validate:"required"`
|
||||||
Price uint `validate:"required"`
|
Price uint `validate:"required"`
|
||||||
ManufacturerID uint `validate:"required"`
|
ManufacturerID uint `validate:"required"`
|
||||||
Manufacturer *Manufacturer `gorm:"foreignKey:ManufacturerID;references:ID"`
|
Manufacturer *Manufacturer `gorm:"foreignKey:ManufacturerID;references:ID"`
|
||||||
|
@ -17,9 +17,9 @@ type Product struct {
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
gorm.Model
|
gorm.Model
|
||||||
Name string
|
Name string `validate:"required"`
|
||||||
Email string
|
Email string `validate:"required"`
|
||||||
Password string
|
Password string `validate:"required"`
|
||||||
Products []*Product `gorm:"many2many:user_products;"`
|
Products []*Product `gorm:"many2many:user_products;"`
|
||||||
Token string `gorm:"many2many:user_token;"`
|
Token string `gorm:"many2many:user_token;"`
|
||||||
}
|
}
|
||||||
|
|
10
main.go
10
main.go
|
@ -70,12 +70,14 @@ func main() {
|
||||||
controllers.EditManufacture(c, manufacturer)
|
controllers.EditManufacture(c, manufacturer)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
//Для создания пользователя
|
||||||
r.POST("/registration", func(c *gin.Context) {
|
r.POST("/registration", func(c *gin.Context) {
|
||||||
type registrationForm struct {
|
var manufacturer database.Manufacturer
|
||||||
name string
|
if err := c.ShouldBind(&manufacturer); err != nil {
|
||||||
email string
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
password string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
controllers.CreateManufacturer(c, manufacturer)
|
||||||
})
|
})
|
||||||
err := r.Run()
|
err := r.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue