fix superadmin settings cache

This commit is contained in:
2026-08-29 23:47:58 +03:30
parent 9f6203075a
commit a8be3d499b
2 changed files with 31 additions and 17 deletions
@@ -103,9 +103,18 @@ class SettingsController extends Controller
} }
$count = (int) ($result['count'] ?? 0); $count = (int) ($result['count'] ?? 0);
$domain = trim((string) (($result['meta']['domain'] ?? '') ?: ''));
$csp = (string) (($result['items']['customer_special_pricing'] ?? '') ?: '');
$message = "همگام شد ({$count} کلید دسترسی از سوپرادمین)";
if ($domain !== '') {
$message .= " — دامنه: {$domain}";
}
if ($csp !== '') {
$message .= " — قیمت ویژه: {$csp}";
}
return response()->json([ return response()->json([
'message' => "همگام شد ({$count} کلید دسترسی از سوپرادمین)", 'message' => $message,
'ok' => true, 'ok' => true,
'count' => $count, 'count' => $count,
'items' => $result['items'] ?? [], 'items' => $result['items'] ?? [],
@@ -278,15 +278,28 @@ class SuperAdminProgramSettingsClient
/** /**
* دامنه‌های کاندید برای resolve نسخه در سوپرادمین. * دامنه‌های کاندید برای resolve نسخه در سوپرادمین.
* *
* ترتیب مهم است: اولین پاسخ ۲۰۰ معتبر برنده است.
* Host واقعی درخواست باید قبل از APP_URL و SUPERADMIN_SMS_DOMAIN باشد؛
* وگرنه دامنهٔ SMS/اشتراکی (با فلگ‌های پیش‌فرض false) به‌اشتباه اعمال می‌شود
* و همگام‌سازی «موفق» دیده می‌شود ولی منو روشن نمی‌شود.
*
* @return list<string> * @return list<string>
*/ */
private function domainCandidates(): array private function domainCandidates(): array
{ {
$candidates = []; $candidates = [];
$override = trim((string) config('services.superadmin.sms_domain', '')); try {
if ($override !== '') { $request = request();
$candidates[] = $this->normalizeHost($override); if ($request) {
$forwarded = (string) $request->headers->get('X-Forwarded-Host', '');
if ($forwarded !== '') {
$candidates[] = $this->normalizeHost(explode(',', $forwarded)[0] ?? '');
}
$candidates[] = $this->normalizeHost((string) $request->getHost());
}
} catch (\Throwable) {
// CLI / بدون request
} }
$fromApp = parse_url((string) config('app.url'), PHP_URL_HOST); $fromApp = parse_url((string) config('app.url'), PHP_URL_HOST);
@@ -294,17 +307,9 @@ class SuperAdminProgramSettingsClient
$candidates[] = $this->normalizeHost($fromApp); $candidates[] = $this->normalizeHost($fromApp);
} }
try { $override = trim((string) config('services.superadmin.sms_domain', ''));
$request = request(); if ($override !== '') {
if ($request) { $candidates[] = $this->normalizeHost($override);
$candidates[] = $this->normalizeHost((string) $request->getHost());
$forwarded = (string) $request->headers->get('X-Forwarded-Host', '');
if ($forwarded !== '') {
$candidates[] = $this->normalizeHost(explode(',', $forwarded)[0] ?? '');
}
}
} catch (\Throwable) {
// CLI / بدون request
} }
$out = []; $out = [];
@@ -324,7 +329,7 @@ class SuperAdminProgramSettingsClient
} }
/** /**
* admin.example.com / www.example.com → example.com هم امتحان شود. * admin.example.com / www.example.com / api.example.com → example.com هم امتحان شود.
* *
* @return list<string> * @return list<string>
*/ */
@@ -336,7 +341,7 @@ class SuperAdminProgramSettingsClient
} }
$aliases = [$host]; $aliases = [$host];
foreach (['www.', 'admin.', 'panel.', 'app.'] as $prefix) { foreach (['www.', 'admin.', 'panel.', 'app.', 'api.', 'node.', 'backend.', 'server.'] as $prefix) {
if (str_starts_with($host, $prefix)) { if (str_starts_with($host, $prefix)) {
$bare = substr($host, strlen($prefix)); $bare = substr($host, strlen($prefix));
if ($bare !== '') { if ($bare !== '') {