Raw
 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}