go-mongo/services/auth/sucess_login.go
2025-05-31 18:38:25 +03:00

71 lines
1.3 KiB
Go

package authService
import (
"context"
"encoding/hex"
"os"
"git.farahty.com/nimer/go-mongo/app"
"git.farahty.com/nimer/go-mongo/models"
"github.com/google/uuid"
"go.mongodb.org/mongo-driver/bson"
)
func successLogin(ctx context.Context, user *models.User) (*models.LoginResponse, error) {
refresh_secret := os.Getenv("REFRESH_SECRET")
refresh_expiry := os.Getenv("REFRESH_EXPIRY")
access_secret := os.Getenv("ACCESS_SECRET")
access_expiry := os.Getenv("ACCESS_EXPIRY")
identity := user.Email
if identity == nil {
identity = user.Phone
}
refreshHandle := hex.EncodeToString([]byte(uuid.NewString()))
refreshToken, err := createToken(
refreshHandle,
refresh_secret,
refresh_expiry,
models.UserJWT{
ID: user.ID.Hex(),
Identity: *identity,
},
)
if err != nil {
return nil, err
}
accessToken, err := createToken(
user.ID.Hex(),
access_secret,
access_expiry,
models.UserJWT{
ID: user.ID.Hex(),
Identity: *identity,
},
)
if err != nil {
return nil, err
}
user.Token = &refreshHandle
_, err = app.Collection("users").UpdateByID(ctx, user.ID, bson.D{{Key: "$set", Value: user}})
if err != nil {
return nil, err
}
return &models.LoginResponse{
AccessToken: *accessToken,
RefreshToken: *refreshToken,
User: user,
}, nil
}