プライバシーとセキュリティの保護について

このシステムは安心して利用できるよう、セキュリティに配慮した設計になっています。具体的には以下の安全性が確保されています。

システム仕様・シーケンス図

1. 避難所サーバー:Discordログイン

sequenceDiagram participant U as ユーザー participant S1 as 避難所サーバー participant Auth as 認証サーバー U->>S1: ログインボタン押下 S1->>Auth: GET /login (Discord OAuth2) Auth-->>U: Discord認証画面へリダイレクト U->>Auth: 認証・コールバック Auth->>Auth: ギルドメンバー判定 & JWT発行(exp:365日) Auth-->>S1: #token=JWT付きリダイレクト S1->>S1: localStorageにJWT保存 & 署名検証 & 表示(display:block)

2. 避難所サーバー:MCID登録処理

sequenceDiagram participant U as ユーザー participant S1 as 避難所サーバー participant Auth as 認証サーバー participant Mojang as Mojang API participant FS as Firestore U->>S1: MCID入力 & 送信 S1->>Auth: POST /api/save-mcid (Authorization: Bearer JWT) Auth->>Auth: JWTデコード & ユーザーID抽出 Auth->>Mojang: Mojang APIへUUID問い合わせ Mojang-->>Auth: 正式UUID & 正式MCID返却 Auth->>FS: Firestoreでサーバー状態(isRunning)照会 alt isRunning == true (起動中) Auth->>FS: serverドキュメントからポート情報を取得 Auth->>Auth: 同一マシン内(localhost)でRCON接続 & "whitelist add" 送信 else isRunning == false (停止中) Auth->>FS: ローカルの whitelist.json を読み込み Auth->>FS: UUIDとMCIDを JSON に追記・再保存 end Auth->>FS: whitelist_mapping.json に保存 Auth-->>S1: { success: true, mcid, uuid } S1-->>U: 登録完了通知

3. 避難所サーバー:データ取得 & 管理サイト連携(SSO)

sequenceDiagram participant U as ユーザー participant S1 as 避難所サーバー participant Auth as 認証サーバー participant API as MC-API participant FS as Firestore Note over U, FS: サーバー詳細・Mod一覧・稼働ログ取得時 U->>S1: サーバー詳細ページアクセス S1->>FS: doc(db, "server", uuid) から基本情報取得 S1->>FS: doc(db, "log", today/yesterday) から稼働ログ取得 S1->>API: GET /api/mods/{serverId} API-->>S1: Mod一覧 (.disabled除外) 返却 Note over U, Auth: Minecraft Server Admin用 SSOトークン発行時 U->>S1: Minecraft Server Adminへのリンクをクリック S1->>Auth: GET /api/issue-sso-token (Bearer JWT) Auth->>Auth: JWT検証 & 20秒限定 sso_token 生成 Auth-->>S1: { sso_token } 返却 S1->>S1: 新規タブでMinecraft Server Adminへ (?sso_token=...) 遷移

4. Minecraft Server Admin:ログイン & 権限確認フロー

sequenceDiagram participant U as ユーザー participant P2 as 管理サイト(各ページ) participant API as MC-API participant FS as Firestore Note over U, FS: SSO自動ログイン時 (sso_token使用) U->>P2: ?sso_token= 付きでアクセス P2->>API: POST /api/sso-login (Bearer sso_token) API->>API: sso_token検証 (20秒期限・purpose確認) API->>FS: usersコレクションから discord_user_id でUID検索 API->>FS: firebase_auth.create_custom_token(uid) 発行 API-->>P2: { success: true, custom_token, uid } P2->>FS: auth.signInWithCustomToken(custom_token) 実行 P2->>P2: ログインセッション確立 Note over U, FS: 通常ログインページアクセス時 (login.html) U->>P2: login.html アクセス P2->>FS: Email/Password または Microsoft OAuth2 認証 FS-->>P2: 認証成功 (ユーザーセッション確立) Note over U, FS: 各種ページアクセス時 (auth-check.js共通) U->>P2: 各種ページ (server-management / operation / config / logs / profile 等) アクセス P2->>FS: auth.onAuthStateChanged() で認証状態監視 P2->>FS: db.collection("users").doc(uid).get() でユーザー情報取得 P2->>P2: users/{uid}/permissions を参照し、操作ボタンを動的に有効/無効化(disabled)

5. Minecraft Server Admin:サーバー起動・停止制御

sequenceDiagram participant U as ユーザー participant P2 as 管理サイト participant API as MC-API participant OS as Minecraftプロセス(OS) participant FS as Firestore Note over U, FS: サーバー起動時 U->>P2: サーバー起動ボタンクリック P2->>API: POST /api/server/{id}/start (Bearer ID Token) API->>FS: verify_firebase_token & check_user_permission ("start"権限検証) API->>FS: サーバーIDから Firestore で folder_name を取得 API->>OS: 同一マシン内で run.bat 実行 (subprocess.Popen) loop ログ監視ループ (最大120秒) API->>OS: サーバー内の latest.log ファイルを読み込み API->>API: 成功キーワード ("Done" 等) を判定 end alt 起動成功 API->>FS: db.collection("server").document(id).update({isRunning: true}) API-->>P2: 200 OK (起動成功) else タイムアウト/エラー API-->>P2: 500 Error end Note over U, FS: サーバー停止時 U->>P2: サーバー停止ボタンクリック P2->>API: POST /api/server/{id}/stop (Bearer ID Token) API->>FS: check_user_permission ("stop"権限検証) API->>FS: Firestoreからポート番号を取得 API->>OS: 同一マシン内(localhost)のRCONポートへ "stop" 送信 API->>API: create_backup() 実行 (ZIP圧縮バックアップ作成) API->>FS: db.collection("server").document(id).update({isRunning: false}) API-->>P2: 200 OK (停止&バックアップ完了)

6. Minecraft Server Admin:MOD管理・ログ閲覧・データ編集

sequenceDiagram participant U as ユーザー participant P2 as 管理サイト participant API as MC-API participant OS as Minecraftプロセス(OS) participant FS as Firestore Note over U, FS: MODアップロード時 U->>P2: MODファイル選択 & アップロードボタン押下 P2->>API: POST /api/mods/{id}/upload (FormData, Bearer ID Token) API->>FS: check_user_permission ("mod_upload"権限検証) API->>FS: Firestoreから folder_name を取得して /mods へ保存 API-->>P2: 200 OK (アップロード完了) Note over U, FS: ログ閲覧時 U->>P2: log-viewer.html アクセス & 選択 P2->>API: GET /api/logs/{id}/list または /view?file=... API->>FS: check_user_permission ("logs"権限検証) API->>OS: ログファイル読み込み & IPアドレス正規表現マスキング API-->>P2: 200 OK (サニタイズ済みログ返却) Note over U, FS: ワールドデータ操作 (ダウンロード/削除/アップロード) U->>P2: ワールド操作ボタン押下 (DL / 削除 / UP) P2->>API: GET/POST /api/world/{id}/download /delete /upload API->>FS: 権限検証 & サーバー起動中チェック API->>OS: バックアップ作成 & ZIP圧縮/削除/展開処理 API-->>P2: 200 OK または バイナリデータ送信 Note over U, FS: Config & server.properties 編集時 U->>P2: 各設定ファイル編集画面アクセス & 保存 P2->>API: GET/POST /api/config/... または /properties API->>FS: 権限検証 & バリデーションチェック API->>OS: ファイル読み込み / 書き込み opt /reload 実行時 API->>OS: 同一マシン内のRCONで "/reload" 実行 end API-->>P2: 200 OK (保存完了)