1package session
2
3import (
4 "context"
5 "errors"
6 "fmt"
7
8 "tug/internal/storage"
9)
10
11func (s *Service) RevokeBrowser(ctx context.Context, p Principal) (storage.Revoked, error) {
12 if p.SessionID == "" {
13 return storage.Revoked{}, fmt.Errorf("session: revoke browser: %w: no current session", ErrNoSession)
14 }
15 revoked, err := s.store.RevokeBrowserAuditedAt(ctx, p.UserID, p.SessionID, auditInput(p.UserID, "session.revoke_browser", p.UserID, hostDetail{Host: p.Host}), s.clock())
16 if errors.Is(err, storage.ErrInvalid) {
17 return storage.Revoked{}, fmt.Errorf("session: revoke browser: %w: %w", ErrNoSession, err)
18 }
19 if err != nil {
20 return storage.Revoked{}, failure("revoke browser", err)
21 }
22 return revoked, nil
23}