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
JavaScript
;
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