54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { Get, Post, RestController, GlobalScope } from '@/decorators';
|
|
import { AuthenticatedRequest, LicenseRequest } from '@/requests';
|
|
import { LicenseService } from './license.service';
|
|
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
|
import type { AxiosError } from 'axios';
|
|
|
|
@RestController('/license')
|
|
export class LicenseController {
|
|
constructor(private readonly licenseService: LicenseService) {}
|
|
|
|
@Get('/')
|
|
async getLicenseData() {
|
|
return await this.licenseService.getLicenseData();
|
|
}
|
|
|
|
@Post('/enterprise/request_trial')
|
|
@GlobalScope('license:manage')
|
|
async requestEnterpriseTrial(req: AuthenticatedRequest) {
|
|
try {
|
|
await this.licenseService.requestEnterpriseTrial(req.user);
|
|
} catch (error: unknown) {
|
|
if (error instanceof Error) {
|
|
const errorMsg =
|
|
(error as AxiosError<{ message: string }>).response?.data?.message ?? error.message;
|
|
|
|
throw new BadRequestError(errorMsg);
|
|
} else {
|
|
throw new BadRequestError('Failed to request trial');
|
|
}
|
|
}
|
|
}
|
|
|
|
@Post('/activate')
|
|
@GlobalScope('license:manage')
|
|
async activateLicense(req: LicenseRequest.Activate) {
|
|
const { activationKey } = req.body;
|
|
await this.licenseService.activateLicense(activationKey);
|
|
return await this.getTokenAndData();
|
|
}
|
|
|
|
@Post('/renew')
|
|
@GlobalScope('license:manage')
|
|
async renewLicense() {
|
|
await this.licenseService.renewLicense();
|
|
return await this.getTokenAndData();
|
|
}
|
|
|
|
private async getTokenAndData() {
|
|
const managementToken = this.licenseService.getManagementJwt();
|
|
const data = await this.licenseService.getLicenseData();
|
|
return { ...data, managementToken };
|
|
}
|
|
}
|