refactor(core): Rename RequireGlobalScope to GlobalScope (no-changelog) (#8760)

This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™
2024-02-28 14:40:02 +01:00
committed by GitHub
parent 246bfb9ad4
commit 2811f77798
15 changed files with 70 additions and 77 deletions

View File

@@ -1,4 +1,4 @@
import { Authorized, Get, Post, RestController, RequireGlobalScope } from '@/decorators'; import { Authorized, Get, Post, RestController, GlobalScope } from '@/decorators';
import { ExternalSecretsRequest } from '@/requests'; import { ExternalSecretsRequest } from '@/requests';
import { Response } from 'express'; import { Response } from 'express';
import { ExternalSecretsService } from './ExternalSecrets.service.ee'; import { ExternalSecretsService } from './ExternalSecrets.service.ee';
@@ -11,13 +11,13 @@ export class ExternalSecretsController {
constructor(private readonly secretsService: ExternalSecretsService) {} constructor(private readonly secretsService: ExternalSecretsService) {}
@Get('/providers') @Get('/providers')
@RequireGlobalScope('externalSecretsProvider:list') @GlobalScope('externalSecretsProvider:list')
async getProviders() { async getProviders() {
return await this.secretsService.getProviders(); return await this.secretsService.getProviders();
} }
@Get('/providers/:provider') @Get('/providers/:provider')
@RequireGlobalScope('externalSecretsProvider:read') @GlobalScope('externalSecretsProvider:read')
async getProvider(req: ExternalSecretsRequest.GetProvider) { async getProvider(req: ExternalSecretsRequest.GetProvider) {
const providerName = req.params.provider; const providerName = req.params.provider;
try { try {
@@ -31,7 +31,7 @@ export class ExternalSecretsController {
} }
@Post('/providers/:provider/test') @Post('/providers/:provider/test')
@RequireGlobalScope('externalSecretsProvider:read') @GlobalScope('externalSecretsProvider:read')
async testProviderSettings(req: ExternalSecretsRequest.TestProviderSettings, res: Response) { async testProviderSettings(req: ExternalSecretsRequest.TestProviderSettings, res: Response) {
const providerName = req.params.provider; const providerName = req.params.provider;
try { try {
@@ -51,7 +51,7 @@ export class ExternalSecretsController {
} }
@Post('/providers/:provider') @Post('/providers/:provider')
@RequireGlobalScope('externalSecretsProvider:create') @GlobalScope('externalSecretsProvider:create')
async setProviderSettings(req: ExternalSecretsRequest.SetProviderSettings) { async setProviderSettings(req: ExternalSecretsRequest.SetProviderSettings) {
const providerName = req.params.provider; const providerName = req.params.provider;
try { try {
@@ -66,7 +66,7 @@ export class ExternalSecretsController {
} }
@Post('/providers/:provider/connect') @Post('/providers/:provider/connect')
@RequireGlobalScope('externalSecretsProvider:update') @GlobalScope('externalSecretsProvider:update')
async setProviderConnected(req: ExternalSecretsRequest.SetProviderConnected) { async setProviderConnected(req: ExternalSecretsRequest.SetProviderConnected) {
const providerName = req.params.provider; const providerName = req.params.provider;
try { try {
@@ -81,7 +81,7 @@ export class ExternalSecretsController {
} }
@Post('/providers/:provider/update') @Post('/providers/:provider/update')
@RequireGlobalScope('externalSecretsProvider:sync') @GlobalScope('externalSecretsProvider:sync')
async updateProvider(req: ExternalSecretsRequest.UpdateProvider, res: Response) { async updateProvider(req: ExternalSecretsRequest.UpdateProvider, res: Response) {
const providerName = req.params.provider; const providerName = req.params.provider;
try { try {
@@ -101,7 +101,7 @@ export class ExternalSecretsController {
} }
@Get('/secrets') @Get('/secrets')
@RequireGlobalScope('externalSecret:list') @GlobalScope('externalSecret:list')
getSecretNames() { getSecretNames() {
return this.secretsService.getAllSecrets(); return this.secretsService.getAllSecrets();
} }

View File

@@ -1,5 +1,5 @@
import pick from 'lodash/pick'; import pick from 'lodash/pick';
import { Authorized, Get, Post, Put, RestController, RequireGlobalScope } from '@/decorators'; import { Authorized, Get, Post, Put, RestController, GlobalScope } from '@/decorators';
import { InternalHooks } from '@/InternalHooks'; import { InternalHooks } from '@/InternalHooks';
import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { BadRequestError } from '@/errors/response-errors/bad-request.error';
@@ -17,13 +17,13 @@ export class LdapController {
) {} ) {}
@Get('/config') @Get('/config')
@RequireGlobalScope('ldap:manage') @GlobalScope('ldap:manage')
async getConfig() { async getConfig() {
return await this.ldapService.loadConfig(); return await this.ldapService.loadConfig();
} }
@Post('/test-connection') @Post('/test-connection')
@RequireGlobalScope('ldap:manage') @GlobalScope('ldap:manage')
async testConnection() { async testConnection() {
try { try {
await this.ldapService.testConnection(); await this.ldapService.testConnection();
@@ -33,7 +33,7 @@ export class LdapController {
} }
@Put('/config') @Put('/config')
@RequireGlobalScope('ldap:manage') @GlobalScope('ldap:manage')
async updateConfig(req: LdapConfiguration.Update) { async updateConfig(req: LdapConfiguration.Update) {
try { try {
await this.ldapService.updateConfig(req.body); await this.ldapService.updateConfig(req.body);
@@ -52,14 +52,14 @@ export class LdapController {
} }
@Get('/sync') @Get('/sync')
@RequireGlobalScope('ldap:sync') @GlobalScope('ldap:sync')
async getLdapSync(req: LdapConfiguration.GetSync) { async getLdapSync(req: LdapConfiguration.GetSync) {
const { page = '0', perPage = '20' } = req.query; const { page = '0', perPage = '20' } = req.query;
return await getLdapSynchronizations(parseInt(page, 10), parseInt(perPage, 10)); return await getLdapSynchronizations(parseInt(page, 10), parseInt(perPage, 10));
} }
@Post('/sync') @Post('/sync')
@RequireGlobalScope('ldap:sync') @GlobalScope('ldap:sync')
async syncLdap(req: LdapConfiguration.Sync) { async syncLdap(req: LdapConfiguration.Sync) {
try { try {
await this.ldapService.runSync(req.body.type); await this.ldapService.runSync(req.body.type);

View File

@@ -13,7 +13,7 @@ import {
Patch, Patch,
Post, Post,
RestController, RestController,
RequireGlobalScope, GlobalScope,
} from '@/decorators'; } from '@/decorators';
import { NodeRequest } from '@/requests'; import { NodeRequest } from '@/requests';
import type { InstalledPackages } from '@db/entities/InstalledPackages'; import type { InstalledPackages } from '@db/entities/InstalledPackages';
@@ -62,7 +62,7 @@ export class CommunityPackagesController {
} }
@Post('/') @Post('/')
@RequireGlobalScope('communityPackage:install') @GlobalScope('communityPackage:install')
async installPackage(req: NodeRequest.Post) { async installPackage(req: NodeRequest.Post) {
const { name } = req.body; const { name } = req.body;
@@ -159,7 +159,7 @@ export class CommunityPackagesController {
} }
@Get('/') @Get('/')
@RequireGlobalScope('communityPackage:list') @GlobalScope('communityPackage:list')
async getInstalledPackages() { async getInstalledPackages() {
const installedPackages = await this.communityPackagesService.getAllInstalledPackages(); const installedPackages = await this.communityPackagesService.getAllInstalledPackages();
@@ -194,7 +194,7 @@ export class CommunityPackagesController {
} }
@Delete('/') @Delete('/')
@RequireGlobalScope('communityPackage:uninstall') @GlobalScope('communityPackage:uninstall')
async uninstallPackage(req: NodeRequest.Delete) { async uninstallPackage(req: NodeRequest.Delete) {
const { name } = req.query; const { name } = req.query;
@@ -246,7 +246,7 @@ export class CommunityPackagesController {
} }
@Patch('/') @Patch('/')
@RequireGlobalScope('communityPackage:update') @GlobalScope('communityPackage:update')
async updatePackage(req: NodeRequest.Update) { async updatePackage(req: NodeRequest.Update) {
const { name } = req.body; const { name } = req.body;

View File

@@ -3,7 +3,7 @@ import validator from 'validator';
import { AuthService } from '@/auth/auth.service'; import { AuthService } from '@/auth/auth.service';
import config from '@/config'; import config from '@/config';
import { Authorized, NoAuthRequired, Post, RequireGlobalScope, RestController } from '@/decorators'; import { Authorized, NoAuthRequired, Post, GlobalScope, RestController } from '@/decorators';
import { RESPONSE_ERROR_MESSAGES } from '@/constants'; import { RESPONSE_ERROR_MESSAGES } from '@/constants';
import { UserRequest } from '@/requests'; import { UserRequest } from '@/requests';
import { License } from '@/License'; import { License } from '@/License';
@@ -39,7 +39,7 @@ export class InvitationController {
*/ */
@Post('/') @Post('/')
@RequireGlobalScope('user:create') @GlobalScope('user:create')
async inviteUser(req: UserRequest.Invite) { async inviteUser(req: UserRequest.Invite) {
const isWithinUsersLimit = this.license.isWithinUsersLimit(); const isWithinUsersLimit = this.license.isWithinUsersLimit();

View File

@@ -1,4 +1,4 @@
import { Authorized, Post, RestController, RequireGlobalScope } from '@/decorators'; import { Authorized, Post, RestController, GlobalScope } from '@/decorators';
import { OrchestrationRequest } from '@/requests'; import { OrchestrationRequest } from '@/requests';
import { OrchestrationService } from '@/services/orchestration.service'; import { OrchestrationService } from '@/services/orchestration.service';
import { License } from '@/License'; import { License } from '@/License';
@@ -15,7 +15,7 @@ export class OrchestrationController {
* These endpoints do not return anything, they just trigger the messsage to * These endpoints do not return anything, they just trigger the messsage to
* the workers to respond on Redis with their status. * the workers to respond on Redis with their status.
*/ */
@RequireGlobalScope('orchestration:read') @GlobalScope('orchestration:read')
@Post('/worker/status/:id') @Post('/worker/status/:id')
async getWorkersStatus(req: OrchestrationRequest.Get) { async getWorkersStatus(req: OrchestrationRequest.Get) {
if (!this.licenseService.isWorkerViewLicensed()) return; if (!this.licenseService.isWorkerViewLicensed()) return;
@@ -23,14 +23,14 @@ export class OrchestrationController {
return await this.orchestrationService.getWorkerStatus(id); return await this.orchestrationService.getWorkerStatus(id);
} }
@RequireGlobalScope('orchestration:read') @GlobalScope('orchestration:read')
@Post('/worker/status') @Post('/worker/status')
async getWorkersStatusAll() { async getWorkersStatusAll() {
if (!this.licenseService.isWorkerViewLicensed()) return; if (!this.licenseService.isWorkerViewLicensed()) return;
return await this.orchestrationService.getWorkerStatus(); return await this.orchestrationService.getWorkerStatus();
} }
@RequireGlobalScope('orchestration:list') @GlobalScope('orchestration:list')
@Post('/worker/ids') @Post('/worker/ids')
async getWorkerIdsAll() { async getWorkerIdsAll() {
if (!this.licenseService.isWorkerViewLicensed()) return; if (!this.licenseService.isWorkerViewLicensed()) return;

View File

@@ -8,7 +8,7 @@ import {
Patch, Patch,
Post, Post,
RestController, RestController,
RequireGlobalScope, GlobalScope,
} from '@/decorators'; } from '@/decorators';
import { TagService } from '@/services/tag.service'; import { TagService } from '@/services/tag.service';
import { TagsRequest } from '@/requests'; import { TagsRequest } from '@/requests';
@@ -30,13 +30,13 @@ export class TagsController {
} }
@Get('/') @Get('/')
@RequireGlobalScope('tag:list') @GlobalScope('tag:list')
async getAll(req: TagsRequest.GetAll) { async getAll(req: TagsRequest.GetAll) {
return await this.tagService.getAll({ withUsageCount: req.query.withUsageCount === 'true' }); return await this.tagService.getAll({ withUsageCount: req.query.withUsageCount === 'true' });
} }
@Post('/') @Post('/')
@RequireGlobalScope('tag:create') @GlobalScope('tag:create')
async createTag(req: TagsRequest.Create) { async createTag(req: TagsRequest.Create) {
const tag = this.tagService.toEntity({ name: req.body.name }); const tag = this.tagService.toEntity({ name: req.body.name });
@@ -44,7 +44,7 @@ export class TagsController {
} }
@Patch('/:id(\\w+)') @Patch('/:id(\\w+)')
@RequireGlobalScope('tag:update') @GlobalScope('tag:update')
async updateTag(req: TagsRequest.Update) { async updateTag(req: TagsRequest.Update) {
const newTag = this.tagService.toEntity({ id: req.params.id, name: req.body.name.trim() }); const newTag = this.tagService.toEntity({ id: req.params.id, name: req.body.name.trim() });
@@ -52,7 +52,7 @@ export class TagsController {
} }
@Delete('/:id(\\w+)') @Delete('/:id(\\w+)')
@RequireGlobalScope('tag:delete') @GlobalScope('tag:delete')
async deleteTag(req: TagsRequest.Delete) { async deleteTag(req: TagsRequest.Delete) {
const { id } = req.params; const { id } = req.params;

View File

@@ -5,7 +5,7 @@ import { User } from '@db/entities/User';
import { SharedCredentials } from '@db/entities/SharedCredentials'; import { SharedCredentials } from '@db/entities/SharedCredentials';
import { SharedWorkflow } from '@db/entities/SharedWorkflow'; import { SharedWorkflow } from '@db/entities/SharedWorkflow';
import { import {
RequireGlobalScope, GlobalScope,
Authorized, Authorized,
Delete, Delete,
Get, Get,
@@ -89,7 +89,7 @@ export class UsersController {
} }
@Get('/', { middlewares: listQueryMiddleware }) @Get('/', { middlewares: listQueryMiddleware })
@RequireGlobalScope('user:list') @GlobalScope('user:list')
async listUsers(req: ListQuery.Request) { async listUsers(req: ListQuery.Request) {
const { listQueryOptions } = req; const { listQueryOptions } = req;
@@ -110,7 +110,7 @@ export class UsersController {
} }
@Get('/:id/password-reset-link') @Get('/:id/password-reset-link')
@RequireGlobalScope('user:resetPassword') @GlobalScope('user:resetPassword')
async getUserPasswordResetLink(req: UserRequest.PasswordResetLink) { async getUserPasswordResetLink(req: UserRequest.PasswordResetLink) {
const user = await this.userRepository.findOneOrFail({ const user = await this.userRepository.findOneOrFail({
where: { id: req.params.id }, where: { id: req.params.id },
@@ -124,7 +124,7 @@ export class UsersController {
} }
@Patch('/:id/settings') @Patch('/:id/settings')
@RequireGlobalScope('user:update') @GlobalScope('user:update')
async updateUserSettings(req: UserRequest.UserSettingsUpdate) { async updateUserSettings(req: UserRequest.UserSettingsUpdate) {
const payload = plainToInstance(UserSettingsUpdatePayload, req.body); const payload = plainToInstance(UserSettingsUpdatePayload, req.body);
@@ -144,7 +144,7 @@ export class UsersController {
* Delete a user. Optionally, designate a transferee for their workflows and credentials. * Delete a user. Optionally, designate a transferee for their workflows and credentials.
*/ */
@Delete('/:id') @Delete('/:id')
@RequireGlobalScope('user:delete') @GlobalScope('user:delete')
async deleteUser(req: UserRequest.Delete) { async deleteUser(req: UserRequest.Delete) {
const { id: idToDelete } = req.params; const { id: idToDelete } = req.params;
@@ -296,7 +296,7 @@ export class UsersController {
} }
@Patch('/:id/role') @Patch('/:id/role')
@RequireGlobalScope('user:changeRole') @GlobalScope('user:changeRole')
@Licensed('feat:advancedPermissions') @Licensed('feat:advancedPermissions')
async changeGlobalRole(req: UserRequest.ChangeRole) { async changeGlobalRole(req: UserRequest.ChangeRole) {
const { NO_ADMIN_ON_OWNER, NO_USER, NO_OWNER_ON_OWNER } = const { NO_ADMIN_ON_OWNER, NO_USER, NO_OWNER_ON_OWNER } =

View File

@@ -2,7 +2,7 @@ import type { Scope } from '@n8n/permissions';
import type { ScopeMetadata } from './types'; import type { ScopeMetadata } from './types';
import { CONTROLLER_REQUIRED_SCOPES } from './constants'; import { CONTROLLER_REQUIRED_SCOPES } from './constants';
export const RequireGlobalScope = (scope: Scope | Scope[]) => { export const GlobalScope = (scope: Scope | Scope[]) => {
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/ban-types
return (target: Function | object, handlerName?: string) => { return (target: Function | object, handlerName?: string) => {
const controllerClass = handlerName ? target.constructor : target; const controllerClass = handlerName ? target.constructor : target;

View File

@@ -4,4 +4,4 @@ export { Get, Post, Put, Patch, Delete } from './Route';
export { Middleware } from './Middleware'; export { Middleware } from './Middleware';
export { registerController } from './registerController'; export { registerController } from './registerController';
export { Licensed } from './Licensed'; export { Licensed } from './Licensed';
export { RequireGlobalScope } from './Scopes'; export { GlobalScope } from './Scopes';

View File

@@ -1,6 +1,6 @@
import type { PullResult } from 'simple-git'; import type { PullResult } from 'simple-git';
import express from 'express'; import express from 'express';
import { Authorized, Get, Post, Patch, RestController, RequireGlobalScope } from '@/decorators'; import { Authorized, Get, Post, Patch, RestController, GlobalScope } from '@/decorators';
import { import {
sourceControlLicensedMiddleware, sourceControlLicensedMiddleware,
sourceControlLicensedAndEnabledMiddleware, sourceControlLicensedAndEnabledMiddleware,
@@ -34,7 +34,7 @@ export class SourceControlController {
} }
@Post('/preferences', { middlewares: [sourceControlLicensedMiddleware] }) @Post('/preferences', { middlewares: [sourceControlLicensedMiddleware] })
@RequireGlobalScope('sourceControl:manage') @GlobalScope('sourceControl:manage')
async setPreferences(req: SourceControlRequest.UpdatePreferences) { async setPreferences(req: SourceControlRequest.UpdatePreferences) {
if ( if (
req.body.branchReadOnly === undefined && req.body.branchReadOnly === undefined &&
@@ -98,7 +98,7 @@ export class SourceControlController {
} }
@Patch('/preferences', { middlewares: [sourceControlLicensedMiddleware] }) @Patch('/preferences', { middlewares: [sourceControlLicensedMiddleware] })
@RequireGlobalScope('sourceControl:manage') @GlobalScope('sourceControl:manage')
async updatePreferences(req: SourceControlRequest.UpdatePreferences) { async updatePreferences(req: SourceControlRequest.UpdatePreferences) {
try { try {
const sanitizedPreferences: Partial<SourceControlPreferences> = { const sanitizedPreferences: Partial<SourceControlPreferences> = {
@@ -142,7 +142,7 @@ export class SourceControlController {
} }
@Post('/disconnect', { middlewares: [sourceControlLicensedMiddleware] }) @Post('/disconnect', { middlewares: [sourceControlLicensedMiddleware] })
@RequireGlobalScope('sourceControl:manage') @GlobalScope('sourceControl:manage')
async disconnect(req: SourceControlRequest.Disconnect) { async disconnect(req: SourceControlRequest.Disconnect) {
try { try {
return await this.sourceControlService.disconnect(req.body); return await this.sourceControlService.disconnect(req.body);
@@ -162,7 +162,7 @@ export class SourceControlController {
} }
@Post('/push-workfolder', { middlewares: [sourceControlLicensedAndEnabledMiddleware] }) @Post('/push-workfolder', { middlewares: [sourceControlLicensedAndEnabledMiddleware] })
@RequireGlobalScope('sourceControl:push') @GlobalScope('sourceControl:push')
async pushWorkfolder( async pushWorkfolder(
req: SourceControlRequest.PushWorkFolder, req: SourceControlRequest.PushWorkFolder,
res: express.Response, res: express.Response,
@@ -184,7 +184,7 @@ export class SourceControlController {
} }
@Post('/pull-workfolder', { middlewares: [sourceControlLicensedAndEnabledMiddleware] }) @Post('/pull-workfolder', { middlewares: [sourceControlLicensedAndEnabledMiddleware] })
@RequireGlobalScope('sourceControl:pull') @GlobalScope('sourceControl:pull')
async pullWorkfolder( async pullWorkfolder(
req: SourceControlRequest.PullWorkFolder, req: SourceControlRequest.PullWorkFolder,
res: express.Response, res: express.Response,
@@ -203,7 +203,7 @@ export class SourceControlController {
} }
@Get('/reset-workfolder', { middlewares: [sourceControlLicensedAndEnabledMiddleware] }) @Get('/reset-workfolder', { middlewares: [sourceControlLicensedAndEnabledMiddleware] })
@RequireGlobalScope('sourceControl:manage') @GlobalScope('sourceControl:manage')
async resetWorkfolder(): Promise<ImportResult | undefined> { async resetWorkfolder(): Promise<ImportResult | undefined> {
try { try {
return await this.sourceControlService.resetWorkfolder(); return await this.sourceControlService.resetWorkfolder();
@@ -236,7 +236,7 @@ export class SourceControlController {
} }
@Post('/generate-key-pair', { middlewares: [sourceControlLicensedMiddleware] }) @Post('/generate-key-pair', { middlewares: [sourceControlLicensedMiddleware] })
@RequireGlobalScope('sourceControl:manage') @GlobalScope('sourceControl:manage')
async generateKeyPair( async generateKeyPair(
req: SourceControlRequest.GenerateKeyPair, req: SourceControlRequest.GenerateKeyPair,
): Promise<SourceControlPreferences> { ): Promise<SourceControlPreferences> {

View File

@@ -6,7 +6,7 @@ import {
Licensed, Licensed,
Patch, Patch,
Post, Post,
RequireGlobalScope, GlobalScope,
RestController, RestController,
} from '@/decorators'; } from '@/decorators';
import { VariablesService } from './variables.service.ee'; import { VariablesService } from './variables.service.ee';
@@ -21,14 +21,14 @@ export class VariablesController {
constructor(private readonly variablesService: VariablesService) {} constructor(private readonly variablesService: VariablesService) {}
@Get('/') @Get('/')
@RequireGlobalScope('variable:list') @GlobalScope('variable:list')
async getVariables() { async getVariables() {
return await this.variablesService.getAllCached(); return await this.variablesService.getAllCached();
} }
@Post('/') @Post('/')
@Licensed('feat:variables') @Licensed('feat:variables')
@RequireGlobalScope('variable:create') @GlobalScope('variable:create')
async createVariable(req: VariablesRequest.Create) { async createVariable(req: VariablesRequest.Create) {
const variable = req.body; const variable = req.body;
delete variable.id; delete variable.id;
@@ -45,7 +45,7 @@ export class VariablesController {
} }
@Get('/:id') @Get('/:id')
@RequireGlobalScope('variable:read') @GlobalScope('variable:read')
async getVariable(req: VariablesRequest.Get) { async getVariable(req: VariablesRequest.Get) {
const id = req.params.id; const id = req.params.id;
const variable = await this.variablesService.getCached(id); const variable = await this.variablesService.getCached(id);
@@ -57,7 +57,7 @@ export class VariablesController {
@Patch('/:id') @Patch('/:id')
@Licensed('feat:variables') @Licensed('feat:variables')
@RequireGlobalScope('variable:update') @GlobalScope('variable:update')
async updateVariable(req: VariablesRequest.Update) { async updateVariable(req: VariablesRequest.Update) {
const id = req.params.id; const id = req.params.id;
const variable = req.body; const variable = req.body;
@@ -75,7 +75,7 @@ export class VariablesController {
} }
@Delete('/:id(\\w+)') @Delete('/:id(\\w+)')
@RequireGlobalScope('variable:delete') @GlobalScope('variable:delete')
async deleteVariable(req: VariablesRequest.Delete) { async deleteVariable(req: VariablesRequest.Delete) {
const id = req.params.id; const id = req.params.id;
await this.variablesService.delete(id); await this.variablesService.delete(id);

View File

@@ -5,7 +5,7 @@ import type {
} from 'n8n-workflow'; } from 'n8n-workflow';
import { MessageEventBusDestinationTypeNames } from 'n8n-workflow'; import { MessageEventBusDestinationTypeNames } from 'n8n-workflow';
import { RestController, Get, Post, Delete, Authorized, RequireGlobalScope } from '@/decorators'; import { RestController, Get, Post, Delete, Authorized, GlobalScope } from '@/decorators';
import { AuthenticatedRequest } from '@/requests'; import { AuthenticatedRequest } from '@/requests';
import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { BadRequestError } from '@/errors/response-errors/bad-request.error';
@@ -62,7 +62,7 @@ export class EventBusControllerEE {
// ---------------------------------------- // ----------------------------------------
@Get('/destination', { middlewares: [logStreamingLicensedMiddleware] }) @Get('/destination', { middlewares: [logStreamingLicensedMiddleware] })
@RequireGlobalScope('eventBusDestination:list') @GlobalScope('eventBusDestination:list')
async getDestination(req: express.Request): Promise<MessageEventBusDestinationOptions[]> { async getDestination(req: express.Request): Promise<MessageEventBusDestinationOptions[]> {
if (isWithIdString(req.query)) { if (isWithIdString(req.query)) {
return await this.eventBus.findDestination(req.query.id); return await this.eventBus.findDestination(req.query.id);
@@ -72,7 +72,7 @@ export class EventBusControllerEE {
} }
@Post('/destination', { middlewares: [logStreamingLicensedMiddleware] }) @Post('/destination', { middlewares: [logStreamingLicensedMiddleware] })
@RequireGlobalScope('eventBusDestination:create') @GlobalScope('eventBusDestination:create')
async postDestination(req: AuthenticatedRequest): Promise<any> { async postDestination(req: AuthenticatedRequest): Promise<any> {
let result: MessageEventBusDestination | undefined; let result: MessageEventBusDestination | undefined;
if (isMessageEventBusDestinationOptions(req.body)) { if (isMessageEventBusDestinationOptions(req.body)) {
@@ -116,7 +116,7 @@ export class EventBusControllerEE {
} }
@Get('/testmessage', { middlewares: [logStreamingLicensedMiddleware] }) @Get('/testmessage', { middlewares: [logStreamingLicensedMiddleware] })
@RequireGlobalScope('eventBusDestination:test') @GlobalScope('eventBusDestination:test')
async sendTestMessage(req: express.Request): Promise<boolean> { async sendTestMessage(req: express.Request): Promise<boolean> {
if (isWithIdString(req.query)) { if (isWithIdString(req.query)) {
return await this.eventBus.testDestination(req.query.id); return await this.eventBus.testDestination(req.query.id);
@@ -125,7 +125,7 @@ export class EventBusControllerEE {
} }
@Delete('/destination', { middlewares: [logStreamingLicensedMiddleware] }) @Delete('/destination', { middlewares: [logStreamingLicensedMiddleware] })
@RequireGlobalScope('eventBusDestination:delete') @GlobalScope('eventBusDestination:delete')
async deleteDestination(req: AuthenticatedRequest) { async deleteDestination(req: AuthenticatedRequest) {
if (isWithIdString(req.query)) { if (isWithIdString(req.query)) {
return await this.eventBus.removeDestination(req.query.id); return await this.eventBus.removeDestination(req.query.id);

View File

@@ -2,7 +2,7 @@ import express from 'express';
import type { IRunExecutionData } from 'n8n-workflow'; import type { IRunExecutionData } from 'n8n-workflow';
import { EventMessageTypeNames } from 'n8n-workflow'; import { EventMessageTypeNames } from 'n8n-workflow';
import { RestController, Get, Post, Authorized, RequireGlobalScope } from '@/decorators'; import { RestController, Get, Post, Authorized, GlobalScope } from '@/decorators';
import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { BadRequestError } from '@/errors/response-errors/bad-request.error';
import { isEventMessageOptions } from './EventMessageClasses/AbstractEventMessage'; import { isEventMessageOptions } from './EventMessageClasses/AbstractEventMessage';
@@ -45,7 +45,7 @@ export class EventBusController {
// Events // Events
// ---------------------------------------- // ----------------------------------------
@Get('/event') @Get('/event')
@RequireGlobalScope('eventBusEvent:query') @GlobalScope('eventBusEvent:query')
async getEvents( async getEvents(
req: express.Request, req: express.Request,
): Promise<EventMessageTypes[] | Record<string, EventMessageTypes[]>> { ): Promise<EventMessageTypes[] | Record<string, EventMessageTypes[]>> {
@@ -67,14 +67,14 @@ export class EventBusController {
} }
@Get('/failed') @Get('/failed')
@RequireGlobalScope('eventBusEvent:list') @GlobalScope('eventBusEvent:list')
async getFailedEvents(req: express.Request): Promise<FailedEventSummary[]> { async getFailedEvents(req: express.Request): Promise<FailedEventSummary[]> {
const amount = parseInt(req.query?.amount as string) ?? 5; const amount = parseInt(req.query?.amount as string) ?? 5;
return await this.eventBus.getEventsFailed(amount); return await this.eventBus.getEventsFailed(amount);
} }
@Get('/execution/:id') @Get('/execution/:id')
@RequireGlobalScope('eventBusEvent:read') @GlobalScope('eventBusEvent:read')
async getEventForExecutionId(req: express.Request): Promise<EventMessageTypes[] | undefined> { async getEventForExecutionId(req: express.Request): Promise<EventMessageTypes[] | undefined> {
if (req.params?.id) { if (req.params?.id) {
let logHistory; let logHistory;
@@ -87,7 +87,7 @@ export class EventBusController {
} }
@Get('/execution-recover/:id') @Get('/execution-recover/:id')
@RequireGlobalScope('eventBusEvent:read') @GlobalScope('eventBusEvent:read')
async getRecoveryForExecutionId(req: express.Request): Promise<IRunExecutionData | undefined> { async getRecoveryForExecutionId(req: express.Request): Promise<IRunExecutionData | undefined> {
const { id } = req.params; const { id } = req.params;
if (req.params?.id) { if (req.params?.id) {
@@ -102,7 +102,7 @@ export class EventBusController {
} }
@Post('/event') @Post('/event')
@RequireGlobalScope('eventBusEvent:create') @GlobalScope('eventBusEvent:create')
async postEvent(req: express.Request): Promise<EventMessageTypes | undefined> { async postEvent(req: express.Request): Promise<EventMessageTypes | undefined> {
let msg: EventMessageTypes | undefined; let msg: EventMessageTypes | undefined;
if (isEventMessageOptions(req.body)) { if (isEventMessageOptions(req.body)) {

View File

@@ -1,4 +1,4 @@
import { Authorized, Get, Post, RequireGlobalScope, RestController } from '@/decorators'; import { Authorized, Get, Post, GlobalScope, RestController } from '@/decorators';
import { LicenseRequest } from '@/requests'; import { LicenseRequest } from '@/requests';
import { LicenseService } from './license.service'; import { LicenseService } from './license.service';
@@ -13,7 +13,7 @@ export class LicenseController {
} }
@Post('/activate') @Post('/activate')
@RequireGlobalScope('license:manage') @GlobalScope('license:manage')
async activateLicense(req: LicenseRequest.Activate) { async activateLicense(req: LicenseRequest.Activate) {
const { activationKey } = req.body; const { activationKey } = req.body;
await this.licenseService.activateLicense(activationKey); await this.licenseService.activateLicense(activationKey);
@@ -21,7 +21,7 @@ export class LicenseController {
} }
@Post('/renew') @Post('/renew')
@RequireGlobalScope('license:manage') @GlobalScope('license:manage')
async renewLicense() { async renewLicense() {
await this.licenseService.renewLicense(); await this.licenseService.renewLicense();
return await this.getTokenAndData(); return await this.getTokenAndData();

View File

@@ -3,14 +3,7 @@ import { validate } from 'class-validator';
import type { PostBindingContext } from 'samlify/types/src/entity'; import type { PostBindingContext } from 'samlify/types/src/entity';
import url from 'url'; import url from 'url';
import { import { Authorized, Get, NoAuthRequired, Post, RestController, GlobalScope } from '@/decorators';
Authorized,
Get,
NoAuthRequired,
Post,
RestController,
RequireGlobalScope,
} from '@/decorators';
import { AuthService } from '@/auth/auth.service'; import { AuthService } from '@/auth/auth.service';
import { AuthenticatedRequest } from '@/requests'; import { AuthenticatedRequest } from '@/requests';
@@ -76,7 +69,7 @@ export class SamlController {
* Set SAML config * Set SAML config
*/ */
@Post(SamlUrls.config, { middlewares: [samlLicensedMiddleware] }) @Post(SamlUrls.config, { middlewares: [samlLicensedMiddleware] })
@RequireGlobalScope('saml:manage') @GlobalScope('saml:manage')
async configPost(req: SamlConfiguration.Update) { async configPost(req: SamlConfiguration.Update) {
const validationResult = await validate(req.body); const validationResult = await validate(req.body);
if (validationResult.length === 0) { if (validationResult.length === 0) {
@@ -95,7 +88,7 @@ export class SamlController {
* Set SAML config * Set SAML config
*/ */
@Post(SamlUrls.configToggleEnabled, { middlewares: [samlLicensedMiddleware] }) @Post(SamlUrls.configToggleEnabled, { middlewares: [samlLicensedMiddleware] })
@RequireGlobalScope('saml:manage') @GlobalScope('saml:manage')
async toggleEnabledPost(req: SamlConfiguration.Toggle, res: express.Response) { async toggleEnabledPost(req: SamlConfiguration.Toggle, res: express.Response) {
if (req.body.loginEnabled === undefined) { if (req.body.loginEnabled === undefined) {
throw new BadRequestError('Body should contain a boolean "loginEnabled" property'); throw new BadRequestError('Body should contain a boolean "loginEnabled" property');
@@ -211,7 +204,7 @@ export class SamlController {
* This endpoint is available if SAML is licensed and the requestor is an instance owner * This endpoint is available if SAML is licensed and the requestor is an instance owner
*/ */
@Get(SamlUrls.configTest, { middlewares: [samlLicensedMiddleware] }) @Get(SamlUrls.configTest, { middlewares: [samlLicensedMiddleware] })
@RequireGlobalScope('saml:manage') @GlobalScope('saml:manage')
async configTestGet(req: AuthenticatedRequest, res: express.Response) { async configTestGet(req: AuthenticatedRequest, res: express.Response) {
return await this.handleInitSSO(res, getServiceProviderConfigTestReturnUrl()); return await this.handleInitSSO(res, getServiceProviderConfigTestReturnUrl());
} }