working on auth

This commit is contained in:
2024-11-19 10:40:30 +05:30
parent a2739dbbcd
commit 5954ec2501
13 changed files with 284 additions and 38 deletions

View File

@@ -17,15 +17,10 @@ import (
"gitserver.in/patialtech/rano/graph/model"
"gitserver.in/patialtech/rano/util/crypto"
"gitserver.in/patialtech/rano/util/logger"
"gitserver.in/patialtech/rano/util/uid"
)
type (
SessionUser struct {
ID string
Email string
Name string
RoleID int
}
AuthUser = model.AuthUser
)
@@ -37,7 +32,7 @@ var (
)
func CtxWithUser(ctx context.Context, u *AuthUser) context.Context {
return context.WithValue(ctx, config.AuthUserCtxKey, &SessionUser{
return context.WithValue(ctx, config.AuthUserCtxKey, &AuthUser{
ID: u.ID,
Email: u.Email,
Name: u.Name,
@@ -45,8 +40,8 @@ func CtxWithUser(ctx context.Context, u *AuthUser) context.Context {
})
}
func CtxUser(ctx context.Context) *SessionUser {
u, _ := ctx.Value(config.AuthUserCtxKey).(*SessionUser)
func CtxUser(ctx context.Context) *AuthUser {
u, _ := ctx.Value(config.AuthUserCtxKey).(*AuthUser)
return u
}
@@ -62,16 +57,35 @@ func NewSession(ctx context.Context, email, pwd string) (*AuthUser, error) {
// 30 day token life
until := time.Now().Add(time.Hour * 24 * 30).UTC()
// user IP
ip, _ := ctx.Value("RequestIP").(string)
// user Agent
ua, _ := ctx.Value("RequestUA").(string)
// create sesion entry in db
db.Client().UserSession.Create().
// create session entry in db
s, err := db.Client().UserSession.Create().
SetUserID(u.ID).
SetIssuedAt(time.Now().UTC()).
SetExpiresAt(until).
SetIP("").
SetUserAgent("")
SetIP(ip).
SetUserAgent(ua).
Save(ctx)
if err != nil {
logger.Error(err)
return nil, ErrUnexpected
}
sid, err := uid.Encode(
uint64(u.ID),
uint64(s.ID),
)
if err != nil {
logger.Error(err)
return nil, ErrUnexpected
}
return &AuthUser{
ID: sid,
Name: fullName(u.FirstName, *u.MiddleName, u.LastName),
}, nil
}

View File

@@ -19,11 +19,11 @@ var (
// newTokenToVerifyEmail for a user for given duration
func newTokenToVerifyEmail(userID int64, d time.Duration) (string, error) {
expiresAt := time.Now().Add(d).UTC().UnixMilli()
return uid.Encode([]uint64{
return uid.Encode(
uint64(userID),
1, // identifies that its token to verify email
uint64(expiresAt),
})
)
}
// tokenToVerifyEmail will check for valid email token that is yet not expired