import * as plugins from '../plugins.js'; import { Cloudly } from '../classes.cloudly.js'; /** * in charge of talking to coreflow services on clusters * coreflow runs on a server when ServerManager is done. */ export class CloudlyCoreflowManager { public cloudlyRef: Cloudly; public typedRouter = new plugins.typedrequest.TypedRouter(); constructor(cloudlyRefArg: Cloudly) { this.cloudlyRef = cloudlyRefArg; this.cloudlyRef.typedrouter.addTypedRouter(this.typedRouter); this.typedRouter.addTypedHandler( new plugins.typedrequest.TypedHandler('getIdentityByJumpCode', async (requestData) => { const clusterConfig = await this.cloudlyRef.clusterManager.getClusterConfigBy_JumpCode( requestData.jumpCode ); if (!clusterConfig) { throw new plugins.typedrequest.TypedResponseError('The supplied jumpCode is not valid.'); } return { clusterIdentifier: { clusterId: clusterConfig.id, clusterName: clusterConfig.data.name, jwt: await this.cloudlyRef.authManager.smartjwtInstance.createJWT({ status: 'loggedIn', userId: 'cluster:' + clusterConfig.id, // TODO: create real users for clusters }) }, }; }) ); // lets enable the getting of cluster configs this.typedRouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'getClusterConfig', async (dataArg) => { const clusterIdentifier = dataArg.clusterIdentifier; console.log('trying to get clusterConfigSet'); console.log(dataArg); const clusterConfigSet = await this.cloudlyRef.clusterManager.getClusterConfigBy_ClusterIdentifier( clusterIdentifier ); console.log('got cluster config and sending it back to coreflow'); return { configData: await clusterConfigSet.createSavableObject(), deploymentDirectives: [], }; } ) ); // lets enable getting of certificates this.typedRouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'getSslCertificate', async (dataArg) => { console.log(`got request for certificate ${dataArg.requiredCertName}`); const cert = await this.cloudlyRef.letsencryptConnector.getCertificateForDomain( dataArg.requiredCertName ); console.log(`got certificate ready for reponse ${dataArg.requiredCertName}`); return { certificate: await cert.createSavableObject(), }; } ) ); } }