Files
n8n/packages/@n8n/nodes-langchain/utils/checkDomainRestrictions.ts
alighasami 3d5eaf9445
Some checks failed
Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
first commit
2026-03-17 16:22:57 +03:30

48 lines
1.7 KiB
TypeScript

import type {
ICredentialDataDecryptedObject,
ISupplyDataFunctions,
IExecuteFunctions,
} from 'n8n-workflow';
import { isDomainAllowed, NodeOperationError } from 'n8n-workflow';
/**
* Checks if the URL is allowed based on the allowed domains type and the allowed domains.
* If the allowed domains type is 'domains', it checks if the URL is in the allowed domains.
* If the allowed domains type is 'none', it checks if the URL is the same as the base URL in the credentials.
* @param ctx - The context of the node.
* @param credentials - The credentials of the node.
* @param url - The URL to check.
* @param credentialsUrlKey - The key of the base URL in the credentials.
*/
export const checkDomainRestrictions = (
ctx: ISupplyDataFunctions | IExecuteFunctions,
credentials: ICredentialDataDecryptedObject,
url: string,
credentialsUrlKey: string = 'url',
): void => {
const allowedDomainsType = credentials.allowedHttpRequestDomains;
const restrictedMessage = `Domain not allowed: This credential is restricted from accessing ${url}. `;
if (allowedDomainsType === 'domains') {
const allowedDomains = credentials.allowedDomains as string;
if (!allowedDomains || allowedDomains.trim() === '') {
throw new NodeOperationError(
ctx.getNode(),
'No allowed domains specified. Configure allowed domains or change restriction setting.',
);
}
if (!isDomainAllowed(url, { allowedDomains })) {
throw new NodeOperationError(
ctx.getNode(),
restrictedMessage + `Only the following domains are allowed: ${allowedDomains}`,
);
}
}
if (allowedDomainsType === 'none' && credentials[credentialsUrlKey]) {
if (url !== credentials[credentialsUrlKey]) {
throw new NodeOperationError(ctx.getNode(), restrictedMessage);
}
}
};