Creating a control panel infrastructure
This commit is contained in:
@@ -11,17 +11,11 @@ export class GetUserService {
|
||||
throw new NotFoundException('domain required');
|
||||
}
|
||||
|
||||
const tenant = await this.prisma.tenant.findFirst({
|
||||
where: {
|
||||
isActive: true,
|
||||
OR: [
|
||||
{ domain: host },
|
||||
{ domain: host.replace(/^www\./, '') },
|
||||
{ domain: `www.${host.replace(/^www\./, '')}` },
|
||||
],
|
||||
},
|
||||
const tenants = await this.prisma.tenant.findMany({
|
||||
where: { isActive: true },
|
||||
});
|
||||
|
||||
const tenant = tenants.find((item) => this.matchesHost(item, host));
|
||||
if (!tenant) {
|
||||
throw new NotFoundException('tenant not found for domain');
|
||||
}
|
||||
@@ -31,7 +25,7 @@ export class GetUserService {
|
||||
|
||||
const branding = {
|
||||
id: tenant.id,
|
||||
name: tenant.slug,
|
||||
name: tenant.nameEn || tenant.slug,
|
||||
name_fa: tenant.nameFa,
|
||||
name_en: tenant.nameEn,
|
||||
avatar: tenant.avatarUrl,
|
||||
@@ -43,7 +37,7 @@ export class GetUserService {
|
||||
app_url: tenant.appUrl,
|
||||
admin_url: tenant.adminUrl,
|
||||
product: tenant.product,
|
||||
theme: ui?.app?.theme?.mode === 'light' ? 'dynamicMode' : 'dynamicMode',
|
||||
theme: 'dynamicMode',
|
||||
mode: 'dynamicMode',
|
||||
app_ui_config: tenant.product === 'khanegi' ? ui : undefined,
|
||||
};
|
||||
@@ -54,6 +48,38 @@ export class GetUserService {
|
||||
};
|
||||
}
|
||||
|
||||
private matchesHost(
|
||||
tenant: {
|
||||
domain: string;
|
||||
domains: unknown;
|
||||
},
|
||||
host: string,
|
||||
) {
|
||||
const candidates = new Set<string>();
|
||||
for (const value of [tenant.domain, ...this.readDomains(tenant.domains)]) {
|
||||
const normalized = this.normalizeHost(value);
|
||||
if (!normalized) continue;
|
||||
candidates.add(normalized);
|
||||
candidates.add(normalized.replace(/^www\./, ''));
|
||||
candidates.add(`www.${normalized.replace(/^www\./, '')}`);
|
||||
}
|
||||
return candidates.has(host) || candidates.has(host.replace(/^www\./, ''));
|
||||
}
|
||||
|
||||
private readDomains(raw: unknown): string[] {
|
||||
if (!raw) return [];
|
||||
if (Array.isArray(raw)) return raw.map(String);
|
||||
if (typeof raw === 'string') {
|
||||
try {
|
||||
const parsed = JSON.parse(raw);
|
||||
return Array.isArray(parsed) ? parsed.map(String) : [];
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
private normalizeHost(value: string) {
|
||||
return value
|
||||
.trim()
|
||||
|
||||
Reference in New Issue
Block a user