{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "4e4487e4-6e43-4115-9c74-28b7d60c60f1",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -2960,
        64
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "92209b78-9e1d-4b7f-957d-063f43d3977e",
      "name": "Get All Bug Bounty Domains",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -2768,
        64
      ],
      "parameters": {
        "url": "https://raw.githubusercontent.com/arkadiyt/bounty-targets-data/refs/heads/main/data/domains.txt",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "7c0f9b01-e947-476d-b628-97b86789fead",
      "name": "Create domains.txt",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        -2576,
        64
      ],
      "parameters": {
        "options": {
          "fileName": "domains.txt"
        },
        "operation": "toText",
        "sourceProperty": "data"
      },
      "typeVersion": 1.1
    },
    {
      "id": "4a90e70b-c48d-413a-a122-c56cbff7fb94",
      "name": "Upload domains.txt",
      "type": "n8n-nodes-base.ssh",
      "position": [
        -2400,
        64
      ],
      "parameters": {
        "path": "/tmp/nuclei",
        "options": {},
        "resource": "file"
      },
      "credentials": {
        "sshPassword": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "988543c5-94e0-44f8-ab9f-8d3ebfd55026",
      "name": "Loop Over CVEs",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1808,
        64
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "4a279535-cdc3-4971-b3f1-669dab7c1807",
      "name": "Split CVEs",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -2016,
        64
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "results"
      },
      "typeVersion": 1
    },
    {
      "id": "c327f6d6-7a46-4452-8533-1bc5efbdd413",
      "name": "GET Last CVEs (PROJECT DISCOVERY)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -2208,
        64
      ],
      "parameters": {
        "url": "https://api.projectdiscovery.io/v2/template/search",
        "options": {
          "response": {
            "response": {}
          },
          "allowUnauthorizedCerts": false
        },
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "scope",
              "value": "public"
            },
            {
              "name": "facet_size",
              "value": "40"
            },
            {
              "name": "offset",
              "value": "0"
            },
            {
              "name": "limit",
              "value": "40"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "394d12ed-f7fa-4fa4-9153-792362557fd0",
      "name": "Template Exists Filter",
      "type": "n8n-nodes-base.filter",
      "position": [
        -1456,
        48
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f5ec37ec-884b-4f2b-a862-8f635c3f4787",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.Template }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ded932c1-4860-4e1a-8097-d20e344d452c",
      "name": "Date Filter",
      "type": "n8n-nodes-base.if",
      "position": [
        -1632,
        160
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "b8383900-9ea9-433a-99eb-186bace80963",
              "operator": {
                "type": "dateTime",
                "operation": "afterOrEquals"
              },
              "leftValue": "={{ $json.created_at.match(/^\\d{4}-\\d{2}-\\d{2}/)[0] }}",
              "rightValue": "={{ new Date(new Date($('Schedule Trigger').item.json.timestamp).setDate(new Date($('Schedule Trigger').item.json.timestamp).getDate() - 1)).toISOString().slice(0,10) }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "683c4a53-bcc1-4120-ae08-7d85d75d8ad1",
      "name": "Set Variables",
      "type": "n8n-nodes-base.set",
      "position": [
        -1456,
        176
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "2dbb3955-d2ac-436d-afbd-115a1b9ca77d",
              "name": "CVE",
              "type": "string",
              "value": "={{ $json.classification[\"cve-id\"][0] }}"
            },
            {
              "id": "6fb84c49-bc10-49cc-9fd1-bdaaa43ee26f",
              "name": "CVSS-Score",
              "type": "string",
              "value": "={{ $json.classification[\"cvss-score\"] }}"
            },
            {
              "id": "77c7d2d4-f191-426e-b421-746046007736",
              "name": "Template",
              "type": "string",
              "value": "={{ $json.raw }}"
            },
            {
              "id": "43e39cd1-426f-4d8d-855d-b2b5094b2c3d",
              "name": "References",
              "type": "string",
              "value": "={{ $json.references }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7ce8eaf8-781d-4a57-8130-bee18c2cbbc7",
      "name": "Set Null Variable",
      "type": "n8n-nodes-base.set",
      "position": [
        -1456,
        304
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3.4
    },
    {
      "id": "6971ed83-ae0b-4b0a-b507-4272811706df",
      "name": "Loop Over Templates",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1264,
        48
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "8e5d9676-868b-4509-99ad-842ac105083a",
      "name": "Create Template",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        -976,
        176
      ],
      "parameters": {
        "options": {
          "fileName": "={{ $json.CVE }}.txt"
        },
        "operation": "toText",
        "sourceProperty": "Template"
      },
      "typeVersion": 1.1
    },
    {
      "id": "8aa01e8f-c4ae-4670-94e7-e680aecdec31",
      "name": "Upload Template",
      "type": "n8n-nodes-base.ssh",
      "position": [
        -768,
        176
      ],
      "parameters": {
        "path": "/tmp/nuclei-templates",
        "options": {},
        "resource": "file"
      },
      "credentials": {
        "sshPassword": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "50e4400a-ab7b-479b-b5d1-6887b20dc4f0",
      "name": "Convert Template to .yaml",
      "type": "n8n-nodes-base.ssh",
      "position": [
        -768,
        304
      ],
      "parameters": {
        "cwd": "=/",
        "command": "=mv /tmp/nuclei-templates/{{ $('Loop Over Templates').item.json.CVE }}.txt /tmp/nuclei-templates/{{ $('Loop Over Templates').item.json.CVE }}.yaml"
      },
      "credentials": {
        "sshPassword": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "dcbe9551-2a4e-4886-ac28-1d33c46fb6d1",
      "name": "Execute Nuclei",
      "type": "n8n-nodes-base.ssh",
      "position": [
        -768,
        32
      ],
      "parameters": {
        "command": "=nuclei -l /tmp/nuclei/domains.txt -t /tmp/nuclei-templates -ss host-spray -c 10 -bs 50 -rl 100 -timeout 10 -retries 1 -silent -etags info,low"
      },
      "credentials": {
        "sshPassword": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "01f22d27-44e2-4485-814e-947521b1c941",
      "name": "Remove Templates",
      "type": "n8n-nodes-base.ssh",
      "position": [
        -560,
        32
      ],
      "parameters": {
        "command": "rm /tmp/nuclei-templates/*"
      },
      "credentials": {
        "sshPassword": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bc950e9f-e3b5-40da-848d-70c6632c2736",
      "name": "Set Results Variable",
      "type": "n8n-nodes-base.set",
      "position": [
        -368,
        32
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d81d0c46-ef3f-4f6d-b888-753aa5bf5cee",
              "name": "Nuclei Results",
              "type": "string",
              "value": "={{ $('Execute Nuclei').item.json.stdout }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7f6b1ae1-a704-424e-9772-b2aecacc138b",
      "name": "Check Results",
      "type": "n8n-nodes-base.if",
      "position": [
        -192,
        32
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "031ad40a-049e-4439-867f-9a753d298de7",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json[\"Nuclei Results\"] }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "bf01310b-f018-47de-ae60-b4e050c36b4a",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        0,
        16
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "={{ $json[\"Nuclei Results\"] }}",
        "options": {},
        "subject": "=CVE Hunter"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "61d4021c-f16b-4c23-b799-e2a65e24500c",
      "name": "Remove Items",
      "type": "n8n-nodes-base.summarize",
      "position": [
        -976,
        32
      ],
      "parameters": {
        "options": {},
        "fieldsToSummarize": {
          "values": [
            {
              "field": "code",
              "aggregation": "append"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "b92df5a1-5d5f-4bd9-8c91-3e96660986c6",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3024,
        -512
      ],
      "parameters": {
        "color": 7,
        "width": 3232,
        "height": 1104,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "c9f2beaa-b483-4643-882e-120708f10d37",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2992,
        -176
      ],
      "parameters": {
        "color": 4,
        "width": 720,
        "height": 736,
        "content": "## Step 1 - Get All Bug Bounty Programs Domains"
      },
      "typeVersion": 1
    },
    {
      "id": "7b03b271-d5e0-493d-a4a0-839184bd78a9",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2272,
        -176
      ],
      "parameters": {
        "color": 5,
        "width": 960,
        "height": 736,
        "content": "## Step 2 - Get New CVEs Templates"
      },
      "typeVersion": 1
    },
    {
      "id": "d0dcba98-60e0-43a8-a3bc-9cff15a64125",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1312,
        -176
      ],
      "parameters": {
        "color": 5,
        "width": 896,
        "height": 736,
        "content": "## Step 3 - Create & Execute Templates"
      },
      "typeVersion": 1
    },
    {
      "id": "8ca8d864-bde4-4c64-8e32-cfbf7f995a14",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        -176
      ],
      "parameters": {
        "color": 3,
        "width": 592,
        "height": 736,
        "content": "## Step 4 - Send Results via Gmail"
      },
      "typeVersion": 1
    },
    {
      "id": "3dfceb2f-bd32-40b8-9521-1beba8d75a58",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3648,
        -512
      ],
      "parameters": {
        "width": 624,
        "height": 1104,
        "content": "# SET UP\n\n### 1. Set Up SSH Enviroment\n#### VPS SSH\n##### 1. VPS Options (Linux):\n- [Hostinger](https://www.hostinger.com/vps-hosting)\n- [DigitalOcean](https://www.digitalocean.com/pricing)\n- [Hapi Host](https://www.hapihhost.in/vps-hosting/self-managed-vps-hosting/)\n- [WebDedis](https://webdedis.com/cheap-vps-hosting/)\n##### 2. Install Tools\n- [Nuclei](https://docs.projectdiscovery.io/opensource/nuclei/install)\n##### 3. Create new SSH Password (root user) in n8n:\n- With Password\n- With Private Key\n\n#### Local SSH\n##### 1. Configure OpenSSH Server\n- [Install OpenSSH](https://www.tecmint.com/install-openssh-server-in-linux/)\n- [Enable Root Login](https://linuxconfig.org/allow-ssh-root-login-on-ubuntu-20-04-focal-fossa-linux)\n##### 2. Install Tools\n- [Nuclei](https://docs.projectdiscovery.io/opensource/nuclei/install)\n##### 3. Create new SSH Password (root user) in n8n:\n- With Password\n- With Private Key\n\n### 2. Set Up OpenAI Connection\n#### Get Your API Key\n1. Visit the [OpenAI API Keys](https://platform.openai.com/api-keys) page.\n2. Go to [OpenAI Billing](https://platform.openai.com/settings/organization/billing/overview).\n3. Add funds to your billing account.\n4. Copy your API key into your **OpenAI credentials** in n8n (or your chosen platform).\n\n### 3. Set Up Gmail Connection\n#### Get Your Gmail Credentials\n1. Go to the [Google Cloud Console](https://console.cloud.google.com/).\n2. Create a new project or select an existing one.\n3. Navigate to **APIs & Services \u2192 Library** and enable the **Gmail API**.\n4. Go to **APIs & Services \u2192 Credentials** and click **Create Credentials \u2192 OAuth Client ID**.\n5. Configure the consent screen (set \u201cExternal\u201d if needed) and complete the required fields.\n6. Choose **Application type \u2192 Web application** (or the one matching your setup).\n7. Add your redirect URI (for n8n, use the one shown in your Gmail credentials node).\n8. Click **Create** and copy your **Client ID** and **Client Secret**.\n9. Paste both into your **Gmail credentials** in n8n (or your chosen platform).\n"
      },
      "typeVersion": 1
    },
    {
      "id": "17a5ebd6-d0a3-4f3f-88ed-65e5841a7038",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1088,
        -448
      ],
      "parameters": {
        "color": 7,
        "width": 720,
        "height": 192,
        "content": "# \ud83d\udcec Need Help or Want to Customize This?\n## **Contact me for consulting and support:** [LinkedIn](https://www.linkedin.com/in/javier-rieiro-2900b5354/) / [Email](mailto:pyus3r@gmail.com)"
      },
      "typeVersion": 1
    },
    {
      "id": "f9e0f384-8dcf-4225-ab88-677fe44f9cd1",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2512,
        -448
      ],
      "parameters": {
        "color": 7,
        "width": 720,
        "height": 192,
        "content": "# Objective of the workflow\n\n#### This flow runs the new templates released by Project Discovery, using a scope that includes all domains from HackerOne, Bugcrowd, Intigriti, and YesWeHack."
      },
      "typeVersion": 1
    },
    {
      "id": "23380fed-ecc8-407e-88ec-85b8ac6727e6",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1664,
        -400
      ],
      "parameters": {
        "color": 4,
        "width": 150,
        "height": 80,
        "content": "## INPUT"
      },
      "typeVersion": 1
    },
    {
      "id": "ce26775a-83cf-49db-85c6-c6fbf163c320",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1520,
        -400
      ],
      "parameters": {
        "color": 5,
        "width": 150,
        "height": 80,
        "content": "## CORE"
      },
      "typeVersion": 1
    },
    {
      "id": "363a6f51-ba61-437c-a3de-5fbee5df0f96",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1376,
        -400
      ],
      "parameters": {
        "color": 3,
        "width": 150,
        "height": 80,
        "content": "## OUTPUT"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Split CVEs": {
      "main": [
        [
          {
            "node": "Loop Over CVEs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Date Filter": {
      "main": [
        [
          {
            "node": "Set Variables",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set Null Variable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Items": {
      "main": [
        [
          {
            "node": "Execute Nuclei",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Results": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Variables": {
      "main": [
        [
          {
            "node": "Loop Over CVEs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute Nuclei": {
      "main": [
        [
          {
            "node": "Remove Templates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over CVEs": {
      "main": [
        [
          {
            "node": "Template Exists Filter",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Date Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Template": {
      "main": [
        [
          {
            "node": "Upload Template",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Template": {
      "main": [
        [
          {
            "node": "Convert Template to .yaml",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Templates": {
      "main": [
        [
          {
            "node": "Set Results Variable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get All Bug Bounty Domains",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Null Variable": {
      "main": [
        [
          {
            "node": "Loop Over CVEs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create domains.txt": {
      "main": [
        [
          {
            "node": "Upload domains.txt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload domains.txt": {
      "main": [
        [
          {
            "node": "GET Last CVEs (PROJECT DISCOVERY)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Templates": {
      "main": [
        [
          {
            "node": "Remove Items",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create Template",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Results Variable": {
      "main": [
        [
          {
            "node": "Check Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Template Exists Filter": {
      "main": [
        [
          {
            "node": "Loop Over Templates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert Template to .yaml": {
      "main": [
        [
          {
            "node": "Loop Over Templates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get All Bug Bounty Domains": {
      "main": [
        [
          {
            "node": "Create domains.txt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET Last CVEs (PROJECT DISCOVERY)": {
      "main": [
        [
          {
            "node": "Split CVEs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}