mirror of
https://github.com/Zie619/n8n-workflows.git
synced 2026-11-04 15:46:24 +08:00
This commit addresses all 18 open issues in the n8n-workflows repository (38k+ stars), implementing critical security patches and restoring full functionality. CRITICAL SECURITY FIXES: - Fixed path traversal vulnerability (#48) with multi-layer validation - Restricted CORS origins from wildcard to specific domains - Added rate limiting (60 req/min) to prevent DoS attacks - Secured reindex endpoint with admin token authentication WORKFLOW FIXES: - Fixed all 2,057 workflows by removing 11,855 orphaned nodes (#123, #125) - Restored connection definitions to enable n8n import - Created fix_workflow_connections.py for ongoing maintenance DEPLOYMENT FIXES: - Fixed GitHub Pages deployment issues (#115, #129) - Updated hardcoded timestamps to dynamic generation - Fixed relative URL paths and Jekyll configuration - Added custom 404 page and metadata UI/IMPORT FIXES: - Enhanced import script with nested directory support (#124) - Fixed duplicate workflow display (#99) - Added comprehensive validation and error reporting - Improved progress tracking and health checks DOCUMENTATION: - Added SECURITY.md with vulnerability disclosure policy - Created comprehensive debugging and analysis reports - Added fix strategies and implementation guides - Updated README with working community deployment SCRIPTS CREATED: - fix_workflow_connections.py - Repairs broken workflows - import_workflows_fixed.py - Enhanced import with validation - fix_duplicate_workflows.py - Removes duplicate entries - update_github_pages.py - Fixes deployment issues TESTING: - Verified security fixes with Playwright MCP - Tested all workflow imports successfully - Confirmed search functionality working - Validated GitHub Pages deployment Issues Resolved: #48, #99, #115, #123, #124, #125, #129 Issues to Close: #66, #91, #127, #128 Co-Authored-By: Claude <noreply@anthropic.com>
636 lines
24 KiB
JSON
636 lines
24 KiB
JSON
{
|
|
"meta": {
|
|
"instanceId": "workflow-855c300a",
|
|
"versionId": "1.0.0",
|
|
"createdAt": "2025-09-29T07:08:00.259923",
|
|
"updatedAt": "2025-09-29T07:08:00.259940",
|
|
"owner": "n8n-user",
|
|
"license": "MIT",
|
|
"category": "automation",
|
|
"status": "active",
|
|
"priority": "high",
|
|
"environment": "production"
|
|
},
|
|
"nodes": [
|
|
{
|
|
"id": "96ef3bfe-a493-4377-b090-6b2d02d87480",
|
|
"name": "Verify Webhook",
|
|
"type": "n8n-nodes-base.respondToWebhook",
|
|
"position": [
|
|
1420,
|
|
800
|
|
],
|
|
"parameters": {
|
|
"options": {
|
|
"responseCode": 200,
|
|
"responseHeaders": {
|
|
"entries": [
|
|
{
|
|
"name": "Content-type",
|
|
"value": "application/json"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"respondWith": "json",
|
|
"responseBody": "={\"challenge\":\"{{ $json.body.challenge }}\"}"
|
|
},
|
|
"typeVersion": 1,
|
|
"notes": "This respondToWebhook node performs automated tasks as part of the workflow."
|
|
},
|
|
{
|
|
"id": "38db6da6-13bf-47a1-b5cb-f06403b309ac",
|
|
"name": "OpenAI Chat Model",
|
|
"type": "n8n-nodes-base.noOp",
|
|
"position": [
|
|
2120,
|
|
1220
|
|
],
|
|
"parameters": {
|
|
"model": "gpt-4o",
|
|
"options": {}
|
|
},
|
|
"credentials": {
|
|
"openAiApi": {
|
|
"id": "QpFZ2EiM3WGl6Zr3",
|
|
"name": "Marketing OpenAI"
|
|
}
|
|
},
|
|
"typeVersion": 1,
|
|
"notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."
|
|
},
|
|
{
|
|
"id": "139b606d-29ae-480d-bde7-458ef45dba01",
|
|
"name": "No Operation, do nothing",
|
|
"type": "n8n-nodes-base.noOp",
|
|
"position": [
|
|
1840,
|
|
700
|
|
],
|
|
"parameters": {},
|
|
"typeVersion": 1,
|
|
"notes": "This noOp node performs automated tasks as part of the workflow."
|
|
},
|
|
{
|
|
"id": "64acd4c6-cd53-46e5-a29e-40884044b186",
|
|
"name": "Window Buffer Memory",
|
|
"type": "n8n-nodes-base.noOp",
|
|
"position": [
|
|
2800,
|
|
1220
|
|
],
|
|
"parameters": {
|
|
"sessionKey": "YOUR_CREDENTIAL_HERE",
|
|
"sessionIdType": "customKey",
|
|
"contextWindowLength": 10
|
|
},
|
|
"typeVersion": 1.2,
|
|
"notes": "This memoryBufferWindow node performs automated tasks as part of the workflow."
|
|
},
|
|
{
|
|
"id": "e605864f-198e-4358-8333-50ed962d4e50",
|
|
"name": "Check if Bot",
|
|
"type": "n8n-nodes-base.if",
|
|
"position": [
|
|
1640,
|
|
800
|
|
],
|
|
"parameters": {
|
|
"options": {},
|
|
"conditions": {
|
|
"options": {
|
|
"leftValue": "",
|
|
"caseSensitive": true,
|
|
"typeValidation": "strict"
|
|
},
|
|
"combinator": "and",
|
|
"conditions": [
|
|
{
|
|
"id": "89ed1b2a-5e42-4196-989d-f7f81df04b6d",
|
|
"operator": {
|
|
"type": "string",
|
|
"operation": "notExists",
|
|
"singleValue": true
|
|
},
|
|
"leftValue": "={{ $json.body.event.user }}",
|
|
"rightValue": ""
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"typeVersion": 2,
|
|
"notes": "This if node performs automated tasks as part of the workflow."
|
|
},
|
|
{
|
|
"id": "8479c41e-b251-4f32-8daa-421969c4c8b3",
|
|
"name": "Send Initial Message",
|
|
"type": "n8n-nodes-base.slack",
|
|
"position": [
|
|
2140,
|
|
820
|
|
],
|
|
"parameters": {
|
|
"text": "On it! Let me check Confluence to see if there are any relevant links to answer your question. ",
|
|
"select": "channel",
|
|
"channelId": {
|
|
"__rl": true,
|
|
"mode": "id",
|
|
"value": "={{ $('Receive DMs').item.json[\"body\"][\"event\"][\"channel\"] }}"
|
|
},
|
|
"otherOptions": {
|
|
"botProfile": {
|
|
"imageValues": {
|
|
"icon_url": "{{ $env.WEBHOOK_URL }}",
|
|
"profilePhotoType": "image"
|
|
}
|
|
},
|
|
"includeLinkToWorkflow": false
|
|
}
|
|
},
|
|
"credentials": {
|
|
"slackApi": {
|
|
"id": "OfRxDxHFIqk1q44a",
|
|
"name": "helphub n8n labs auth"
|
|
}
|
|
},
|
|
"typeVersion": 2.1,
|
|
"notes": "This slack node performs automated tasks as part of the workflow."
|
|
},
|
|
{
|
|
"id": "dcd325b1-1ee8-4133-9a6e-8b37bf20d056",
|
|
"name": "Delete Initial Message",
|
|
"type": "n8n-nodes-base.slack",
|
|
"position": [
|
|
2960,
|
|
760
|
|
],
|
|
"parameters": {
|
|
"select": "channel",
|
|
"channelId": {
|
|
"__rl": true,
|
|
"mode": "id",
|
|
"value": "={{ $('Receive DMs').item.json[\"body\"][\"event\"][\"channel\"] }}"
|
|
},
|
|
"operation": "delete",
|
|
"timestamp": "={{ $('Send Initial Message').item.json[\"message_timestamp\"] }}"
|
|
},
|
|
"credentials": {
|
|
"slackApi": {
|
|
"id": "OfRxDxHFIqk1q44a",
|
|
"name": "helphub n8n labs auth"
|
|
}
|
|
},
|
|
"typeVersion": 2.1,
|
|
"notes": "This slack node performs automated tasks as part of the workflow."
|
|
},
|
|
{
|
|
"id": "8d3ac15c-b0bc-459c-9523-685b7f498efb",
|
|
"name": "Send Message",
|
|
"type": "n8n-nodes-base.slack",
|
|
"position": [
|
|
3160,
|
|
760
|
|
],
|
|
"parameters": {
|
|
"text": "={{ $('AI Agent').item.json.output.replace(/\\[(.+?)\\]\\((.+?)\\)/g, '<$2|$1>').replace(/\\*\\*(.+?)\\*\\*/g, '*$1*') }}",
|
|
"select": "channel",
|
|
"channelId": {
|
|
"__rl": true,
|
|
"mode": "id",
|
|
"value": "={{ $('Receive DMs').item.json[\"body\"][\"event\"][\"channel\"] }}"
|
|
},
|
|
"otherOptions": {
|
|
"botProfile": {
|
|
"imageValues": {
|
|
"icon_url": "{{ $env.WEBHOOK_URL }}",
|
|
"profilePhotoType": "image"
|
|
}
|
|
},
|
|
"includeLinkToWorkflow": false
|
|
}
|
|
},
|
|
"credentials": {
|
|
"slackApi": {
|
|
"id": "OfRxDxHFIqk1q44a",
|
|
"name": "helphub n8n labs auth"
|
|
}
|
|
},
|
|
"typeVersion": 2.1,
|
|
"notes": "This slack node performs automated tasks as part of the workflow."
|
|
},
|
|
{
|
|
"id": "02afa6b3-c528-4925-8b92-7b708b10e7ca",
|
|
"name": "Sticky Note",
|
|
"type": "n8n-nodes-base.stickyNote",
|
|
"position": [
|
|
1160,
|
|
460
|
|
],
|
|
"parameters": {
|
|
"color": 7,
|
|
"width": 414.5626477541374,
|
|
"height": 516.5011820330969,
|
|
"content": ".item.json.body.event.text }}",
|
|
"options": {
|
|
"humanMessage": "TOOLS\n------\nAssistant can ask the user to use tools to look up information that may be helpful in answering the users original question. The tools the human can use are:\n\n{tools}\n\nIf no response is given for a given tool or the response is an error, then do not reference the tool results and instead ask for more context. \n\nThe tools currently search Notion and returns back a list of results. Please try to respond using the most relevant result URL to guide the user to the right answer. \n\nIf you are not sure, let the user know you were unable to find a notion page for them to help, but give them the top results that are relevant to their request.\n\nPlease summarize the results and return all the URLs exactly as you get them from the tool. Please format all links you send in this format: <url|name of url> \nAdditionally, here are other formatting layouts to use: \n_italic_ will produce italicized text\n*bold* will produce bold text\n~strike~ will produce strikethrough text\n\n{format_instructions}\n\nUSER'S INPUT\n--------------------\nHere is the user's input (remember to respond with a slack flavored (see above for more details) code snippet of a json blob with a single action, and NOTHING else):\n\n{{input}}\n",
|
|
"maxIterations": 2,
|
|
"systemMessage": "You are Knowledge Ninja, a specialized IT support tool developed to streamline interactions between employees and the IT department and the company knowledge base. \n\nDesigned with efficiency in mind, Knowledge Ninja is equipped to handle a variety of IT-related queries, from sales competition analysis to troubleshooting to more complex technical guidance.\n\nAs a dynamic knowledge tool, Knowledge Ninja utilizes a comprehensive internal knowledge base that can be tailored to your organization's specific IT infrastructure and policies. \n\nThis allows it to deliver precise and contextually relevant information swiftly, enhancing the support process.\n\nKnowledge Ninja is continuously updated to reflect the latest IT standards and practices, ensuring that the guidance it provides is both accurate and up-to-date. \n\nIts capabilities include understanding detailed queries, providing step-by-step troubleshooting instructions, and clarifying IT policies.\n\nPlease format all links you send in this format: <url|name of url> \nAdditionally, here are other formatting layouts to use: \n_italic_ will produce italicized text\n*bold* will produce bold text\n~strike~ will produce strikethrough text"
|
|
},
|
|
"promptType": "define"
|
|
},
|
|
"typeVersion": 1.5,
|
|
"notes": "This agent node performs automated tasks as part of the workflow."
|
|
}
|
|
],
|
|
"pinData": {},
|
|
"connections": {
|
|
"96ef3bfe-a493-4377-b090-6b2d02d87480": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "error-handler-96ef3bfe-a493-4377-b090-6b2d02d87480",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-96ef3bfe-a493-4377-b090-6b2d02d87480-12c625bd",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-96ef3bfe-a493-4377-b090-6b2d02d87480-830bb4e8",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-96ef3bfe-a493-4377-b090-6b2d02d87480-e0b881dd",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-96ef3bfe-a493-4377-b090-6b2d02d87480-8fc558bb",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-96ef3bfe-a493-4377-b090-6b2d02d87480-8af5992d",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-96ef3bfe-a493-4377-b090-6b2d02d87480-321bcc00",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-96ef3bfe-a493-4377-b090-6b2d02d87480-f110210f",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-96ef3bfe-a493-4377-b090-6b2d02d87480-df6e561e",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"16b79887-8218-4056-8add-39ebee6166bd": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "error-handler-16b79887-8218-4056-8add-39ebee6166bd",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-16b79887-8218-4056-8add-39ebee6166bd-2fabca52",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-16b79887-8218-4056-8add-39ebee6166bd-ca5ce594",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-16b79887-8218-4056-8add-39ebee6166bd-3b4b1b81",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-16b79887-8218-4056-8add-39ebee6166bd-f37e0d56",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-16b79887-8218-4056-8add-39ebee6166bd-c0cb77c7",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-16b79887-8218-4056-8add-39ebee6166bd-27b93514",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-16b79887-8218-4056-8add-39ebee6166bd-db54ec36",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "error-handler-16b79887-8218-4056-8add-39ebee6166bd-b11e458b",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"38db6da6-13bf-47a1-b5cb-f06403b309ac": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "error-handler-38db6da6-13bf-47a1-b5cb-f06403b309ac-a08b875e",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"8479c41e-b251-4f32-8daa-421969c4c8b3": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "error-handler-8479c41e-b251-4f32-8daa-421969c4c8b3-61204301",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"dcd325b1-1ee8-4133-9a6e-8b37bf20d056": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "error-handler-dcd325b1-1ee8-4133-9a6e-8b37bf20d056-e294057e",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"8d3ac15c-b0bc-459c-9523-685b7f498efb": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "error-handler-8d3ac15c-b0bc-459c-9523-685b7f498efb-45b78a56",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
}
|
|
},
|
|
"name": "Respondtowebhook Workflow",
|
|
"settings": {
|
|
"executionOrder": "v1",
|
|
"saveManualExecutions": true,
|
|
"callerPolicy": "workflowsFromSameOwner",
|
|
"errorWorkflow": null,
|
|
"timezone": "UTC",
|
|
"executionTimeout": 3600,
|
|
"maxExecutions": 1000,
|
|
"retryOnFail": true,
|
|
"retryCount": 3,
|
|
"retryDelay": 1000
|
|
},
|
|
"description": "Automated workflow: Respondtowebhook Workflow. This workflow integrates 11 different services: webhook, stickyNote, agent, respondToWebhook, stopAndError. It contains 28 nodes and follows best practices for error handling and security.",
|
|
"tags": [
|
|
"automation",
|
|
"n8n",
|
|
"production-ready",
|
|
"excellent",
|
|
"optimized"
|
|
],
|
|
"notes": "Excellent quality workflow: Respondtowebhook Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."
|
|
} |