Skip to content

HSNPhira v1 バックエンド

HSNPhira v1 バックエンドは Python Flask フレームワークを採用し、複数の独立したマイクロサービスで構成され、ユーザー管理、ルーム監視、コマンド実行、ファイルサービスなどの機能を提供します。

サービスアーキテクチャ概要

サービスポート技術スタック説明
user_manager2345Flask + SQLiteユーザー登録/ログイン/情報管理、Phira データ同期
room5000Flask + ログ解析リアルタイムルーム状態監視(ログ駆動)
api5001Flask + SQLiteルームデータ収集と統計分析(API 駆動)
command7878Flask安全なコマンド実行(ホワイトリスト + パスワード認証)
file7880Flaskファイルコンテンツサービス

1. user_manager (ポート 2345)

ユーザーアカウント管理のコアサービス。

機能

  • ユーザー登録 (POST /register) — Phira アカウントと連携して登録、パスワードはソルト付きハッシュで保存
  • ユーザーログイン (POST /login) — パスワード認証、ユーザー情報を返却
  • ユーザー情報照会 (POST /info) — 管理者/スーパー管理者権限で照会可能
  • ユーザー情報変更 (POST /info_changer) — ユーザー名、パスワード、Phira ID、権限などを変更
  • 管理者インターフェース — ユーザー一覧照会、単一ユーザー更新、一括更新
  • Phira データ同期 — バックグラウンドスレッドが定期的に phira.5wyxi.com API からユーザーアバターと RKS を更新

データベース

  • ファイル: phira_users.db (SQLite)
  • テーブル users: id, name, phira_id, phira_name, phira_rks, image_url, password(ハッシュ), admin, dev, created_at

認証

ロール資格情報権限
スーパー管理者固定パスワード(コード内で設定)完全制御、パスワード/権限フィールドの変更可能
一般管理者固定パスワード(コード内で設定)ユーザー情報照会、権限以外のフィールド変更

2. room (ポート 5000)

ログ駆動型のリアルタイムルーム状態監視サービス。phira-mp/server.log をリアルタイムで読み取り、ルームイベントを追跡します。

機能

  • ログ監視 — ログファイルをリアルタイム追跡、ルーム作成/参加/退出/解散イベントを解析
  • ルーム状態追跡 — ルーム状態(譜面選択中/プレイ中)、ループのオン/オフ、譜面選択を記録
  • ユーザーマッピング — user_id → username と user_id → room_name のマッピングを維持
  • 永続化 — ユーザーマッピング関係を user_info.json に書き込み

API

エンドポイント説明
GET /rooms全ルームの詳細情報を取得
GET /statusシステム状態(ルーム数、ユーザー数)
GET /healthヘルスチェック
GET /users/total登録ユーザー総数の統計

バックグラウンドスレッド

  • ログ追跡 (tail_log) — ログファイルの変更をリアルタイムで読み取り
  • ルームクリーンアップ (room_cleanup_task) — 60秒ごとに1時間以上アクティブでないルームを削除

3. api (ポート 5001)

API 駆動型のルームデータ収集と統計サービス。phira.htadiy.cc/api/rooms/info をポーリングしてデータを取得します。

機能

  • ルーム監視 — 毎秒 Phira API からルーム一覧を取得しデータベースに保存
  • ユーザー入退室追跡 — ユーザーのルーム入退室時刻と滞在時間を記録
  • ゲームラウンド追跡 — ゲームの開始/終了時間、ユーザーのプレイ時間を記録
  • オンライン人数統計

データベース

  • ファイル: phira_stats.db (SQLite)
  • テーブル: rooms, user_room_activity, user_room_duration, game_rounds, user_playtime
エンドポイント説明
GET /users現在のオンライン総人数

バックグラウンドスレッド

  • ルーム監視 (room_monitor_service) — 毎秒 API をポーリングし、データベースを更新

4. command (ポート 7878)

安全なリモートコマンド実行サービス。

機能

  • ホワイトリストコマンド — 事前定義された制御コマンド(start/restart/stop/serverinfo)
  • カスタムコマンド — 任意のコマンド実行を許可(設定でオン/オフ可能)
  • 3段階パスワード認証 — 3つのパスワード断片を同時に提示して認証
  • 危険コマンドブラックリスト — rm -rf /、mkfs、shutdown などの危険操作を阻止

API

エンドポイント説明
POST /executeコマンドを実行(ホワイトリストまたはカスタム)

セキュリティ機構

  • 全てのコマンドは shlex.split で安全に解析
  • 危険コマンドブラックリストによる阻止
  • パスワードは werkzeug.security.check_password_hash で検証

5. file (ポート 7880)

シンプルなファイルコンテンツサービス。

機能

  • 指定されたパスのファイル内容を読み取り返却(デフォルトは /root/user_info.json
  • 環境変数 FILE_PATH で対象ファイルを設定可能

API

エンドポイント説明
GET /apiファイル内容を返却

起動方法

bash
# ユーザー管理サービス
python user_manager.py       # → :2345

# ルーム監視サービス(ログ駆動)
python room.py               # → :5000

# ルーム監視サービス(API 駆動)
python api.py                # → :5001

# コマンド実行サービス
python command.py            # → :7878

# ファイルサービス
python file.py               # → :7880

依存関係

  • flask — Web フレームワーク
  • werkzeug.security — パスワードハッシュ
  • sqlite3 — データベース(Python 標準搭載)
  • requests — HTTP リクエスト(ルーム API 収集)
  • threading — バックグラウンドスレッド(Python 標準搭載)

Last modified byFireflyF09on2026-06-26 15:41

Built with VitePress