UNPKG

n8n-nodes-nextcloud-tables

Version:

Production-Ready n8n Node für Nextcloud Tables - Vollständige API-Abdeckung mit erweiterten Filtern, Multi-Column-Sorting, CSV-Import und professioneller Datenvalidierung

140 lines 5.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ShareHandler = void 0; const api_helper_1 = require("../helpers/api.helper"); class ShareHandler { static async execute(context, operation, itemIndex) { switch (operation) { case 'getAll': return this.getAll(context, itemIndex); case 'create': return this.create(context, itemIndex); case 'update': return this.update(context, itemIndex); case 'delete': return this.delete(context, itemIndex); default: throw new Error(`Unbekannte Operation: ${operation}`); } } /** * Alle Shares einer Tabelle abrufen */ static async getAll(context, itemIndex) { const tableId = api_helper_1.ApiHelper.getResourceId(context.getNodeParameter('tableId', itemIndex)); return api_helper_1.ApiHelper.makeApiRequest(context, 'GET', `/tables/${tableId}/shares`); } /** * Einen neuen Share erstellen */ static async create(context, itemIndex) { const tableId = api_helper_1.ApiHelper.getResourceId(context.getNodeParameter('tableId', itemIndex)); const shareType = context.getNodeParameter('shareType', itemIndex); // Receiver abhängig vom Share-Typ extrahieren let receiver; if (shareType === 'user') { receiver = context.getNodeParameter('userReceiver', itemIndex); } else if (shareType === 'group') { receiver = context.getNodeParameter('groupReceiver', itemIndex); } else { throw new Error(`Unbekannter Share-Typ: ${shareType}`); } const permissionsCollection = context.getNodeParameter('permissions', itemIndex, {}); const additionalOptions = context.getNodeParameter('additionalOptions', itemIndex, {}); // Basis-Body aufbauen const body = { receiver, receiverType: shareType, }; // Anzeigename hinzufügen falls angegeben if (additionalOptions.displayName) { body.receiverDisplayName = additionalOptions.displayName; } // Berechtigungen aus fixedCollection extrahieren const permissions = permissionsCollection?.permission?.[0] || null; // Berechtigungen hinzufügen if (permissions) { body.permissionRead = permissions.read || false; body.permissionCreate = permissions.create || false; body.permissionUpdate = permissions.update || false; body.permissionDelete = permissions.delete || false; body.permissionManage = permissions.manage || false; } else { // Standard-Berechtigung: nur Lesen body.permissionRead = true; body.permissionCreate = false; body.permissionUpdate = false; body.permissionDelete = false; body.permissionManage = false; } return api_helper_1.ApiHelper.makeApiRequest(context, 'POST', `/tables/${tableId}/shares`, body); } /** * Berechtigungen eines Shares aktualisieren */ static async update(context, itemIndex) { const shareId = context.getNodeParameter('shareId', itemIndex); const permissionsCollection = context.getNodeParameter('permissions', itemIndex, {}); // Berechtigungen aus fixedCollection extrahieren const permissions = permissionsCollection?.permission?.[0] || null; // Berechtigungen-Body aufbauen const body = {}; if (permissions) { body.permissionRead = permissions.read || false; body.permissionCreate = permissions.create || false; body.permissionUpdate = permissions.update || false; body.permissionDelete = permissions.delete || false; body.permissionManage = permissions.manage || false; } else { throw new Error('Mindestens eine Berechtigung muss angegeben werden'); } return api_helper_1.ApiHelper.makeApiRequest(context, 'PUT', `/shares/${shareId}`, body); } /** * Einen Share löschen */ static async delete(context, itemIndex) { const shareId = context.getNodeParameter('shareId', itemIndex); await api_helper_1.ApiHelper.makeApiRequest(context, 'DELETE', `/shares/${shareId}`); return { success: true, message: `Share ${shareId} wurde erfolgreich gelöscht` }; } /** * Hilfsfunktion: Berechtigungen validieren */ static validatePermissions(permissions) { if (!permissions) { return false; } // Mindestens eine Berechtigung muss true sein return permissions.read || permissions.create || permissions.update || permissions.delete || permissions.manage; } /** * Hilfsfunktion: Share-Typ validieren */ static validateShareType(shareType) { const validTypes = ['user', 'group']; return validTypes.includes(shareType); } /** * Hilfsfunktion: Empfänger validieren (grundlegend) */ static validateReceiver(receiver) { // Grundlegende Validierung: nicht leer und keine Sonderzeichen if (!receiver || receiver.trim().length === 0) { return false; } // Einfache Regex für Nextcloud-Benutzernamen (Buchstaben, Zahlen, Unterstrich, Bindestrich) const receiverRegex = /^[a-zA-Z0-9_-]+$/; return receiverRegex.test(receiver.trim()); } } exports.ShareHandler = ShareHandler; //# sourceMappingURL=share.handler.js.map