mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 17:46:45 +00:00
57 lines
2.1 KiB
TypeScript
57 lines
2.1 KiB
TypeScript
import { Logger } from '@n8n/backend-common';
|
|
import type { User } from '@n8n/db';
|
|
import { SharedWorkflowRepository, WorkflowRepository } from '@n8n/db';
|
|
import { Service } from '@n8n/di';
|
|
import { hasGlobalScope } from '@n8n/permissions';
|
|
|
|
import { ActivationErrorsService } from '@/activation-errors.service';
|
|
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
|
import { WorkflowFinderService } from '@/workflows/workflow-finder.service';
|
|
|
|
@Service()
|
|
export class ActiveWorkflowsService {
|
|
constructor(
|
|
private readonly logger: Logger,
|
|
private readonly workflowRepository: WorkflowRepository,
|
|
private readonly sharedWorkflowRepository: SharedWorkflowRepository,
|
|
private readonly activationErrorsService: ActivationErrorsService,
|
|
private readonly workflowFinderService: WorkflowFinderService,
|
|
) {}
|
|
|
|
async getAllActiveIdsInStorage() {
|
|
const activationErrors = await this.activationErrorsService.getAll();
|
|
const activeWorkflowIds = await this.workflowRepository.getActiveIds();
|
|
return activeWorkflowIds.filter((workflowId) => !activationErrors[workflowId]);
|
|
}
|
|
|
|
async getAllActiveIdsFor(user: User) {
|
|
const activationErrors = await this.activationErrorsService.getAll();
|
|
const activeWorkflowIds = await this.workflowRepository.getActiveIds();
|
|
|
|
const hasFullAccess = hasGlobalScope(user, 'workflow:list');
|
|
if (hasFullAccess) {
|
|
return activeWorkflowIds.filter((workflowId) => !activationErrors[workflowId]);
|
|
}
|
|
|
|
const sharedWorkflowIds =
|
|
await this.sharedWorkflowRepository.getSharedWorkflowIds(activeWorkflowIds);
|
|
return sharedWorkflowIds.filter((workflowId) => !activationErrors[workflowId]);
|
|
}
|
|
|
|
async getActivationError(workflowId: string, user: User) {
|
|
const workflow = await this.workflowFinderService.findWorkflowForUser(workflowId, user, [
|
|
'workflow:read',
|
|
]);
|
|
if (!workflow) {
|
|
this.logger.warn('User attempted to access workflow errors without permissions', {
|
|
workflowId,
|
|
userId: user.id,
|
|
});
|
|
|
|
throw new BadRequestError(`Workflow with ID "${workflowId}" could not be found.`);
|
|
}
|
|
|
|
return await this.activationErrorsService.get(workflowId);
|
|
}
|
|
}
|