initial commit 2
This commit is contained in:
125
server/router/authenticateroute/controller.go
Normal file
125
server/router/authenticateroute/controller.go
Normal file
@@ -0,0 +1,125 @@
|
||||
package authenticateroute
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
b64 "encoding/base64"
|
||||
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/applicationservice"
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
|
||||
"bitbucket.org/nemt/nemt-portal-api/infra/auth"
|
||||
"bitbucket.org/nemt/nemt-portal-api/infra/config"
|
||||
"bitbucket.org/nemt/nemt-portal-api/server/router/routeutils"
|
||||
"github.com/labstack/echo"
|
||||
)
|
||||
|
||||
var (
|
||||
instance *controller
|
||||
once sync.Once
|
||||
)
|
||||
|
||||
type controller struct {
|
||||
cfg *config.Config
|
||||
svc *applicationservice.Service
|
||||
}
|
||||
|
||||
func controllerInstance(cfg *config.Config, svc *applicationservice.Service) *controller {
|
||||
once.Do(func() {
|
||||
instance = &controller{
|
||||
cfg: cfg,
|
||||
svc: svc,
|
||||
}
|
||||
})
|
||||
return instance
|
||||
}
|
||||
|
||||
func (c *controller) handlePortal(ctx echo.Context) error {
|
||||
err := auth.ValidateAppKey(ctx, c.cfg)
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
var user viewmodel.User
|
||||
if err = ctx.Bind(&user); err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
if user.Email == nil || len(*user.Email) == 0 || len(user.Pass) == 0 {
|
||||
return routeutils.ResponseAPIAuthError(ctx, "email and pass are required", false)
|
||||
}
|
||||
|
||||
pass, err := b64.StdEncoding.DecodeString(user.Pass)
|
||||
if err != nil {
|
||||
return routeutils.ResponseAPIAuthError(ctx, "Invalid email or password", false)
|
||||
}
|
||||
user.Pass = string(pass)
|
||||
|
||||
user, err = c.svc.Users.FullLogin("email", *user.Email, user.Pass, "SP")
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
if user.ID == "" {
|
||||
return routeutils.ResponseAPIAuthError(ctx, "Invalid email or password", false)
|
||||
}
|
||||
|
||||
token, err := auth.GenerateToken(c.cfg, user)
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
response := viewmodel.AuthResponse{
|
||||
Token: token,
|
||||
ServerTime: time.Now().Unix(),
|
||||
ValidTime: time.Now().Add(auth.TokenExpiration).Unix(),
|
||||
User: user,
|
||||
}
|
||||
|
||||
return routeutils.ResponseAPIOK(ctx, response)
|
||||
}
|
||||
|
||||
func (c *controller) handleMember(ctx echo.Context) error {
|
||||
err := auth.ValidateAppKey(ctx, c.cfg)
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
var user viewmodel.User
|
||||
if err = ctx.Bind(&user); err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
if user.PhoneNumber == nil || len(*user.PhoneNumber) == 0 || len(user.Pass) == 0 {
|
||||
return routeutils.ResponseAPIAuthError(ctx, "phonenumber and pass are required", false)
|
||||
}
|
||||
|
||||
pass, err := b64.StdEncoding.DecodeString(user.Pass)
|
||||
if err != nil {
|
||||
return routeutils.ResponseAPIAuthError(ctx, "Invalid phonenumber or password", false)
|
||||
}
|
||||
user.Pass = string(pass)
|
||||
|
||||
user, err = c.svc.Users.FullLogin("phone_number", *user.PhoneNumber, user.Pass, "US")
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
if user.ID == "" {
|
||||
return routeutils.ResponseAPIAuthError(ctx, "Invalid phonenumber or password", false)
|
||||
}
|
||||
|
||||
token, err := auth.GenerateToken(c.cfg, user)
|
||||
if err != nil {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
response := viewmodel.AuthResponse{
|
||||
Token: token,
|
||||
ServerTime: time.Now().Unix(),
|
||||
ValidTime: time.Now().Add(auth.TokenExpiration).Unix(),
|
||||
User: user,
|
||||
}
|
||||
|
||||
return routeutils.ResponseAPIOK(ctx, response)
|
||||
}
|
||||
Reference in New Issue
Block a user