CoolFace
Apppublic

bimasatria/enterprise-erp-api

sourceHugging Faceupdated 4mo agoView on Hugging Face
0likes
auth_controller.go86 linesDownload Raw Back to controllers
1package controllers2 3import (4	"os"5	"time"6 7	"enterprise-erp/config"8	"enterprise-erp/models"9 10	"github.com/gofiber/fiber/v2"11	"github.com/golang-jwt/jwt/v5"12	"golang.org/x/crypto/bcrypt"13)14 15type RegisterInput struct {16	TenantID string `json:"tenant_id"`17	Name     string `json:"name"`18	Email    string `json:"email"`19	Password string `json:"password"`20	Role     string `json:"role"`21}22 23func Register(c *fiber.Ctx) error {24	var input RegisterInput25	if err := c.BodyParser(&input); err != nil {26		return c.Status(400).JSON(fiber.Map{"error": "Format data tidak valid"})27	}28 29	hashedPassword, err := bcrypt.GenerateFromPassword([]byte(input.Password), 10)30	if err != nil {31		return c.Status(500).JSON(fiber.Map{"error": "Gagal memproses password"})32	}33 34	user := models.User{35		TenantID: input.TenantID,36		Name:     input.Name,37		Email:    input.Email,38		Password: string(hashedPassword),39		Role:     input.Role,40	}41 42	if err := config.DB.Create(&user).Error; err != nil {43		return c.Status(500).JSON(fiber.Map{"error": "Gagal menyimpan user, mungkin email sudah terdaftar"})44	}45 46	return c.Status(201).JSON(fiber.Map{"message": "Registrasi berhasil", "user_id": user.ID})47}48 49type LoginInput struct {50	Email    string `json:"email"`51	Password string `json:"password"`52}53 54func Login(c *fiber.Ctx) error {55	var input LoginInput56	if err := c.BodyParser(&input); err != nil {57		return c.Status(400).JSON(fiber.Map{"error": "Format data tidak valid"})58	}59 60	var user models.User61	if err := config.DB.Where("email = ?", input.Email).First(&user).Error; err != nil {62		return c.Status(404).JSON(fiber.Map{"error": "Email tidak ditemukan"})63	}64 65	if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(input.Password)); err != nil {66		return c.Status(401).JSON(fiber.Map{"error": "Password salah"})67	}68 69	token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{70		"user_id":   user.ID,71		"tenant_id": user.TenantID,72		"role":      user.Role,73		"exp":       time.Now().Add(time.Hour * 24).Unix(),74	})75 76	tokenString, err := token.SignedString([]byte(os.Getenv("JWT_SECRET")))77	if err != nil {78		return c.Status(500).JSON(fiber.Map{"error": "Gagal membuat token akses"})79	}80 81	return c.JSON(fiber.Map{82		"message": "Login berhasil",83		"token":   tokenString,84	})85}86