71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
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
|
|
|
|
}
|