130 lines
5.8 KiB
JSON
130 lines
5.8 KiB
JSON
{
|
||
"updatedAt": "2026-04-05T08:26:11.546Z",
|
||
"createdAt": "2026-04-04T19:28:29.276Z",
|
||
"id": "W2OEeYHl5e7PhC21",
|
||
"name": "Crypto",
|
||
"active": false,
|
||
"isArchived": false,
|
||
"nodes": [
|
||
{
|
||
"parameters": {},
|
||
"type": "n8n-nodes-base.manualTrigger",
|
||
"typeVersion": 1,
|
||
"position": [
|
||
-272,
|
||
0
|
||
],
|
||
"id": "23d848a0-de09-464a-a77e-9eb2965bbbaf",
|
||
"name": "When clicking ‘Execute workflow’"
|
||
},
|
||
{
|
||
"parameters": {
|
||
"jsCode": "const fs = require('fs');\n\nconst pathsToCheck = [\n '/home/node/.n8n',\n '/home/node/.n8n/crypto_utils.js',\n './crypto_utils.js'\n];\n\nconst results = {};\n\npathsToCheck.forEach(p => {\n try {\n results[p] = fs.existsSync(p) ? 'Gefunden' : 'Nicht da';\n if (fs.lstatSync(p).isDirectory()) {\n results[p + '_inhalt'] = fs.readdirSync(p);\n }\n } catch (e) {\n results[p] = 'Fehler: ' + e.message;\n }\n});\n\nreturn results;"
|
||
},
|
||
"type": "n8n-nodes-base.code",
|
||
"typeVersion": 2,
|
||
"position": [
|
||
112,
|
||
192
|
||
],
|
||
"id": "72597a2d-a899-4bc3-919f-c7b11ed39942",
|
||
"name": "Code in JavaScript2",
|
||
"executeOnce": false
|
||
},
|
||
{
|
||
"parameters": {
|
||
"assignments": {
|
||
"assignments": [
|
||
{
|
||
"id": "67c488b2-bd53-483d-8ac5-f0561b4138d8",
|
||
"name": "crypto",
|
||
"value": "const crypto = require('crypto');\n\nfunction encrypt(text, encryption_key) {\n // 2. Erzeuge einen zufälligen Initialisierungsvektor (IV)\n const iv = crypto.randomBytes(16);\n \n // 3. Cipher-Objekt erstellen\n const cipher = crypto.createCipheriv('aes-256-gcm', Buffer.from(encryption_key), iv);\n\n // 4. Verschlüsseln\n let encrypted = cipher.update(text, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n\n // 5. Den Authentifizierungs-Tag abrufen (WICHTIG bei GCM)\n const authTag = cipher.getAuthTag().toString('hex');\n\n // 6. Alles zusammenfügen: iv + verschlüsselter Text + Tag\n // Wir trennen sie mit Doppelpunkten, damit wir sie später leicht splitten können\n return iv.toString('hex') + ':' + encrypted + ':' + authTag;\n}\n\n// 1. Konfiguration (Diese Werte sollten aus Umgebungsvariablen kommen!)\n// Der Key muss exakt 32 Zeichen lang sein für AES-256\nconst encryption_key = '12345678901234567890123456789012'; \n\n/**\n * Entschlüsselt einen String\n * @param {string} text - Der verschlüsselte String im Format \"iv:content:tag\"\n */\nfunction decrypt(text, encryption_key) {\n const textParts = text.split(':');\n const iv = Buffer.from(textParts.shift(), 'hex');\n const encryptedText = Buffer.from(textParts.shift(), 'hex');\n const authTag = Buffer.from(textParts.shift(), 'hex'); // GCM Modus nutzt Auth Tags zur Sicherheit\n\n const decipher = crypto.createDecipheriv('aes-256-gcm', Buffer.from(encryption_key), iv);\n decipher.setAuthTag(authTag);\n\n let decrypted = decipher.update(encryptedText, 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n\n return decrypted;\n}",
|
||
"type": "string"
|
||
}
|
||
]
|
||
},
|
||
"options": {}
|
||
},
|
||
"type": "n8n-nodes-base.set",
|
||
"typeVersion": 3.4,
|
||
"position": [
|
||
-80,
|
||
192
|
||
],
|
||
"id": "cb79b374-2a81-401f-861d-7854e0e54879",
|
||
"name": "js_functions",
|
||
"alwaysOutputData": false,
|
||
"executeOnce": true
|
||
},
|
||
{
|
||
"parameters": {
|
||
"jsCode": "const { encrypt, decrypt } = require('/home/node/.n8n/crypto_utils.js');\n\nconst key = '12345678901234567890123456789012';\nconst text = \"Geheimnis\";\n\nreturn {\n result: encrypt(text, key)\n};"
|
||
},
|
||
"type": "n8n-nodes-base.code",
|
||
"typeVersion": 2,
|
||
"position": [
|
||
112,
|
||
16
|
||
],
|
||
"id": "cbdb7f21-f770-4085-8524-08bd1ca8ba98",
|
||
"name": "Code in JavaScript"
|
||
}
|
||
],
|
||
"connections": {
|
||
"When clicking ‘Execute workflow’": {
|
||
"main": [
|
||
[
|
||
{
|
||
"node": "js_functions",
|
||
"type": "main",
|
||
"index": 0
|
||
}
|
||
]
|
||
]
|
||
},
|
||
"js_functions": {
|
||
"main": [
|
||
[
|
||
{
|
||
"node": "Code in JavaScript2",
|
||
"type": "main",
|
||
"index": 0
|
||
},
|
||
{
|
||
"node": "Code in JavaScript",
|
||
"type": "main",
|
||
"index": 0
|
||
}
|
||
]
|
||
]
|
||
},
|
||
"Code in JavaScript2": {
|
||
"main": [
|
||
[]
|
||
]
|
||
}
|
||
},
|
||
"settings": {
|
||
"executionOrder": "v1",
|
||
"binaryMode": "separate"
|
||
},
|
||
"staticData": null,
|
||
"meta": {
|
||
"templateCredsSetupCompleted": true
|
||
},
|
||
"pinData": {},
|
||
"versionId": "56cddc4b-446a-4212-8c91-e5e7ce2b3c47",
|
||
"activeVersionId": null,
|
||
"triggerCount": 0,
|
||
"shared": [
|
||
{
|
||
"updatedAt": "2026-04-04T19:28:29.279Z",
|
||
"createdAt": "2026-04-04T19:28:29.279Z",
|
||
"role": "workflow:owner",
|
||
"workflowId": "W2OEeYHl5e7PhC21",
|
||
"projectId": "cSAaWNJydnksD5EB"
|
||
}
|
||
],
|
||
"activeVersion": null,
|
||
"tags": []
|
||
} |