mirror of
https://github.com/warmbly/warmbly.git
synced 2026-08-20 00:01:21 +00:00
85 lines
1.7 KiB
Go
85 lines
1.7 KiB
Go
package token
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/warmbly/warmbly/internal/errx"
|
|
"github.com/warmbly/warmbly/internal/infrastructure/db"
|
|
)
|
|
|
|
func (s *tokenService) RevokeSession(ctx context.Context, accessToken string) *errx.Error {
|
|
sess, err := s.ValidateAccessToken(ctx, accessToken)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
now := time.Now()
|
|
|
|
tx, xerr := s.db.Begin(ctx)
|
|
if xerr != nil {
|
|
db.CaptureError(err, "", nil, "begin")
|
|
return errx.InternalError()
|
|
}
|
|
defer tx.Rollback(ctx)
|
|
|
|
if err := s.tokenRepository.RevokeSession(ctx, tx, sess.ID, now); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := s.deleteSession(ctx, sess.ID); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := tx.Commit(ctx); err != nil {
|
|
db.CaptureError(err, "", nil, "commit")
|
|
return errx.InternalError()
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *tokenService) RevokeAllSession(ctx context.Context, accessToken string) *errx.Error {
|
|
sess, err := s.ValidateAccessToken(ctx, accessToken)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
now := time.Now()
|
|
|
|
tx, xerr := s.db.Begin(ctx)
|
|
if xerr != nil {
|
|
db.CaptureError(err, "", nil, "begin")
|
|
return errx.InternalError()
|
|
}
|
|
defer tx.Rollback(ctx)
|
|
|
|
if err := s.tokenRepository.RevokeSession(ctx, tx, sess.ID, now); err != nil {
|
|
return err
|
|
}
|
|
|
|
sess.RevokedAt = &now
|
|
|
|
sessions, err := s.tokenRepository.FindExpiredSessions(ctx, sess.UserID, now.Truncate(SessionTTL))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, sess := range sessions {
|
|
if err := s.deleteSession(ctx, sess); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if err := s.tokenRepository.RevokeSessions(ctx, sess.UserID); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := tx.Commit(ctx); err != nil {
|
|
db.CaptureError(err, "", nil, "commit")
|
|
return errx.InternalError()
|
|
}
|
|
|
|
return nil
|
|
}
|