npm package: @nea-lhubmann/n8n-nodes-smb-connect
Description: n8n SMB2 Connect
Author: Lucas Hubmann
Latest version: 1.0.2

# n8n-nodes-smb-connect

Benutzerdefinierter Node für [n8n](https://n8n.io), um auf SMB/Samba-Freigaben mit NTLMv2-Authentifizierung zuzugreifen. Verwendet die `v9u-smb2`-Bibliothek.

---
## Features

- Auflisten von Dateien & Ordnern in Samba-Freigaben als JSON (Kann n8n auch als Tabelle darstellen.)
- Hochladen, Herunterladen und löschen von Daten auf dem Server
- Unterstützung von NTLMv2
- mit Zeitstempel (erstellt, geändert) & Dateigröße
- Filterung nach Alter (> 10 Minuten) in einem extra Code-Node möglich
- Ergebnis der Filterung kann per Mail-Node versendet werden.
- Workflow in n8n vollständig konfigurierbar
---

## Testing (Lokale Entwicklung)

### 1. Projekt bauen

Zuerst muss das TypeScript-Projekt kompiliert werden:

```bash
npm run build
```

Dies erstellt die JavaScript-Dateien im `dist/`-Ordner.

### 2. Lokale Installation in n8n

Für lokales Testen gibt es zwei Möglichkeiten:

#### Option A: npm link (Empfohlen für Entwicklung)

1. **Im Projektverzeichnis** (N8N_samba):
   ```bash
   npm link
   ```

2. **Im n8n-Installationsverzeichnis** (wo n8n installiert ist):
   ```bash
   npm link @nea-lhubmann/n8n-nodes-smb-connect
   ```

3. **n8n neu starten**, damit der Node erkannt wird.

#### Option B: Lokaler Pfad in n8n

1. In n8n zu **Einstellungen → Community Nodes** gehen
2. Statt des Paketnamens den **lokalen Pfad** angeben:
   ```
   C:\Users\Desktop\N8N_samba
   ```
3. Kontrollkästchen aktivieren und installieren
4. n8n neu starten

### 3. Node in n8n testen

1. **Neuen Workflow erstellen** in n8n
2. **"Samba Connect" Node hinzufügen** (sollte jetzt verfügbar sein)
3. **Credentials konfigurieren:**
   - Host/IP-Adresse des SMB-Servers
   - Freigabename
   - Port (Standard: 445)
   - Domain (optional)
   - Benutzername
   - Passwort

4. **Test-Operation auswählen:**
   - **"Dateiliste ausgeben"** für den ersten Test (einfachste Operation)
   - Ordnerpfad angeben (optional, leer lassen für Root)

5. **Workflow ausführen** und Ergebnis prüfen

### 4. Weitere Tests

- **Upload testen:** Readfile Node → SMB Connect Node (Upload)
- **Download testen:** SMB Connect Node (Download) → Readfile Node
- **Delete testen:** SMB Connect Node (Delete)
- **Copy/Move testen:** SMB Connect Node (Copy/Move) mit Ziel-Credentials

---

## Installation (Produktion)

1. **Node als Community-Node installieren**

   - Nach dem Login Klick auf:
   
   Drei Punkte unten Links
   Einstellungen
   Klick Community Nodes unten links
   
   - Eingabe des Community-Node Namens "@nea-lhubmann/n8n-nodes-smb-connect" im Textfeld in der Mitte
   - Kontrollkästchen aktivieren
   - Klick auf installieren
   
## Verwendung und Konfiguration

3. **Node zum Workflow hinzufügen:** Dazu auf das Plus klicken und nach "SMB Connect" suchen.

4. **Zugangsdaten zum Server** angeben und Dateioperation auswählen.

## Filterfunktion (optional)

5. **JavaScript Code** um nach Alter der Daten zu filtern (dazu einen "Code Node" zum Workflow hinzufügen und diesen Code einfügen:

```
const now = new Date().getTime();
const tenMinutes = 10 * 60 * 1000;

const returnItems = [];

for (const item of items) {
	const modifiedAt = new Date(item.json.Geändert).getTime();

	// Ordner ausschließen UND prüfen, ob Datei älter als 10 Minuten ist
	if (item.json.Größe !== 'Ordner' && (now - modifiedAt) > tenMinutes) {
		returnItems.push({
			json: {
				Name: item.json.Name,
				Pfad: item.json.Pfad,
				AlterInMinuten: Math.round((now - modifiedAt) / 60000),
				Geändert: item.json.Geändert,
			},
		});
	}
}

return returnItems;
```

6. **Run Once for All Items** auswählen

7. **Hinzufügen des Mail Node** mit passendem JS Code für Betreff und Mailtext (Fügt Variable für Dateinamen usw. ein.)

**Code für Betreff**

```Datei "{{ $json.Name }}" ist älter als {{ $json.AlterInMinuten }} Minuten```

**Code für Mailtext**

```
Die Datei {{ $json.Name }} wurde zuletzt geändert am: {{ $json['Geändert'] }}
Pfad: {{ $json.Pfad }}
Alter: {{ $json.AlterInMinuten }} Minuten.
```

## Mail-Versand

8. **Daten von Mail-Server** im Mail Node angeben.

### Hinweise

- für das **Hochladen** muss ein Readfile Node vor dem SMB Connect Node die betreffende Datei in einem "data"-Objekt übergeben.
- für das **Herunterladen** muss ein Readfile Node nach dem SMB Connect Node die betreffende Datei in einem "data"-Objekt entgegennehmen.