0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-03-10 22:22:45 -05:00

feat(core,schemas): prepare schemas for protected app custom domain (#5247)

This commit is contained in:
wangsijie 2024-01-19 13:17:20 +08:00 committed by GitHub
parent ad0a83ae03
commit ea407f19fa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 29 additions and 0 deletions

View file

@ -20,6 +20,7 @@ export default class SystemContext {
public storageProviderConfig?: StorageProviderData;
public hostnameProviderConfig?: HostnameProviderData;
public protectedAppConfigProviderConfig?: ProtectedAppConfigProviderData;
public protectedAppHostnameProviderConfig?: HostnameProviderData;
async loadProviderConfigs(pool: CommonQueryMethods) {
await Promise.all([
@ -44,6 +45,13 @@ export default class SystemContext {
protectedAppConfigProviderDataGuard
);
})(),
(async () => {
this.protectedAppHostnameProviderConfig = await this.loadConfig(
pool,
CloudflareKey.ProtectedAppHostnameProvider,
hostnameProviderDataGuard
);
})(),
]);
}

View file

@ -1,5 +1,7 @@
import { z } from 'zod';
import { cloudflareDataGuard, domainDnsRecordsGuard, domainStatusGuard } from './custom-domain.js';
export const protectedAppMetadataGuard = z.object({
/* The host of the site */
host: z.string(),
@ -13,6 +15,22 @@ export const protectedAppMetadataGuard = z.object({
path: z.string(),
})
),
/* Custom domain */
customDomains: z
.object({
/* The domain name, e.g app.example.com */
domain: z.string(),
/* The status of the domain in Cloudflare */
status: domainStatusGuard,
/* The error message if any */
error: z.string().nullable(),
/* The DNS records of the domain */
dnsRecords: domainDnsRecordsGuard,
/* The remote Cloudflare data */
cloudflareData: cloudflareDataGuard.nullable(),
})
.array()
.optional(),
});
export type ProtectedAppMetadata = z.infer<typeof protectedAppMetadataGuard>;

View file

@ -168,11 +168,13 @@ export type ProtectedAppConfigProviderData = z.infer<typeof protectedAppConfigPr
export enum CloudflareKey {
HostnameProvider = 'cloudflareHostnameProvider',
ProtectedAppConfigProvider = 'cloudflareProtectedAppConfigProvider',
ProtectedAppHostnameProvider = 'cloudflareProtectedAppHostnameProvider',
}
export type CloudflareType = {
[CloudflareKey.HostnameProvider]: HostnameProviderData;
[CloudflareKey.ProtectedAppConfigProvider]: ProtectedAppConfigProviderData;
[CloudflareKey.ProtectedAppHostnameProvider]: HostnameProviderData;
};
export const cloudflareGuard: Readonly<{
@ -180,6 +182,7 @@ export const cloudflareGuard: Readonly<{
}> = Object.freeze({
[CloudflareKey.HostnameProvider]: hostnameProviderDataGuard,
[CloudflareKey.ProtectedAppConfigProvider]: protectedAppConfigProviderDataGuard,
[CloudflareKey.ProtectedAppHostnameProvider]: hostnameProviderDataGuard,
});
// Summary