75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
package authentication
|
|
|
|
import (
|
|
"net/http"
|
|
"netina/database"
|
|
"netina/models"
|
|
u "netina/queries"
|
|
user_repository "netina/repositories/user"
|
|
sms "netina/services"
|
|
"netina/validation"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
|
|
func RequestCode(c echo.Context) error {
|
|
db := database.Db()
|
|
|
|
gc := NewGenerateCode(&db)
|
|
|
|
phoneNumber := new(models.CreatePhoneNumber)
|
|
if err := c.Bind(phoneNumber); err != nil {
|
|
return c.JSON(http.StatusBadRequest, map[string]string{"error": "Invalid request payload"})
|
|
}
|
|
|
|
if err := validation.ValidateStruct(phoneNumber); err != nil {
|
|
return c.JSON(http.StatusBadRequest, map[string]string{"error": err.Error()})
|
|
}
|
|
|
|
loginCode ,err := gc.CreateLoginCode(phoneNumber.PhoneNumber)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
sms.Sms(phoneNumber.PhoneNumber , loginCode)
|
|
return nil
|
|
}
|
|
|
|
|
|
func Login(c echo.Context) error {
|
|
db := database.Db()
|
|
code := new(models.LoginCode)
|
|
if err := c.Bind(code); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := validation.ValidateStruct(code); err != nil {
|
|
return c.JSON(http.StatusBadRequest, map[string]string{"error": err.Error()})
|
|
}
|
|
|
|
gc := NewGenerateCode(&db)
|
|
|
|
if gc.VerifyLoginCode(code.PhoneNumber , code.Code) == nil {
|
|
ur := user_repository.UserQueryRepository{DB: &db}
|
|
userHandller := u.GetUserByPhoneNumberHandler{Repository: ur}
|
|
user , err := userHandller.Handle(code.PhoneNumber)
|
|
if err != nil {
|
|
return c.JSON(http.StatusNotFound , "user not found")
|
|
}
|
|
|
|
token , err:= GenerateTokenForUser(user.User_id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.JSON(http.StatusAccepted , token)
|
|
|
|
} else {
|
|
return c.JSON(http.StatusBadRequest , "invalid Request")
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|