package authService import ( "context" "encoding/hex" "os" "github.com/farahty/go-mongo/app" "github.com/farahty/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 }