diff --git a/index.html b/index.html
index 87c8717..58fbea2 100644
--- a/index.html
+++ b/index.html
@@ -220,6 +220,36 @@
var BOOT_LOGO_KEY = 'BOOT_LOGO_URL'
var BOOT_LOGO_VERSION_KEY = 'BOOT_LOGO_VERSION'
+ var LEGACY_LOGO_HOSTS = {
+ 'nerkh.gold': 1,
+ 'www.nerkh.gold': 1,
+ 'tablo.talasevin.ir': 1,
+ 'ah.aygingold.ir': 1,
+ 'abshode-service.montgit.ir': 1
+ }
+
+ function rewriteLegacyBootLogoUrl(url) {
+ var value = String(url || '').trim()
+ if (!value || !/^https?:\/\//i.test(value)) return value
+ try {
+ var parsed = new URL(value)
+ var host = String(parsed.hostname || '').toLowerCase()
+ if (!LEGACY_LOGO_HOSTS[host]) return value
+ if (!/\/uploads\//i.test(parsed.pathname || '')) return value
+ var base = 'https://adm.montzar.ir'
+ try {
+ var last = localStorage.getItem('CONFIG_Success_URL')
+ if (last) {
+ var sa = new URL(last)
+ var path = sa.pathname.replace(/\/get_user\/?$/i, '').replace(/\/+$/, '')
+ base = path && path !== '/' ? sa.origin + path : sa.origin
+ }
+ } catch (e) {}
+ return base + parsed.pathname
+ } catch (e) {
+ return value
+ }
+ }
function pickAvatarRaw(value) {
if (value == null) return ''
@@ -253,21 +283,21 @@
function resolveAbsoluteLogoUrl(raw) {
if (!raw) return ''
if (/^(https?:\/\/|data:|blob:)/i.test(raw)) {
- return window.location.protocol === 'https:' ? raw.replace(/^http:\/\//i, 'https://') : raw
+ var abs = window.location.protocol === 'https:' ? raw.replace(/^http:\/\//i, 'https://') : raw
+ return rewriteLegacyBootLogoUrl(abs)
}
var path = raw.replace(/^\/+/, '')
return window.location.origin + '/server/' + path
}
function resolveBootLogoUrl(config) {
+ var nested = config && config.user && typeof config.user === 'object' ? config.user : {}
+ var fromUser = rewriteLegacyBootLogoUrl(pickAvatarRaw(nested.avatar))
+ if (fromUser) return resolveAbsoluteLogoUrl(fromUser)
+
var cached = readCachedLogoUrl()
if (cached && /^(data:|blob:)/i.test(cached)) return cached
- if (cached && /^(https?:\/\/)/i.test(cached)) return resolveAbsoluteLogoUrl(cached)
-
- var nested = config && config.user && typeof config.user === 'object' ? config.user : {}
- var root = config && typeof config === 'object' ? config : {}
- var raw = pickAvatarRaw(nested.avatar) || pickAvatarRaw(root.avatar) || cached
- return resolveAbsoluteLogoUrl(raw)
+ return resolveAbsoluteLogoUrl(cached)
}
function persistLogoCache(logoUrl) {
diff --git a/src/config/app-config.ts b/src/config/app-config.ts
index c5a4879..9512899 100644
--- a/src/config/app-config.ts
+++ b/src/config/app-config.ts
@@ -1,4 +1,5 @@
import type { AppConfig } from './types'
+import { rewriteLegacyUploadUrl } from './rewrite-legacy-upload-url'
type RawAppConfig = AppConfig & {
user?: Record
@@ -32,6 +33,10 @@ function normalizeUserConfig(user?: Record) {
}
}
+ if (typeof normalized.avatar === 'string') {
+ normalized.avatar = rewriteLegacyUploadUrl(normalized.avatar)
+ }
+
return normalized
}
@@ -40,14 +45,17 @@ export function normalizeAppConfig(config: RawAppConfig): RawAppConfig {
return {}
}
- if (!config.user || typeof config.user !== 'object') {
- return config
+ const next: RawAppConfig = { ...config }
+
+ if (typeof next.avatar === 'string') {
+ next.avatar = rewriteLegacyUploadUrl(next.avatar)
}
- return {
- ...config,
- user: normalizeUserConfig(config.user),
+ if (next.user && typeof next.user === 'object') {
+ next.user = normalizeUserConfig(next.user)
}
+
+ return next
}
let appConfig: RawAppConfig | null = null
diff --git a/src/config/apply-config.ts b/src/config/apply-config.ts
index 459472f..dc87b04 100644
--- a/src/config/apply-config.ts
+++ b/src/config/apply-config.ts
@@ -1,4 +1,5 @@
import { getConfig } from '@/config/app-config'
+import { rewriteLegacyUploadUrl } from '@/config/rewrite-legacy-upload-url'
import { isPwaManifestReady } from '@/modules/pwa/manifest'
export function applyAppConfig() {
@@ -14,7 +15,7 @@ function setTitle() {
}
function getLogoUrl() {
- return getConfig('avatar') || '/favicon.png'
+ return rewriteLegacyUploadUrl(getConfig('avatar') || '/favicon.png')
}
function setFavicon() {
diff --git a/src/config/config-cache.ts b/src/config/config-cache.ts
index 9ade18c..720c215 100644
--- a/src/config/config-cache.ts
+++ b/src/config/config-cache.ts
@@ -1,4 +1,5 @@
import type { AppConfig } from '@/config/types'
+import { rewriteLegacyUploadUrl } from '@/config/rewrite-legacy-upload-url'
import { resetVersionCheckCache } from '@/config/load-version'
import { clearCachedPwaManifest } from '@/modules/pwa/manifest-cache'
import { tokenName } from '@/themeConfig'
@@ -65,13 +66,12 @@ export function readCachedAppConfig(): AppConfig | null {
function persistBootLogo(config: AppConfig) {
try {
const nested = (config as {user?: Record})?.user
- const root = (config || {}) as Record
- const avatar = String(nested?.avatar || root.avatar || '').trim()
+ const avatar = rewriteLegacyUploadUrl(String(nested?.avatar || '').trim())
const version = String(localStorage.getItem(VERSION_STORAGE_KEY) || '').trim()
const cachedUrl = localStorage.getItem('BOOT_LOGO_URL') || ''
const cachedVer = localStorage.getItem('BOOT_LOGO_VERSION') || ''
const cacheFresh = !!(cachedUrl && version && cachedVer && version === cachedVer)
- if (!cacheFresh && avatar) localStorage.setItem('BOOT_LOGO_URL', avatar)
+ if (avatar && (!cacheFresh || cachedUrl !== avatar)) localStorage.setItem('BOOT_LOGO_URL', avatar)
if (version) localStorage.setItem('BOOT_LOGO_VERSION', version)
const apply = (window as Window & {__APPLY_BOOT_BRANDING__?: (c: unknown) => void})
.__APPLY_BOOT_BRANDING__
diff --git a/src/config/rewrite-legacy-upload-url.ts b/src/config/rewrite-legacy-upload-url.ts
new file mode 100644
index 0000000..aa0736f
--- /dev/null
+++ b/src/config/rewrite-legacy-upload-url.ts
@@ -0,0 +1,38 @@
+/** هاستهای رجیستری قدیمی که دیگر نباید برای لوگو استفاده شوند */
+const LEGACY_UPLOAD_HOSTS = new Set([
+ 'nerkh.gold',
+ 'www.nerkh.gold',
+ 'tablo.talasevin.ir',
+ 'ah.aygingold.ir',
+ 'abshode-service.montgit.ir',
+])
+
+function resolveSaBase(): string {
+ try {
+ const last = localStorage.getItem('CONFIG_Success_URL')
+ if (last) {
+ const parsed = new URL(last)
+ const path = parsed.pathname.replace(/\/get_user\/?$/i, '').replace(/\/+$/, '')
+ return path && path !== '/' ? `${parsed.origin}${path}` : parsed.origin
+ }
+ } catch {
+ /* ignore */
+ }
+ return 'https://adm.montzar.ir'
+}
+
+/** https://nerkh.gold/uploads/... → https://adm..../uploads/... */
+export function rewriteLegacyUploadUrl(raw: unknown): string {
+ const value = String(raw || '').trim()
+ if (!value || !/^https?:\/\//i.test(value)) return value
+
+ try {
+ const parsed = new URL(value)
+ const host = parsed.hostname.toLowerCase()
+ if (!LEGACY_UPLOAD_HOSTS.has(host)) return value
+ if (!/\/uploads\//i.test(parsed.pathname)) return value
+ return `${resolveSaBase()}${parsed.pathname}`
+ } catch {
+ return value
+ }
+}
diff --git a/src/utils/config.ts b/src/utils/config.ts
index e0c7834..cedc094 100644
--- a/src/utils/config.ts
+++ b/src/utils/config.ts
@@ -1,10 +1,14 @@
+import { rewriteLegacyUploadUrl } from '@/config/rewrite-legacy-upload-url'
+
export function getConfigApp(key: string) {
const config = window.__APP_CONFIG__ ? window.__APP_CONFIG__.user : {}
- if (config) {
- return config[key]
+ if (!config) return null
+ const value = config[key]
+ if (key === 'avatar') {
+ return rewriteLegacyUploadUrl(value) || value || null
}
- return null
+ return value ?? null
}
export function isBoursecuProject() {