セッションクリーンアップ
メソッド
REST メソッドを採用しています。
HTTP メソッド
POST: メンテナンス操作
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時の URI と JSON 内のノードには snake_case を使用します。
リクエストとレスポンス
ヘッダー
メタ情報はレスポンスボディではなく、HTTP ヘッダーに設定されます。
リクエストヘッダー
X-API-Key:<session_cleanup_api_key>
レスポンスヘッダー
Content-Type:application/json
セッションクリーンアップ
URI
リクエストボディ
リクエストボディは不要です。
レスポンス(200 OK)
レスポンスは JSON です。
注: 本エンドポイントは、期限切れセッションを定期的に削除するスケジュール済みサービス(例: AWS EventBridge の cron)向けです。一般ユーザーが直接呼び出すものではありません。
認証要件
X-API-Key ヘッダーで API キーを渡して認証します。API キーはタイミング攻撃を防ぐため、タイミングセーフな比較で検証されます。
例外処理
例外時のステータスコードは次のとおりです。
| 説明 | ステータスコード | ステータス名 |
|---|---|---|
| API キーが欠落または無効 | 401 | Unauthorized |
| サーバ内部エラー | 500 | Internal Server Error |
処理フロー
シーケンス図
sequenceDiagram
participant Scheduler as AWS EventBridge
participant API as Hono Router
participant Validate as API Key Validation
participant Service as Auth Service
participant DB as PostgreSQL Database
Scheduler->>API: POST /api/v1/auth/cleanup_sessions
API->>Validate: Extract X-API-Key header
alt API Key Valid
Validate->>Validate: timingSafeEqual(apiKey, expectedKey)
Validate-->>API: API key valid
API->>Service: cleanupExpiredSessions()
Service->>DB: Find expired sessions (expires_at < now)
DB-->>Service: Expired sessions list
Service->>DB: Soft-delete expired sessions
DB-->>Service: Deleted count
Service-->>API: cleanedCount
API-->>Scheduler: 200 OK { message, cleaned_count }
else API Key Missing or Invalid
Validate-->>API: UnauthorizedError
API-->>Scheduler: 401 Unauthorized
end
Routes 層
ルーティングはここで行います。ハンドラ内で API キーをタイミングセーフな比較で検証し、有効なら認証サービスにクリーンアップを委譲します。
ソース: src/routes/v1/auth.ts:176
Services 層
ビジネスロジックの説明です。有効期限を過ぎたセッションをデータベースから検索し、ソフト削除します。
ソース: src/services/auth.ts
Repositories 層
データベースへのアクセスです。期限切れセッションの検索と一括ソフト削除を扱います。
ソース: src/repositories/
セキュリティ
- API キーは
timingSafeEqualで検証し、タイミング攻撃を防ぎます SESSION_CLEANUP_API_KEYが未設定の場合は、一定時間比較のためダミーバッファを使用します- 不正なアクセス試行はログに記録されます
- 内部/スケジュール呼び出し専用を想定しています