The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/apps/meteor/app/api/server/v1/cloud.ts

124 lines
3.1 KiB

import { check } from 'meteor/check';
import { API } from '../api';
import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission';
import { hasRoleAsync } from '../../../authorization/server/functions/hasRole';
import { saveRegistrationData } from '../../../cloud/server/functions/saveRegistrationData';
import { retrieveRegistrationStatus } from '../../../cloud/server/functions/retrieveRegistrationStatus';
import { startRegisterWorkspaceSetupWizard } from '../../../cloud/server/functions/startRegisterWorkspaceSetupWizard';
import { registerPreIntentWorkspaceWizard } from '../../../cloud/server/functions/registerPreIntentWorkspaceWizard';
import { getConfirmationPoll } from '../../../cloud/server/functions/getConfirmationPoll';
API.v1.addRoute(
'cloud.manualRegister',
{ authRequired: true },
{
async post() {
check(this.bodyParams, {
cloudBlob: String,
});
if (!(await hasPermissionAsync(this.userId, 'register-on-cloud'))) {
return API.v1.unauthorized();
}
const registrationInfo = await retrieveRegistrationStatus();
if (registrationInfo.workspaceRegistered) {
return API.v1.failure('Workspace is already registered');
}
const settingsData = JSON.parse(Buffer.from(this.bodyParams.cloudBlob, 'base64').toString());
await saveRegistrationData(settingsData);
return API.v1.success();
},
},
);
API.v1.addRoute(
'cloud.createRegistrationIntent',
{ authRequired: true },
{
async post() {
check(this.bodyParams, {
resend: Boolean,
email: String,
});
if (!(await hasPermissionAsync(this.userId, 'manage-cloud'))) {
return API.v1.unauthorized();
}
const intentData = await startRegisterWorkspaceSetupWizard(this.bodyParams.resend, this.bodyParams.email);
if (intentData) {
return API.v1.success({ intentData });
}
return API.v1.failure('Invalid query');
},
},
);
API.v1.addRoute(
'cloud.registerPreIntent',
{ authRequired: true },
{
async post() {
if (!(await hasPermissionAsync(this.userId, 'manage-cloud'))) {
return API.v1.unauthorized();
}
return API.v1.success({ offline: !(await registerPreIntentWorkspaceWizard()) });
},
},
);
API.v1.addRoute(
'cloud.confirmationPoll',
{ authRequired: true },
{
async get() {
const { deviceCode } = this.queryParams;
check(this.queryParams, {
deviceCode: String,
});
if (!(await hasPermissionAsync(this.userId, 'manage-cloud'))) {
return API.v1.unauthorized();
}
if (!deviceCode) {
return API.v1.failure('Invalid query');
}
const pollData = await getConfirmationPoll(deviceCode);
if (pollData) {
if ('successful' in pollData && pollData.successful) {
await saveRegistrationData(pollData.payload);
}
return API.v1.success({ pollData });
}
return API.v1.failure('Invalid query');
},
},
);
API.v1.addRoute(
'cloud.registrationStatus',
{ authRequired: true },
{
async get() {
if (!(await hasRoleAsync(this.userId, 'admin'))) {
return API.v1.unauthorized();
}
const registrationStatus = await retrieveRegistrationStatus();
return API.v1.success({ registrationStatus });
},
},
);