refactor(core): Extract Worfklow import request payload into a DTO (#12441)

This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™
2025-01-03 12:19:09 +01:00
committed by GitHub
parent b1940268e6
commit 1d3cb9f5ac
6 changed files with 152 additions and 13 deletions

View File

@@ -1,3 +1,4 @@
import { ImportWorkflowFromUrlDto } from '@n8n/api-types';
import { GlobalConfig } from '@n8n/config';
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
import { In, type FindOptionsRelations } from '@n8n/typeorm';
@@ -18,7 +19,7 @@ import { SharedWorkflowRepository } from '@/databases/repositories/shared-workfl
import { TagRepository } from '@/databases/repositories/tag.repository';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import * as Db from '@/db';
import { Delete, Get, Patch, Post, ProjectScope, Put, RestController } from '@/decorators';
import { Delete, Get, Patch, Post, ProjectScope, Put, Query, RestController } from '@/decorators';
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
import { ForbiddenError } from '@/errors/response-errors/forbidden.error';
import { InternalServerError } from '@/errors/response-errors/internal-server.error';
@@ -29,6 +30,7 @@ import { validateEntity } from '@/generic-helpers';
import type { IWorkflowResponse } from '@/interfaces';
import { License } from '@/license';
import { listQueryMiddleware } from '@/middlewares';
import { AuthenticatedRequest } from '@/requests';
import * as ResponseHelper from '@/response-helper';
import { NamingService } from '@/services/naming.service';
import { ProjectService } from '@/services/project.service.ee';
@@ -215,18 +217,14 @@ export class WorkflowsController {
}
@Get('/from-url')
async getFromUrl(req: WorkflowRequest.FromUrl) {
if (req.query.url === undefined) {
throw new BadRequestError('The parameter "url" is missing!');
}
if (!/^http[s]?:\/\/.*\.json$/i.exec(req.query.url)) {
throw new BadRequestError(
'The parameter "url" is not valid! It does not seem to be a URL pointing to a n8n workflow JSON file.',
);
}
async getFromUrl(
_req: AuthenticatedRequest,
_res: express.Response,
@Query query: ImportWorkflowFromUrlDto,
) {
let workflowData: IWorkflowResponse | undefined;
try {
const { data } = await axios.get<IWorkflowResponse>(req.query.url);
const { data } = await axios.get<IWorkflowResponse>(query.url);
workflowData = data;
} catch (error) {
throw new BadRequestError('The URL does not point to valid JSON file!');