190 lines
5.5 KiB
Go
190 lines
5.5 KiB
Go
package http
|
|
|
|
import (
|
|
"kemendagri/sipd/services/sipd_auth/controller"
|
|
"kemendagri/sipd/services/sipd_auth/handler/http/http_util"
|
|
"kemendagri/sipd/services/sipd_auth/model/form"
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
type AuthHandler struct {
|
|
Controller *controller.AuthController
|
|
Validate *validator.Validate
|
|
}
|
|
|
|
func NewAuthHandler(app *fiber.App, controller *controller.AuthController, vld *validator.Validate) {
|
|
handler := &AuthHandler{
|
|
Controller: controller,
|
|
Validate: vld,
|
|
}
|
|
|
|
// public route
|
|
rPub := app.Group("/auth")
|
|
rPub.Post("/pre-login", handler.PreLogin)
|
|
rPub.Post("/login", handler.Login)
|
|
rPub.Post("/register", handler.Register)
|
|
rPub.Post("/token-refresh/:token", handler.TokenRefresh)
|
|
rPub.Post("/amankan-kata-sandi", handler.AmankanKataSandi)
|
|
|
|
// strict route
|
|
// rStrict := r.Group("auth")
|
|
}
|
|
|
|
// PreLogin func for login.
|
|
//
|
|
// @Summary user login
|
|
// @Description Login to get JWT token and refresh token.
|
|
// @ID auth-pre-login
|
|
// @Tags Auth
|
|
// @Accept json
|
|
// @Param payload body form.PreLoginForm true "Pre login payload"
|
|
// @Produce json
|
|
// @Success 200 {array} models.PreLoginModel "Success"
|
|
// @Failure 400 {object} utils.RequestError "Bad request"
|
|
// @Failure 403 {object} utils.LoginError "Login forbidden"
|
|
// @Failure 404 {object} utils.RequestError "Data not found"
|
|
// @Failure 422 {array} utils.RequestError "Data validation failed"
|
|
// @Failure 500 {object} utils.RequestError "Server error"
|
|
// @Router /auth/pre-login [post]
|
|
func (ah *AuthHandler) PreLogin(c *fiber.Ctx) error {
|
|
formModel := new(form.PreLoginForm)
|
|
if err := c.BodyParser(formModel); err != nil {
|
|
return err
|
|
}
|
|
|
|
r, err := ah.Controller.PreLogin(*formModel)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.JSON(r)
|
|
}
|
|
|
|
// Login func for login.
|
|
//
|
|
// @Summary user login
|
|
// @Description Login to get JWT token and refresh token.
|
|
// @ID auth-login
|
|
// @Tags Auth
|
|
// @Accept json
|
|
// @Param payload body form.LoginForm true "Login payload"
|
|
// @Produce json
|
|
// @Success 200 {object} http_util.JSONResultLogin "Login Success, jwt provided"
|
|
// @Failure 400 {object} utils.RequestError "Bad request"
|
|
// @Failure 403 {object} utils.LoginError "Login forbidden"
|
|
// @Failure 404 {object} utils.RequestError "Data not found"
|
|
// @Failure 422 {array} utils.RequestError "Data validation failed"
|
|
// @Failure 500 {object} utils.RequestError "Server error"
|
|
// @Router /auth/login [post]
|
|
func (ah *AuthHandler) Login(c *fiber.Ctx) error {
|
|
formModel := new(form.LoginForm)
|
|
if err := c.BodyParser(formModel); err != nil {
|
|
return err
|
|
}
|
|
|
|
token, refreshToken, isDefaultPassword, err := ah.Controller.Login(*formModel)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.JSON(
|
|
http_util.JSONResultLogin{Token: token, RefreshToken: refreshToken, IsDefaultPassword: isDefaultPassword},
|
|
)
|
|
}
|
|
|
|
// Register func for register.
|
|
//
|
|
// @Summary user register
|
|
// @Description Register user.
|
|
// @ID auth-register
|
|
// @Tags Auth
|
|
// @Accept json
|
|
// @Param payload body form.SignupForm true "Register payload"
|
|
// @Produce json
|
|
// @Success 200 {object} bool "Register Success"
|
|
// @Failure 400 {object} utils.RequestError "Bad request"
|
|
// @Failure 404 {object} utils.RequestError "Data not found"
|
|
// @Failure 422 {array} utils.RequestError "Data validation failed"
|
|
// @Failure 500 {object} utils.RequestError "Server error"
|
|
// @Router /auth/register [post]
|
|
func (ah *AuthHandler) Register(c *fiber.Ctx) error {
|
|
formModel := new(form.SignupForm)
|
|
if err := c.BodyParser(formModel); err != nil {
|
|
return err
|
|
}
|
|
|
|
resp, err := ah.Controller.Register(formModel)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.JSON(resp)
|
|
}
|
|
|
|
// TokenRefresh godoc
|
|
//
|
|
// @Summary Refresh Token
|
|
// @Description Refresh token to get new valid JWT token and refresh token
|
|
// @ID auth-refresh-token
|
|
// @Tags Auth
|
|
// @Produce json
|
|
// @Param payload body form.RefreshTokenForm true "Payload"
|
|
// @Success 200 {object} models.ResponseLogin "Refresh Token Success, new JWT token provided"
|
|
// @Failure 400 {object} utils.RequestError "Bad request"
|
|
// @Failure 404 {object} utils.RequestError "Data not found"
|
|
// @Failure 422 {array} utils.RequestError "Data validation failed"
|
|
// @Failure 500 {object} utils.RequestError "Server error"
|
|
// @Router /auth/token-refresh/{token} [post]
|
|
func (ah *AuthHandler) TokenRefresh(c *fiber.Ctx) error {
|
|
pl := form.RefreshTokenForm{}
|
|
if err := c.BodyParser(&pl); err != nil {
|
|
return err
|
|
}
|
|
|
|
r, err := ah.Controller.RefreshToken(pl)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.JSON(r)
|
|
}
|
|
|
|
// AmankanKataSandi User func for change password.
|
|
//
|
|
// @Summary Amankan Kata Sandi
|
|
// @Description User melakukan Amankan Kata Sandi.
|
|
// @ID auth-amankan-kata-sandi
|
|
// @Tags Auth
|
|
// @Param payload body form.ChangePasswordFormPublik true "Payload"
|
|
// @Produce json
|
|
// @success 200 {object} bool "Success"
|
|
// @Failure 400 {object} utils.RequestError "Bad request"
|
|
// @Failure 403 {object} utils.RequestError "Forbidden"
|
|
// @Failure 404 {object} utils.RequestError "Data not found"
|
|
// @Failure 422 {array} utils.RequestError "Data validation failed"
|
|
// @Failure 500 {object} utils.RequestError "Server error"
|
|
// @Router /auth/amankan-kata-sandi [post]
|
|
func (ah *AuthHandler) AmankanKataSandi(c *fiber.Ctx) error {
|
|
formModel := new(form.ChangePasswordFormPublik)
|
|
if err := c.BodyParser(formModel); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Validate form input
|
|
err := ah.Validate.Struct(formModel)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = ah.Controller.AmankanKataSandi(*formModel)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.JSON(true)
|
|
}
|