feat: Add Caddy platform service provider with core functionality and integration

This commit is contained in:
2025-11-26 13:49:11 +00:00
parent c03e0e055c
commit f0bc08c7c2
7 changed files with 465 additions and 136 deletions

View File

@@ -284,13 +284,13 @@ export class OneboxHttpServer {
// Platform Services endpoints
} else if (path === '/api/platform-services' && method === 'GET') {
return await this.handleListPlatformServicesRequest();
} else if (path.match(/^\/api\/platform-services\/(mongodb|minio|redis|postgresql|rabbitmq)$/) && method === 'GET') {
} else if (path.match(/^\/api\/platform-services\/(mongodb|minio|redis|postgresql|rabbitmq|caddy)$/) && method === 'GET') {
const type = path.split('/').pop()! as TPlatformServiceType;
return await this.handleGetPlatformServiceRequest(type);
} else if (path.match(/^\/api\/platform-services\/(mongodb|minio|redis|postgresql|rabbitmq)\/start$/) && method === 'POST') {
} else if (path.match(/^\/api\/platform-services\/(mongodb|minio|redis|postgresql|rabbitmq|caddy)\/start$/) && method === 'POST') {
const type = path.split('/')[3] as TPlatformServiceType;
return await this.handleStartPlatformServiceRequest(type);
} else if (path.match(/^\/api\/platform-services\/(mongodb|minio|redis|postgresql|rabbitmq)\/stop$/) && method === 'POST') {
} else if (path.match(/^\/api\/platform-services\/(mongodb|minio|redis|postgresql|rabbitmq|caddy)\/stop$/) && method === 'POST') {
const type = path.split('/')[3] as TPlatformServiceType;
return await this.handleStopPlatformServiceRequest(type);
} else if (path.match(/^\/api\/services\/[^/]+\/platform-resources$/) && method === 'GET') {
@@ -1144,6 +1144,7 @@ export class OneboxHttpServer {
redis: 6379,
postgresql: 5432,
rabbitmq: 5672,
caddy: 80,
};
return ports[type] || 0;
}
@@ -1260,12 +1261,15 @@ export class OneboxHttpServer {
// Build response with provider info
const result = providers.map((provider) => {
const service = platformServices.find((s) => s.type === provider.type);
// Check if provider has isCore property (like CaddyProvider)
const isCore = 'isCore' in provider && (provider as any).isCore === true;
return {
type: provider.type,
displayName: provider.displayName,
resourceTypes: provider.resourceTypes,
status: service?.status || 'not-deployed',
containerId: service?.containerId,
isCore,
createdAt: service?.createdAt,
updatedAt: service?.updatedAt,
};
@@ -1362,6 +1366,15 @@ export class OneboxHttpServer {
}, 404);
}
// Check if this is a core service that cannot be stopped
const isCore = 'isCore' in provider && (provider as any).isCore === true;
if (isCore) {
return this.jsonResponse({
success: false,
error: `${provider.displayName} is a core service and cannot be stopped`,
}, 400);
}
logger.info(`Stopping platform service: ${type}`);
await this.oneboxRef.platformServices.stopPlatformService(type);