You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: FTP/WebDAV accept any username (password-only auth)
With one shared device password the username is pointless, so both file
servers now authenticate by password only - any username is accepted, a
wrong password is still rejected, and an empty device password leaves
them open.
- FTP: vendor ESP-FTP-Server-Lib into lib/ (dropped from lib_deps) and
patch c_USER/c_PASS to accept any username and match only the password
(empty password = open).
- WebDAV: the self-contained server now base64-decodes the HTTP-Basic
header and compares only the password (any username), open when no
password is set.
- Drop the now-pointless username fields from the FTP and WebDAV tabs and
add a hint; the WebDAV settings POST only carries the auto-start flag.
Locales (de/en/fr) and README updated. Verified on device: FTP login
with arbitrary usernames + the device password works, wrong password is
rejected, empty password opens it.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -109,6 +109,7 @@ neon logo that doubles as the SVG favicon ([`7be5254`](../../commit/7be5254)):
109
109
|**Configurable branding**: re-brand the navbar header + footer (General → Branding) with a live preview as you type — empty keeps the "Leo Industries" default, so the fork is easy to re-brand |[`fd57fcb`](../../commit/fd57fcb)|
110
110
|**Password protection**: single password (no username), 90-day session cookie, brute-force lockout, logout entry; off in hotspot mode. Scripts/API clients authenticate with the password as an **API key** (`X-API-Key` header / `apikey` query param) |[`e74e712`](../../commit/e74e712)|
111
111
|**One shared device password (Security tab)**: the password fields were pulled out of the WiFi/FTP/WebDAV tabs into a single **Security** sub-tab — one password now protects the web interface, FTP *and* WebDAV (set once, applies everywhere; applied live without a reboot). An **empty password is accepted** and disables protection for all three. The **hostname** moved to the top of the **General** tab (saved on its own; `/wificonfig` now does partial updates) and the navbar brand reads just **Leo Industries**|[`c6dfc67`](../../commit/c6dfc67)|
112
+
|**FTP/WebDAV accept any username**: with one shared password the username is pointless, so both servers now authenticate by **password only — any username is accepted** (wrong password still rejected; empty device password = open). The username fields are gone from both tabs. FTP uses a **vendored, patched copy** of ESP-FTP-Server-Lib in [`lib/`](lib/ESP-FTP-Server-Lib) (password-only auth); WebDAV's self-contained server decodes the HTTP-Basic header and compares only the password |[`PENDINGHASH3`](../../commit/PENDINGHASH3)|
112
113
|**One-click OTA + version badge**: a Tools-tab button (also bindable command **186** / MQTT `firmware_update`) pulls the rolling `latest` GitHub release and flashes it over OTA; a navbar badge shows the running build and turns amber when an update is available (passive `/version` check) — click it to install |[`8527f5e`](../../commit/8527f5e) · [`b736abc`](../../commit/b736abc)|
113
114
|**HTTP file sync**: pull audio files from a web server onto the SD card from a JSON manifest — additive, streamed in chunks straight to SD, background task with live progress + stop, abort-on-button, stall watchdog, auto-pauses playback and keeps the device awake mid-transfer. The manifest is streamed into the parser to halve peak RAM |[`ac24bbc`](../../commit/ac24bbc) · [`42d2c46`](../../commit/42d2c46)|
114
115
|**WebDAV server**: mount the SD card as a network drive (`http://<ip>:81/`) to copy audio on/off it straight from Finder/Explorer — no FTP client needed. Self-contained server (OPTIONS/PROPFIND/GET/HEAD+ranges/PUT/DELETE/MKCOL/MOVE/COPY/LOCK) running in its own task pinned to core 0 so transfers never disturb the audio pipeline; optional HTTP-Basic credentials. Configure + auto-start on boot in its own **WebDAV** settings sub-tab; start/stop live from the Control tab, command **188** or MQTT `webdav` (Home Assistant switch included). With auto-start on, the share is announced over **Bonjour/mDNS** (`_webdav._tcp`, `path=/`) so it pops up by itself in the Finder/Explorer network sidebar — no manual "Connect to Server" needed (currently disabled — see `WEBDAV_ENABLE`) |[`9b2bee0`](../../commit/9b2bee0)|
Copy file name to clipboardExpand all lines: html/locales/de.json
+2-1Lines changed: 2 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -443,6 +443,7 @@
443
443
},
444
444
"ftp": {
445
445
"title": "FTP-Einstellungen",
446
+
"authHint": "FTP akzeptiert jeden Benutzernamen – nur das Passwort zählt. Das Passwort ist das gemeinsame Geräte-Passwort (Tab \"Sicherheit\"). Leeres Passwort = Zugriff ohne Anmeldung.",
446
447
"user": {
447
448
"title": "FTP-Benutzername",
448
449
"placeholder": "Benutzername"
@@ -474,7 +475,7 @@
474
475
"show": "Passwort anzeigen/verbergen"
475
476
},
476
477
"auth": {
477
-
"hint": "Das WebDAV-Passwort wird im Tab \"Sicherheit\" gesetzt (gemeinsames Geräte-Passwort). Benutzername und Passwort leer lassen, um ohne Anmeldung zuzugreifen."
478
+
"hint": "WebDAV akzeptiert jeden Benutzernamen – nur das Passwort zählt. Das Passwort ist das gemeinsame Geräte-Passwort (Tab \"Sicherheit\"). Leeres Passwort = Zugriff ohne Anmeldung."
Copy file name to clipboardExpand all lines: html/locales/en.json
+2-1Lines changed: 2 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -443,6 +443,7 @@
443
443
},
444
444
"ftp": {
445
445
"title": "FTP-settings",
446
+
"authHint": "FTP accepts any username - only the password matters. The password is the shared device password (\"Security\" tab). An empty password means access without a login.",
446
447
"user": {
447
448
"title": "FTP-Username",
448
449
"placeholder": "username"
@@ -474,7 +475,7 @@
474
475
"show": "Show/hide password"
475
476
},
476
477
"auth": {
477
-
"hint": "The WebDAV password is set on the \"Security\" tab (shared device password). Leave username and password empty to allow access without a login."
478
+
"hint": "WebDAV accepts any username - only the password matters. The password is the shared device password (\"Security\" tab). An empty password means access without a login."
Copy file name to clipboardExpand all lines: html/locales/fr.json
+2-1Lines changed: 2 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -436,6 +436,7 @@
436
436
},
437
437
"ftp": {
438
438
"title": "Paramètres FTP",
439
+
"authHint": "Le FTP accepte n'importe quel nom d'utilisateur - seul le mot de passe compte. C'est le mot de passe partagé de l'appareil (onglet « Sécurité »). Un mot de passe vide permet l'accès sans connexion.",
439
440
"user": {
440
441
"title": "Nom d'utilisateur FTP",
441
442
"placeholder": "nom d'utilisateur"
@@ -467,7 +468,7 @@
467
468
"show": "Afficher/masquer le mot de passe"
468
469
},
469
470
"auth": {
470
-
"hint": "Le mot de passe WebDAV se règle dans l'onglet « Sécurité » (mot de passe partagé de l'appareil). Laissez le nom d'utilisateur et le mot de passe vides pour un accès sans connexion."
471
+
"hint": "Le WebDAV accepte n'importe quel nom d'utilisateur - seul le mot de passe compte. C'est le mot de passe partagé de l'appareil (onglet « Sécurité »). Un mot de passe vide permet l'accès sans connexion."
This is a fork form https://github.com/peterus/ESP-FTP-Server-Lib, since there seems to be no maintanance anymore.
4
+
This library will provide a simple and modern FTP server for your ESP32 or ESP8266 device.
5
+
You can setup multiple users and mutliple filesystems (SD-Card, MMC-Card or/and SPIFFS).
6
+
7
+
## Examples
8
+
9
+
In the example folder you can find a very simple usage of the FTP server. You just need to setup the users, add the filesystems which you want to use, and call the handle function in the loop.
10
+
With the Compileflag -DENABLE_FTP_SANITIZATION you can enable support for special-characters like ":" or "?" by URL-Encodeing of Files.
11
+
12
+
## Known Commands to the server
13
+
14
+
Currently all kind of simple commands are known to the server:
15
+
* CDUP
16
+
* CLNT
17
+
* CWD
18
+
* DELE
19
+
* FEAT
20
+
* LISST
21
+
* MKD
22
+
* MLSD
23
+
* NLST
24
+
* OPTS
25
+
* PASV
26
+
* PORT
27
+
* PWD
28
+
* RETR
29
+
* RMD
30
+
* RNFR
31
+
* RNTO
32
+
* STAT
33
+
* STOR
34
+
* TYPE
35
+
* USER
36
+
* PASS
37
+
* SYST
38
+
* QUIT
39
+
* ABOR
40
+
41
+
## What is still missing / TODO
42
+
43
+
Some commands are still missing, if you need them create a ticket :)
sentence=Simple and modern FTP server for ESP devices.
6
+
paragraph=With this library you can run a simple and modern FTP server on your ESP32 or ESP8266. You can mount multiple filesystems like SD-Card, MMC-Card or SPIFFS at the same time.
0 commit comments