From 6b02cd3d5f10ce274e53f5e71acd03c95b0d2a59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Martin?= Date: Thu, 8 Oct 2026 00:11:55 +0200 Subject: [PATCH 1/5] Storage: share the card with a phone's browser (#88) `w` in the Storage App starts a small HTTP server and shows its address, as a QR code and in letters, with a six-digit code. A browser on the same network that has typed the code can list, download, upload, make folders and delete, under the Storage App's rules. The server runs only while that screen is open. Nothing is encrypted, and the screen says so. Uploads are streamed to the card under a temporary name and renamed when whole. Every access to the card is handed to the storage task, 8 KB at a time, from the server's own task. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT --- README.md | 2 + docs/milestones/F1.md | 41 +++ lib/core/src/app_keys.h | 6 + lib/files/src/share_rules.cpp | 135 +++++++++ lib/files/src/share_rules.h | 55 ++++ site/content/dev/milestones/f1.md | 41 +++ site/content/faq.md | 4 + site/content/guide/storage.md | 18 +- site/data/keys.toml | 8 + src/apps/storage_app.cpp | 56 ++++ src/apps/storage_app.h | 9 +- src/main.cpp | 3 +- src/services/web_share.cpp | 335 +++++++++++++++++++++ src/services/web_share.h | 56 ++++ src/services/web_share_page.h | 69 +++++ test/test_share_rules/test_share_rules.cpp | 101 +++++++ 16 files changed, 934 insertions(+), 5 deletions(-) create mode 100644 lib/files/src/share_rules.cpp create mode 100644 lib/files/src/share_rules.h create mode 100644 src/services/web_share.cpp create mode 100644 src/services/web_share.h create mode 100644 src/services/web_share_page.h create mode 100644 test/test_share_rules/test_share_rules.cpp diff --git a/README.md b/README.md index 4120084..13811a3 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,8 @@ The Storage App (docs/milestones/F1.md) shows what's on the SD card: each folder A copy runs in the background of the card (about 400 KB a second) in short turns, so Logs and Captures keep being written; it shows its progress, Back cancels it and takes back what was copied, and each file's size is checked afterwards. Three things can't be changed: the top-level folders the firmware keeps its files in (what's inside them can), `/gemini/cache`, and any file being written right now (today's IRC Logs, a Track or a Capture being recorded). The App says why when it refuses. A folder with more than 256 entries shows the first 256 by name and says so. +**`w` shares the card with a browser on the same network** (issue #88): a small HTTP server and one page, for a phone with nothing to install. The screen shows the address as a QR code and a six-digit code, new each time; whoever has typed it can list, download, upload (streamed to the card under a temporary name), make folders and delete, under the Storage App's rules. It runs only while that screen is open, takes one request at a time, moves about 200 KB a second, and is not encrypted. It costs 57 KB of flash, and 13 KB of memory while it is on. + Enter on a file opens it by type; Tab switches to the same file as a hex dump or as text: - **Text** (`.txt`, `.log`, `.gmi`, `.csv`, and anything that looks like text): only the screen's worth is read from the card, so a file of any size opens at once. Logs open at the end. Up and Down move a line, Left and Right a page, `t` and `b` go to the top and the end, `e` edits it, whatever its size (see Notes). diff --git a/docs/milestones/F1.md b/docs/milestones/F1.md index 182bbb7..2b6767e 100644 --- a/docs/milestones/F1.md +++ b/docs/milestones/F1.md @@ -290,3 +290,44 @@ Test pictures were copied to a scratch folder and removed afterwards, with the t **A decoder that worked once.** The library's PNG decoder showed the first picture and refused the next five: "no memory". It wants 44 KB in one piece, and after some use the largest piece is 43 to 47 KB. Writing a decoder that needs 32 KB was less work than it sounds, and unlike the library's it has tests. **Two sentences still said "up to 16 KB"** about editing, in the README and the Storage guide, after issue #47 lifted that. Corrected here. + +## Sharing the card with a browser (issue #88) + +Files reached the card through the Debug Console's `put` and `get`, or by taking the card out. A phone has neither. + +### Decisions (2026-10-07; the recommendation was accepted as it stood, without a round of questions) + +- **A web page, not FTP, SFTP or WebDAV.** A browser is the only client every phone has. FTP and WebDAV need an app there; SFTP needs a whole SSH server here. WebDAV can come later on the same server, for computers. +- **Off unless asked for:** `w` in the Storage App opens a "Share" screen, and the server runs only while that screen is open. +- **A six-digit code on the screen**, new each time, typed in the page; the address is also a QR code, which carries the code. Five wrong codes close it for a minute (the Debug Console's `AuthGate`). A browser that got it right holds a cookie; starting again puts every browser out. +- **Not encrypted.** A TLS server costs about 40 KB of memory a connection. The screen says so. +- **The Storage App's rules** (`whyReadOnly`): the firmware's own folders, and files in use. + +### As built + +- **`WebShare`** (`src/services/web_share`): ESP-IDF's HTTP server, which is in the framework already. Seven requests: the page, the code, a listing as JSON, a download, an upload, a new folder, a delete. +- **Every access to the card is handed to the storage task**, 8 KB at a time, from the server's own task: a download and an upload are loops of "one piece from the card, one piece to the network". +- **An upload is the request's body**, as the browser's `PUT` sends it: no form to take apart. It goes to `.part` and is renamed when the last byte has come; anything less is removed. A file that exists is refused unless the page asked, after asking the user. +- **The page** (`web_share_page.h`) is one file of 5.4 KB with its style and script in it, served from flash. +- **`lib/files/src/share_rules.h`** (host-tested, 5 tests): what a request names, which paths a browser may ask for (from the root, no `..`), the JSON, the code and the cookie. +- **Cost:** 57 KB of flash, most of it the server. 13 KB of memory while sharing (108.4 KB free before, 95.4 with the screen open), given back on leaving. + +### Checks on the device (2026-10-07 and 08) + +A scratch folder was used and removed. + +| Check | Result | +|---|---| +| `w` | The QR code, the address and the code; `share: on` on the console | +| The page, and a listing without the code | 200; 401 | +| A wrong code, the right one (typed `825 132`) | 403; in | +| Upload, 2.6 MB | 11 to 17 s (150 to 230 KB/s); downloaded again and compared: the same, byte for byte | +| The same name again; with "replace" | 409; replaced | +| `..` in a path; deleting `/notes`; deleting a folder that isn't empty | 400; 403 "The firmware keeps its files in /notes"; 403 | +| Five wrong codes | The fifth and every one after: 429, the right code too. A browser that was in stays in | +| In Chromium at a phone's width | The scanned address logs in by itself; two files uploaded, one downloaded and compared, a folder made, a file deleted after asking, a replacement after asking, the refusal shown. No sideways scroll | +| Back | The server is gone (connection refused), memory is back | + +**Found on the way:** the server answers one request at a time. A second request during a slow download waited until it had ended. It is said in the guide, and not changed. + +**Not checked:** a real phone, and its camera on the QR code. Safari. A card pulled during a transfer. Sharing with IRC connected, when memory is shorter. Home, and the screen turning off, while sharing (the code stops the server on leaving the App; only Back was tried). diff --git a/lib/core/src/app_keys.h b/lib/core/src/app_keys.h index 0569107..a1e9b72 100644 --- a/lib/core/src/app_keys.h +++ b/lib/core/src/app_keys.h @@ -223,9 +223,15 @@ inline constexpr KeyHelp kStorage[] = { {"i", "details: size, date, type"}, {"s", "sort: name, date, size"}, {"m", "Maintenance: clean-up, erase"}, + {"w", "share with a browser"}, {"`", "the folder above"}, }; +// storage-share: Storage, sharing with a browser +inline constexpr KeyHelp kStorageShare[] = { + {"`", "stop sharing"}, +}; + // storage-details: Storage, an item's details inline constexpr KeyHelp kStorageDetails[] = { {"; .", "scroll"}, diff --git a/lib/files/src/share_rules.cpp b/lib/files/src/share_rules.cpp new file mode 100644 index 0000000..57c1f37 --- /dev/null +++ b/lib/files/src/share_rules.cpp @@ -0,0 +1,135 @@ +#include "share_rules.h" + +#include + +namespace roro::files { + +namespace { +int hexDigit(char c) { + if (c >= '0' && c <= '9') return c - '0'; + if (c >= 'a' && c <= 'f') return c - 'a' + 10; + if (c >= 'A' && c <= 'F') return c - 'A' + 10; + return -1; +} +// Whatever the two strings hold, the time taken says nothing about where they differ. +bool sameText(const std::string& a, const std::string& b) { + unsigned diff = static_cast(a.size() ^ b.size()); + for (size_t i = 0; i < a.size() && i < b.size(); i++) diff |= static_cast(a[i]) ^ static_cast(b[i]); + return diff == 0; +} +} // namespace + +std::string urlDecode(const std::string& text) { + std::string out; + out.reserve(text.size()); + for (size_t i = 0; i < text.size(); i++) { + int hi, lo; + if (text[i] == '%' && i + 2 < text.size() + 0 && (hi = hexDigit(text[i + 1])) >= 0 && (lo = hexDigit(text[i + 2])) >= 0) { + out += static_cast(hi * 16 + lo); + i += 2; + } else { + out += text[i]; + } + } + return out; +} + +bool queryParam(const std::string& query, const std::string& key, std::string& out) { + for (size_t at = 0; at <= query.size();) { + size_t amp = query.find('&', at); + if (amp == std::string::npos) amp = query.size(); + size_t eq = query.find('=', at); + if (eq != std::string::npos && eq < amp && query.compare(at, eq - at, key) == 0) { + out = urlDecode(query.substr(eq + 1, amp - eq - 1)); + return true; + } + at = amp + 1; + } + return false; +} + +std::string cookieValue(const std::string& header, const std::string& name) { + for (size_t at = 0; at < header.size();) { + while (at < header.size() && (header[at] == ' ' || header[at] == ';')) at++; + size_t end = header.find(';', at); + if (end == std::string::npos) end = header.size(); + size_t eq = header.find('=', at); + if (eq != std::string::npos && eq < end && header.compare(at, eq - at, name) == 0) return header.substr(eq + 1, end - eq - 1); + at = end; + } + return ""; +} + +std::string checkSharePath(const std::string& path) { + if (path.empty() || path[0] != '/') return "a path starts with /"; + if (path.size() > 255) return "that path is too long"; + if (path.size() > 1 && path.back() == '/') return "a path doesn't end with /"; + for (size_t at = 1; at < path.size();) { + size_t end = path.find('/', at); + if (end == std::string::npos) end = path.size(); + std::string part = path.substr(at, end - at); + if (part.empty() || part == "." || part == "..") return "that isn't a path on the card"; + for (char c : part) + if (static_cast(c) < 0x20 || c == 0x7F || c == '\\' || c == ':' || c == '*' || c == '?' || c == '"' || c == '<' || c == '>' || c == '|') + return "a name can't hold that character"; + at = end + 1; + } + return ""; +} + +std::string jsonString(const std::string& text) { + std::string out = "\""; + for (char c : text) { + unsigned char u = static_cast(c); + if (c == '"' || c == '\\') { + out += '\\'; + out += c; + } else if (u < 0x20) { + char buf[8]; + std::snprintf(buf, sizeof buf, "\\u%04x", u); + out += buf; + } else { + out += c; + } + } + return out + "\""; +} + +ShareListing::ShareListing(const std::string& path) : out_("{\"path\":" + jsonString(path) + ",\"items\":[") {} + +void ShareListing::add(const std::string& name, uint32_t size, bool folder, int64_t modified) { + if (count_++) out_ += ','; + out_ += "{\"n\":" + jsonString(name) + ",\"s\":" + std::to_string(size) + ",\"d\":" + (folder ? "1" : "0") + ",\"t\":" + std::to_string(modified) + "}"; +} + +std::string ShareListing::json(bool more) { return out_ + "],\"more\":" + (more ? "true" : "false") + "}"; } + +void ShareAuth::begin(const uint8_t random[4]) { + uint32_t n = (static_cast(random[0]) << 24 | random[1] << 16 | random[2] << 8 | random[3]) % 1000000u; + char buf[8]; + std::snprintf(buf, sizeof buf, "%06u", static_cast(n)); + code_ = buf; + token_.clear(); + gate_ = debug::AuthGate(); +} + +ShareAuth::Result ShareAuth::login(const std::string& code, uint32_t nowMs, const uint8_t random[16], std::string& token) { + if (code_.empty() || gate_.locked(nowMs)) return Result::Locked; + std::string digits; + for (char c : code) + if (c >= '0' && c <= '9') digits += c; // "123 456" is as good + if (!sameText(digits, code_)) return gate_.failed(nowMs) ? Result::Locked : Result::Wrong; + gate_.succeeded(); + static const char* const kHex = "0123456789abcdef"; + token_.clear(); + for (int i = 0; i < 16; i++) { + token_ += kHex[random[i] >> 4]; + token_ += kHex[random[i] & 15]; + } + token = token_; + return Result::Ok; +} + +bool ShareAuth::allowed(const std::string& token) const { return !token_.empty() && sameText(token, token_); } + +} // namespace roro::files diff --git a/lib/files/src/share_rules.h b/lib/files/src/share_rules.h new file mode 100644 index 0000000..49e9c35 --- /dev/null +++ b/lib/files/src/share_rules.h @@ -0,0 +1,55 @@ +#pragma once + +#include +#include + +#include "debug_auth.h" + +// The parts of sharing files with a browser (issue #88) that need no network: what a request +// asks for, whether it may, and the answers as JSON. The server itself is src/services/web_share.h. +namespace roro::files { + +std::string urlDecode(const std::string& text); // %41 is A; a + stays a + +// The value of `key` in a query string ("path=%2Fnotes&replace=1"), decoded. False if it isn't there. +bool queryParam(const std::string& query, const std::string& key, std::string& out); +// The value of a cookie in a Cookie header ("a=1; s=abc"), or "". +std::string cookieValue(const std::string& header, const std::string& name); + +// A path a browser may name: from the card's root, no "..", nothing a file name can't hold. +// "" or why not. +std::string checkSharePath(const std::string& path); + +std::string jsonString(const std::string& text); // with its quotes + +// A folder's listing as the page wants it: {"path":"/notes","items":[{"n":"a.txt","s":12,"d":0,"t":1791400000}],"more":false} +class ShareListing { + public: + explicit ShareListing(const std::string& path); + void add(const std::string& name, uint32_t size, bool folder, int64_t modified); + std::string json(bool more); + size_t count() const { return count_; } + + private: + std::string out_; + size_t count_ = 0; +}; + +// Who may use the page: whoever typed the code the device's screen shows. The code is new each +// time sharing starts; five wrong ones in a row close the door for a minute (as the Debug +// Console's token does). A browser that got it right is given a token to send back as a cookie. +// Nothing here is encrypted on the way: see the issue. +class ShareAuth { + public: + enum class Result { Ok, Wrong, Locked }; + + void begin(const uint8_t random[4]); // a new code, and nobody is logged in + const std::string& code() const { return code_; } // six digits + Result login(const std::string& code, uint32_t nowMs, const uint8_t random[16], std::string& token); + bool allowed(const std::string& token) const; + + private: + std::string code_, token_; + debug::AuthGate gate_; +}; + +} // namespace roro::files diff --git a/site/content/dev/milestones/f1.md b/site/content/dev/milestones/f1.md index c5b9237..20e2ba1 100644 --- a/site/content/dev/milestones/f1.md +++ b/site/content/dev/milestones/f1.md @@ -298,3 +298,44 @@ Test pictures were copied to a scratch folder and removed afterwards, with the t **A decoder that worked once.** The library's PNG decoder showed the first picture and refused the next five: "no memory". It wants 44 KB in one piece, and after some use the largest piece is 43 to 47 KB. Writing a decoder that needs 32 KB was less work than it sounds, and unlike the library's it has tests. **Two sentences still said "up to 16 KB"** about editing, in the README and the Storage guide, after issue #47 lifted that. Corrected here. + +## Sharing the card with a browser (issue #88) + +Files reached the card through the Debug Console's `put` and `get`, or by taking the card out. A phone has neither. + +### Decisions (2026-10-07; the recommendation was accepted as it stood, without a round of questions) + +- **A web page, not FTP, SFTP or WebDAV.** A browser is the only client every phone has. FTP and WebDAV need an app there; SFTP needs a whole SSH server here. WebDAV can come later on the same server, for computers. +- **Off unless asked for:** `w` in the Storage App opens a "Share" screen, and the server runs only while that screen is open. +- **A six-digit code on the screen**, new each time, typed in the page; the address is also a QR code, which carries the code. Five wrong codes close it for a minute (the Debug Console's `AuthGate`). A browser that got it right holds a cookie; starting again puts every browser out. +- **Not encrypted.** A TLS server costs about 40 KB of memory a connection. The screen says so. +- **The Storage App's rules** (`whyReadOnly`): the firmware's own folders, and files in use. + +### As built + +- **`WebShare`** (`src/services/web_share`): ESP-IDF's HTTP server, which is in the framework already. Seven requests: the page, the code, a listing as JSON, a download, an upload, a new folder, a delete. +- **Every access to the card is handed to the storage task**, 8 KB at a time, from the server's own task: a download and an upload are loops of "one piece from the card, one piece to the network". +- **An upload is the request's body**, as the browser's `PUT` sends it: no form to take apart. It goes to `.part` and is renamed when the last byte has come; anything less is removed. A file that exists is refused unless the page asked, after asking the user. +- **The page** (`web_share_page.h`) is one file of 5.4 KB with its style and script in it, served from flash. +- **`lib/files/src/share_rules.h`** (host-tested, 5 tests): what a request names, which paths a browser may ask for (from the root, no `..`), the JSON, the code and the cookie. +- **Cost:** 57 KB of flash, most of it the server. 13 KB of memory while sharing (108.4 KB free before, 95.4 with the screen open), given back on leaving. + +### Checks on the device (2026-10-07 and 08) + +A scratch folder was used and removed. + +| Check | Result | +|---|---| +| `w` | The QR code, the address and the code; `share: on` on the console | +| The page, and a listing without the code | 200; 401 | +| A wrong code, the right one (typed `825 132`) | 403; in | +| Upload, 2.6 MB | 11 to 17 s (150 to 230 KB/s); downloaded again and compared: the same, byte for byte | +| The same name again; with "replace" | 409; replaced | +| `..` in a path; deleting `/notes`; deleting a folder that isn't empty | 400; 403 "The firmware keeps its files in /notes"; 403 | +| Five wrong codes | The fifth and every one after: 429, the right code too. A browser that was in stays in | +| In Chromium at a phone's width | The scanned address logs in by itself; two files uploaded, one downloaded and compared, a folder made, a file deleted after asking, a replacement after asking, the refusal shown. No sideways scroll | +| Back | The server is gone (connection refused), memory is back | + +**Found on the way:** the server answers one request at a time. A second request during a slow download waited until it had ended. It is said in the guide, and not changed. + +**Not checked:** a real phone, and its camera on the QR code. Safari. A card pulled during a transfer. Sharing with IRC connected, when memory is shorter. Home, and the screen turning off, while sharing (the code stops the server on leaving the App; only Back was tried). diff --git a/site/content/faq.md b/site/content/faq.md index cf92eb3..99dd0c0 100644 --- a/site/content/faq.md +++ b/site/content/faq.md @@ -59,6 +59,10 @@ Yes: it is [open source](https://git.twis.la/twisla/roro9stack) (GPL-3.0). The d A secure connection takes about 52 KB of the 107 KB the device has, and IRC's takes about 40 KB. Both together do not always fit. See [When a connection says "not enough memory"](/howto/not-enough-memory/). +## How do I copy files to and from my phone? + +In the Storage App, press w: the device serves a small web page to any browser on the same Wi-Fi. Scan the QR code it shows, type the code, and upload or download. Nothing to install. See [From a phone](/guide/storage/#from-a-phone). + ## Do I need an SD card? For the radio, GNSS position, Wi-Fi tools, IRC chat and Gemini browsing, no. For anything that is *kept*, yes: notes, IRC logs, Wi-Fi scan logs, GNSS Tracks, LoRa captures, saved Gemini pages and update files. See [Find your files on the SD card](/howto/sd-files/). diff --git a/site/content/guide/storage.md b/site/content/guide/storage.md index 22bf32f..dd9e7f0 100644 --- a/site/content/guide/storage.md +++ b/site/content/guide/storage.md @@ -51,6 +51,22 @@ The App says why when it refuses. - **What can't be shown** opens as hex, with the reason: a progressive JPEG, an interlaced PNG, a BMP that is compressed or has 16 bits a pixel. - **A PNG needs 32 KB of memory in one piece** while it is decoded, and a few more (a JPEG needs 4 KB, a GIF 17 KB). With IRC connected there may not be that much: the viewer says so. The firmware's own screenshots need none. +## From a phone + +Press w in the Storage App to **share the card with a browser** on the same network. The screen shows an address, as a QR code and in letters, and a six-digit code. + +1. On the phone (or any computer on the same Wi-Fi), scan the QR code, or type the address and then the code. +2. The page lists the card. Tap a folder to open it and a file to download it. **Upload files** sends files from the phone into the folder you are in; **New folder** and **Delete** do what they say. +3. Press Back on the device to stop. Sharing also stops when you leave the Storage App. + +What to know: + +- **It runs only while that screen is open**, and the code is new each time. Five wrong codes close the door for a minute. +- **It is not encrypted.** On your own network that is the usual trade; on a network you don't trust, someone listening could read the files and the code. Inside a VPN tunnel it is protected. +- **One thing at a time:** while a big file is going up or down, the page waits. About 200 KB a second. +- The same rules as on the device: the folders the firmware keeps for itself can't be deleted, and a folder has to be empty to be deleted from the page. +- An upload is written under a temporary name and renamed when it is whole, so a transfer that is cut leaves nothing behind. + ## Maintenance At the top of the card, the last row, **Maintenance** (or m), shows the card's usage and holds **Storage clean-up** and **Erase SD card**. They delete for good, so they sit behind a warning. Clean-up deletes old logs and captures by category and age, showing the space it would free first. Notes and Saved Pages are never offered. @@ -61,4 +77,4 @@ The firmware warns once per start when the card passes **80%** full; past **90%* What Fn + h shows on these screens. These tables are generated from the firmware's own lists, so they are always the current ones. -{{ keys(scopes=["storage", "storage-details", "storage-name", "storage-busy", "maintenance", "viewer-text", "viewer-hex", "viewer-pcap", "viewer-packet", "viewer-gpx", "viewer-ota", "viewer-image"]) }} +{{ keys(scopes=["storage", "storage-details", "storage-name", "storage-busy", "maintenance", "viewer-text", "viewer-hex", "viewer-pcap", "viewer-packet", "viewer-gpx", "viewer-ota", "viewer-image", "storage-share"]) }} diff --git a/site/data/keys.toml b/site/data/keys.toml index 8457053..6047c32 100644 --- a/site/data/keys.toml +++ b/site/data/keys.toml @@ -249,9 +249,17 @@ rows = [ ["i", "details: size, date, type"], ["s", "sort: name, date, size"], ["m", "Maintenance: clean-up, erase"], + ["w", "share with a browser"], ["`", "the folder above"], ] +[[scope]] +id = "storage-share" +title = "Storage, sharing with a browser" +rows = [ + ["`", "stop sharing"], +] + [[scope]] id = "storage-details" title = "Storage, an item's details" diff --git a/src/apps/storage_app.cpp b/src/apps/storage_app.cpp index 31ee1c4..81a3fbe 100644 --- a/src/apps/storage_app.cpp +++ b/src/apps/storage_app.cpp @@ -48,6 +48,7 @@ void StorageApp::onEnter() { } void StorageApp::onExit() { + share_.stop(); // sharing lasts as long as its screen if (wait_ != Wait::None && wait_ != Wait::Work) { ops_.cancel(); wait_ = Wait::None; @@ -97,6 +98,13 @@ bool StorageApp::work(const std::string& why, const std::string& selectAfter) { void StorageApp::update(uint32_t nowMs) { bool present = storage_.state().present; + if (view_ == View::Share) { + if (!present || !share_.running()) { + share_.stop(); + view_ = View::Browse; + } + if (nowMs - lastDrawMs_ >= 500) requestRedraw(); // what the browser is doing + } if (present != cardPresent_) { // taken out, put in, or erased: back to the top cardPresent_ = present; cwd_ = want_ = "/"; @@ -281,6 +289,7 @@ void StorageApp::help(std::vector& out) const { case View::Editor: return noteEditor_.help(out); case View::Viewer: return viewer_.help(out); case View::Details: return keys::add(out, keys::kStorageDetails); + case View::Share: return keys::add(out, keys::kStorageShare); default: break; } if (dialog_) return keys::add(out, keys::kDialog); @@ -295,6 +304,7 @@ const char* StorageApp::helpTitle() const { case View::Editor: return "Storage: the editor"; case View::Viewer: return "Storage: a file"; case View::Details: return "Storage: details"; + case View::Share: return "Storage: sharing"; case View::Name: return "Storage: a name"; default: return nullptr; } @@ -303,6 +313,14 @@ const char* StorageApp::helpTitle() const { bool StorageApp::onKey(const KeyEvent& e) { requestRedraw(); if (view_ == View::NoMemory) return false; + if (view_ == View::Share) { + if (e.key == Key::Back) { + share_.stop(); + view_ = View::Browse; + open(cwd_); // what was uploaded or deleted meanwhile + } + return true; + } if (view_ == View::Maintenance) { if (!maintenance_.onKey(e)) { view_ = View::Browse; @@ -413,6 +431,12 @@ bool StorageApp::onBrowseKey(const KeyEvent& e) { } uint32_t ch = e.key == Key::Char ? (e.ch >= 'A' && e.ch <= 'Z' ? e.ch + 32 : e.ch) : 0; if (ch == 'm') askMaintenance(); + if (ch == 'w') { + std::string why = share_.start(); + if (why.empty()) view_ = View::Share; + else say(why); + return true; + } if (!cardPresent_ || !loaded_) return true; Item item = selected(); @@ -507,6 +531,7 @@ void StorageApp::draw(Canvas& c) { c.drawString("in Gemini) and open Storage again.", 4, area.y + 22 + theme::kLineHeight); return; case View::Maintenance: maintenance_.draw(c); return; + case View::Share: drawShare(c); return; case View::Viewer: viewer_.draw(c); return; case View::Editor: noteEditor_.draw(c); return; case View::Details: { @@ -539,6 +564,37 @@ void StorageApp::draw(Canvas& c) { } } +// The address as a QR code and in letters, the code to type, and what the browser has done. +void StorageApp::drawShare(Canvas& c) { + const auto& area = theme::kContent; + std::string url = share_.url(), code = share_.code(); + const int qr = 104; + c.fillRect(2, area.y + 3, qr + 6, qr + 6, 0xFFFF); // a QR code wants a quiet border + c.qrcode((url + "#" + code).c_str(), 5, area.y + 6, qr); + int x = qr + 14, y = area.y + 4; + c.setFont(&fonts::small); + c.setTextColor(theme::kMuted); + c.drawString("In a browser, on", x, y); + c.drawString("this network:", x, y + 10); + c.setTextColor(theme::kText); + c.drawString(url.size() > 7 ? url.substr(7).c_str() : url.c_str(), x, y + 24); // without http:// + c.setTextColor(theme::kMuted); + c.drawString("Code", x, y + 40); + c.setFont(&fonts::bold); + c.setTextColor(theme::kAccent); + std::string grouped = code.size() == 6 ? code.substr(0, 3) + " " + code.substr(3) : code; + c.drawString(grouped.c_str(), x, y + 50); + c.setFont(&fonts::small); + c.setTextColor(theme::kMuted); + std::string moved = formatBytes(share_.bytesIn()) + " in, " + formatBytes(share_.bytesOut()) + " out"; + c.drawString(share_.requests() ? moved.c_str() : "Nothing asked yet", x, y + 72); + c.drawString("Not encrypted.", x, y + 84); + c.drawString("` stops sharing", x, y + 96); + c.setTextColor(theme::kText); + std::string last = share_.last(); + if (!last.empty()) c.drawString(last.c_str(), 4, area.y + area.h - 9); +} + void StorageApp::drawBrowse(Canvas& c) { const auto& area = theme::kContent; StorageState card = storage_.state(); diff --git a/src/apps/storage_app.h b/src/apps/storage_app.h index 70bbb41..ea0441c 100644 --- a/src/apps/storage_app.h +++ b/src/apps/storage_app.h @@ -16,6 +16,7 @@ #include "services/clock_service.h" #include "services/file_ops.h" #include "services/storage_service.h" +#include "services/web_share.h" #include "ui/theme.h" namespace roro { @@ -26,8 +27,8 @@ namespace roro { // usage, Storage Clean-up and erasing the card, behind a warning (Q128). class StorageApp : public App { public: - StorageApp(FileOps& ops, StorageService& storage, ClockService& clock, UpdateService& update, PowerService& power, EventBus& bus) - : ops_(ops), storage_(storage), bus_(bus), maintenance_(storage, clock, bus), viewer_(storage, update), noteEditor_(storage, clock, power) {} + StorageApp(FileOps& ops, StorageService& storage, ClockService& clock, UpdateService& update, PowerService& power, EventBus& bus, WebShare& share) + : ops_(ops), storage_(storage), bus_(bus), share_(share), maintenance_(storage, clock, bus), viewer_(storage, update), noteEditor_(storage, clock, power) {} void onEnter() override; void onExit() override; bool onKey(const KeyEvent& e) override; @@ -40,7 +41,7 @@ class StorageApp : public App { const char* helpTitle() const override; private: - enum class View { Browse, Details, Name, Viewer, Editor, Maintenance, NoMemory }; + enum class View { Browse, Details, Name, Viewer, Editor, Maintenance, NoMemory, Share }; enum class Ask { None, Delete, Replace, Maintenance }; enum class Wait { None, List, CountToDelete, CountForDetails, Work }; // what the running operation is for static constexpr int kRows = 8; @@ -66,10 +67,12 @@ class StorageApp : public App { void say(const std::string& text); void drawBrowse(Canvas& c); void drawProgress(Canvas& c); + void drawShare(Canvas& c); // `w`: the card in a browser on the same network (issue #88) FileOps& ops_; StorageService& storage_; EventBus& bus_; + WebShare& share_; MaintenancePage maintenance_; FileViewer viewer_; NoteEditor noteEditor_; // `e` in the text viewer (Q146) diff --git a/src/main.cpp b/src/main.cpp index 6b5b088..9190966 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,6 +12,7 @@ #include "apps/demo_app.h" #include "apps/note_editor.h" #include "apps/shell_app.h" +#include "services/web_share.h" #include "apps/gemini_app.h" #include "apps/gnss_app.h" #include "apps/irc_app.h" @@ -216,7 +217,7 @@ void setup() { apps->registerApp({"gnss", "GNSS", false, new GnssApp(*gnssService, settings)}); apps->registerApp({"gemini", "Gemini", false, new GeminiApp(*geminiService)}); apps->registerApp({"lora", "LoRa Scanner", false, new LoraScannerApp(*radioService, *loraCapture, settings, *clockService)}); - apps->registerApp({"storage", "Storage", false, new StorageApp(*fileOps, *storageService, *clockService, *update, *power, bus)}); + apps->registerApp({"storage", "Storage", false, new StorageApp(*fileOps, *storageService, *clockService, *update, *power, bus, *new WebShare(*storageService, *fileOps, *wifi))}); apps->registerApp({"notes", "Notes", false, new NotesApp(*fileOps, *storageService, *clockService, *power)}); apps->registerApp({"shell", "Shell", false, new ShellApp(shellRun, shellProbe, shellList, shellCount, helpText(), *apps)}); // Leaving the foreground App makes it save: a note being typed, when the device is powered off. diff --git a/src/services/web_share.cpp b/src/services/web_share.cpp new file mode 100644 index 0000000..6795801 --- /dev/null +++ b/src/services/web_share.cpp @@ -0,0 +1,335 @@ +#include "services/web_share.h" + +#include +#include + +#include +#include + +#include + +#include "file_list.h" +#include "file_names.h" +#include "platform/console.h" +#include "services/web_share_page.h" + +namespace roro { + +namespace { +constexpr size_t kPiece = 8192; // read from or written to the card at once +constexpr size_t kMaxListed = 300; + +WebShare& shareOf(httpd_req_t* req) { return *static_cast(req->user_ctx); } + +esp_err_t reply(httpd_req_t* req, const char* status, const std::string& text) { + httpd_resp_set_status(req, status); + httpd_resp_set_type(req, "text/plain; charset=utf-8"); + httpd_resp_set_hdr(req, "Cache-Control", "no-store"); + return httpd_resp_send(req, text.c_str(), static_cast(text.size())); +} + +std::string queryOf(httpd_req_t* req) { + size_t len = httpd_req_get_url_query_len(req); + if (!len || len > 600) return ""; + std::string q(len + 1, '\0'); + if (httpd_req_get_url_query_str(req, &q[0], len + 1) != ESP_OK) return ""; + q.resize(len); + return q; +} + +// The request's path, checked; or an answer already sent and false. +bool pathOf(httpd_req_t* req, std::string& path) { + std::string query = queryOf(req); + if (!files::queryParam(query, "path", path)) return reply(req, "400 Bad Request", "No path"), false; + std::string why = files::checkSharePath(path); + if (!why.empty()) return reply(req, "400 Bad Request", why), false; + return true; +} + +// Has this browser typed the code? If not: 401, and false. +bool allowed(httpd_req_t* req) { + char cookie[160] = ""; + httpd_req_get_hdr_value_str(req, "Cookie", cookie, sizeof cookie); + if (shareOf(req).auth().allowed(files::cookieValue(cookie, "s"))) return true; + reply(req, "401 Unauthorized", "The code, please"); + return false; +} + +esp_err_t noCard(httpd_req_t* req) { return reply(req, "503 Service Unavailable", "No SD card"); } + +esp_err_t page(httpd_req_t* req) { + httpd_resp_set_type(req, "text/html; charset=utf-8"); + httpd_resp_set_hdr(req, "Cache-Control", "no-store"); + return httpd_resp_send(req, kWebSharePage, sizeof kWebSharePage - 1); +} + +esp_err_t login(httpd_req_t* req) { + char body[64] = ""; + int n = httpd_req_recv(req, body, std::min(req->content_len, sizeof body - 1)); + std::string code; + files::queryParam(n > 0 ? std::string(body, static_cast(n)) : "", "code", code); + uint8_t random[16]; + esp_fill_random(random, sizeof random); + std::string token; + switch (shareOf(req).auth().login(code, millis(), random, token)) { + case files::ShareAuth::Result::Ok: { + std::string cookie = "s=" + token + "; HttpOnly; SameSite=Strict; Path=/"; + httpd_resp_set_hdr(req, "Set-Cookie", cookie.c_str()); + shareOf(req).note("a browser opened", ""); + return reply(req, "200 OK", "ok"); + } + case files::ShareAuth::Result::Locked: return reply(req, "429 Too Many Requests", "Too many wrong codes: wait a minute"); + default: return reply(req, "403 Forbidden", "That isn't the code on the screen"); + } +} + +esp_err_t list(httpd_req_t* req) { + std::string path; + if (!allowed(req) || !pathOf(req, path)) return ESP_OK; + WebShare& share = shareOf(req); + std::string json, why; + bool ran = share.storage().runAndWait([&]() { + File dir = SD.open(path.c_str()); + if (!dir || !dir.isDirectory()) { + why = "No such folder"; + return; + } + files::ShareListing listing(path); + bool more = false; + for (File f = dir.openNextFile(); f; f = dir.openNextFile()) { + if (listing.count() >= kMaxListed) { + more = true; + f.close(); + break; + } + listing.add(f.name(), static_cast(f.size()), f.isDirectory(), static_cast(f.getLastWrite())); + f.close(); + } + dir.close(); + json = listing.json(more); + }); + if (!ran) return noCard(req); + if (!why.empty()) return reply(req, "404 Not Found", why); + share.note("listed", path); + httpd_resp_set_type(req, "application/json"); + httpd_resp_set_hdr(req, "Cache-Control", "no-store"); + return httpd_resp_send(req, json.c_str(), static_cast(json.size())); +} + +esp_err_t download(httpd_req_t* req) { + std::string path; + if (!allowed(req) || !pathOf(req, path)) return ESP_OK; + WebShare& share = shareOf(req); + auto file = std::make_shared(); + std::unique_ptr piece(new (std::nothrow) char[kPiece]); + if (!piece) return reply(req, "503 Service Unavailable", "Not enough memory"); + bool found = false; + if (!share.storage().runAndWait([&]() { + *file = SD.open(path.c_str(), FILE_READ); + found = *file && !file->isDirectory(); + if (*file && !found) file->close(); + })) + return noCard(req); + if (!found) return reply(req, "404 Not Found", "No such file"); + share.note("sent", path); + std::string disposition = "attachment; filename=" + files::jsonString(files::baseName(path)); + httpd_resp_set_type(req, "application/octet-stream"); + httpd_resp_set_hdr(req, "Content-Disposition", disposition.c_str()); + esp_err_t err = ESP_OK; + for (;;) { + int n = 0; + if (!share.storage().runAndWait([&]() { n = file->read(reinterpret_cast(piece.get()), kPiece); })) { + err = ESP_FAIL; + break; + } + if (n <= 0) break; + err = httpd_resp_send_chunk(req, piece.get(), n); + if (err != ESP_OK) break; // the browser went away + share.counted(0, static_cast(n)); + } + share.storage().runJob([file]() { file->close(); }); + if (err == ESP_OK) return httpd_resp_send_chunk(req, nullptr, 0); + return ESP_FAIL; // closes the connection: the browser sees a download cut short, not a whole file +} + +// The file arrives as the request's body and goes to the card a piece at a time, under a +// temporary name: the real one only ever holds a whole file. +esp_err_t upload(httpd_req_t* req) { + std::string path; + if (!allowed(req) || !pathOf(req, path)) return ESP_OK; + WebShare& share = shareOf(req); + std::string replace; + bool mayReplace = files::queryParam(queryOf(req), "replace", replace) && replace == "1"; + std::string name = files::baseName(path), why = name.empty() ? "No name" : files::checkName(name); + if (!why.empty()) return reply(req, "400 Bad Request", why); + std::string part = path + ".part"; + auto file = std::make_shared(); + std::unique_ptr piece(new (std::nothrow) char[kPiece]); + if (!piece) return reply(req, "503 Service Unavailable", "Not enough memory"); + const char* status = nullptr; + size_t total = req->content_len; + bool ran = share.storage().runAndWait([&]() { + File parent = SD.open(files::parentOf(path).c_str()); + bool folder = parent && parent.isDirectory(); + if (parent) parent.close(); + if (!folder) { + status = "404 Not Found"; + why = "No such folder"; + return; + } + if (SD.exists(path.c_str())) { + File there = SD.open(path.c_str()); + bool isFolder = there && there.isDirectory(); + if (there) there.close(); + std::string readOnly = isFolder ? "A folder has that name" : mayReplace ? share.ops().whyReadOnly(path, false) : ""; + if (!readOnly.empty()) { + status = "403 Forbidden"; + why = readOnly; + return; + } + if (!mayReplace) { + status = "409 Conflict"; + why = "It is there already"; + return; + } + } + StorageState state = share.storage().state(); + if (state.totalBytes - state.usedBytes < static_cast(total) + 65536) { + status = "507 Insufficient Storage"; + why = "Not enough room on the card"; + return; + } + *file = SD.open(part.c_str(), FILE_WRITE); + if (!*file) { + status = "500 Internal Server Error"; + why = "The card refused to make the file"; + } + }); + if (!ran) return noCard(req); + if (status) return reply(req, status, why); + share.note("receiving", path); + size_t got = 0; + int idle = 0; + bool wrote = true; + while (got < total && wrote) { + int n = httpd_req_recv(req, piece.get(), std::min(kPiece, total - got)); + if (n == HTTPD_SOCK_ERR_TIMEOUT && ++idle < 3) continue; + if (n <= 0) break; + idle = 0; + if (!share.storage().runAndWait([&]() { wrote = file->write(reinterpret_cast(piece.get()), static_cast(n)) == static_cast(n); })) wrote = false; + got += static_cast(n); + share.counted(static_cast(n), 0); + } + bool whole = wrote && got == total, placed = false; + share.storage().runAndWait([&]() { + file->close(); + if (whole) { + if (SD.exists(path.c_str())) SD.remove(path.c_str()); + placed = SD.rename(part.c_str(), path.c_str()); + } + if (!placed) SD.remove(part.c_str()); + }); + if (placed) { + share.note("received", path); + return reply(req, "200 OK", "ok"); + } + if (got < total) return ESP_FAIL; // the browser went away, or the network did + return reply(req, "500 Internal Server Error", "The card refused a write"); +} + +esp_err_t remove(httpd_req_t* req) { + std::string path; + if (!allowed(req) || !pathOf(req, path)) return ESP_OK; + WebShare& share = shareOf(req); + if (path == "/") return reply(req, "403 Forbidden", "Not the card itself"); + std::string why; + const char* status = "403 Forbidden"; + bool ran = share.storage().runAndWait([&]() { + File f = SD.open(path.c_str()); + if (!f) { + status = "404 Not Found"; + why = "It isn't there"; + return; + } + bool folder = f.isDirectory(); + f.close(); + why = share.ops().whyReadOnly(path, folder); + if (!why.empty()) return; + if (folder ? !SD.rmdir(path.c_str()) : !SD.remove(path.c_str())) why = folder ? "That folder isn't empty: delete what is in it first" : "The card refused"; + }); + if (!ran) return noCard(req); + if (!why.empty()) return reply(req, status, why); + share.note("deleted", path); + return reply(req, "200 OK", "ok"); +} + +esp_err_t makeFolder(httpd_req_t* req) { + std::string path; + if (!allowed(req) || !pathOf(req, path)) return ESP_OK; + WebShare& share = shareOf(req); + std::string why = files::checkName(files::baseName(path)); + if (!why.empty()) return reply(req, "400 Bad Request", why); + bool ran = share.storage().runAndWait([&]() { + if (SD.exists(path.c_str())) why = "It is there already"; + else if (!SD.mkdir(path.c_str())) why = "The card refused"; + }); + if (!ran) return noCard(req); + if (!why.empty()) return reply(req, "409 Conflict", why); + share.note("made", path); + return reply(req, "200 OK", "ok"); +} +} // namespace + +void WebShare::note(const char* what, const std::string& path) { + requests_++; + std::string text = path.empty() ? what : std::string(what) + " " + files::fitName(files::baseName(path).empty() ? "/" : files::baseName(path), 26); + strlcpy(last_, text.c_str(), sizeof last_); +} + +std::string WebShare::last() const { return last_; } + +std::string WebShare::url() const { + std::string ip = wifi_.ip(); + return ip.empty() ? "" : "http://" + ip + "/"; +} + +std::string WebShare::start() { + if (server_) return ""; + if (wifi_.ip().empty()) return "Wi-Fi isn't connected"; + if (!storage_.state().present) return "No SD card"; + uint8_t random[4]; + esp_fill_random(random, sizeof random); + auth_.begin(random); + requests_ = bytesIn_ = bytesOut_ = 0; + last_[0] = 0; + + httpd_config_t config = HTTPD_DEFAULT_CONFIG(); + config.stack_size = 8192; + config.max_open_sockets = 4; + config.lru_purge_enable = true; // a phone's browser opens more connections than it closes + config.max_uri_handlers = 8; + config.recv_wait_timeout = 10; + config.send_wait_timeout = 10; + httpd_handle_t server = nullptr; + if (httpd_start(&server, &config) != ESP_OK) return "The server couldn't start"; + const httpd_uri_t routes[] = { + {"/", HTTP_GET, page, this}, {"/api/login", HTTP_POST, login, this}, {"/api/list", HTTP_GET, list, this}, + {"/dl", HTTP_GET, download, this}, {"/up", HTTP_PUT, upload, this}, {"/api/delete", HTTP_POST, remove, this}, + {"/api/mkdir", HTTP_POST, makeFolder, this}, + }; + for (const auto& r : routes) httpd_register_uri_handler(server, &r); + server_ = server; + console.printf("share: on at %s\n", url().c_str()); + return ""; +} + +void WebShare::stop() { + if (!server_) return; + httpd_stop(static_cast(server_)); + server_ = nullptr; + uint8_t zero[4] = {0, 0, 0, 0}; + auth_.begin(zero); // nobody is logged in any more + console.println("share: off"); +} + +} // namespace roro diff --git a/src/services/web_share.h b/src/services/web_share.h new file mode 100644 index 0000000..4b22154 --- /dev/null +++ b/src/services/web_share.h @@ -0,0 +1,56 @@ +#pragma once + +#include +#include + +#include "services/file_ops.h" +#include "services/storage_service.h" +#include "services/wifi_service.h" +#include "share_rules.h" + +namespace roro { + +// Sharing the SD card with a browser on the same network (issue #88): a small HTTP server with +// one page and a few requests behind it: list, download, upload, new folder, delete. It runs only +// between start() and stop(), which the Storage App's "Share" screen calls on opening and +// closing. Whoever has typed the code that screen shows may use it; nothing is encrypted. +// +// The server has its own task. Every access to the card is handed to the storage task, a piece +// at a time, as everywhere else. +class WebShare { + public: + WebShare(StorageService& storage, FileOps& ops, WifiService& wifi) : storage_(storage), ops_(ops), wifi_(wifi) {} + + std::string start(); // "" or why it can't + void stop(); + bool running() const { return server_ != nullptr; } + std::string url() const; // http://
/ + const std::string& code() const { return auth_.code(); } + + // For the screen. + uint32_t requests() const { return requests_; } + uint32_t bytesIn() const { return bytesIn_; } + uint32_t bytesOut() const { return bytesOut_; } + std::string last() const; // the last thing asked for + + // Used by the request handlers (web_share.cpp). + StorageService& storage() { return storage_; } + FileOps& ops() { return ops_; } + files::ShareAuth& auth() { return auth_; } + void note(const char* what, const std::string& path); + void counted(uint32_t in, uint32_t out) { + bytesIn_ += in; + bytesOut_ += out; + } + + private: + StorageService& storage_; + FileOps& ops_; + WifiService& wifi_; + files::ShareAuth auth_; + void* server_ = nullptr; // httpd_handle_t + std::atomic requests_{0}, bytesIn_{0}, bytesOut_{0}; + char last_[56] = ""; +}; + +} // namespace roro diff --git a/src/services/web_share_page.h b/src/services/web_share_page.h new file mode 100644 index 0000000..9a309d3 --- /dev/null +++ b/src/services/web_share_page.h @@ -0,0 +1,69 @@ +#pragma once + +// The page a phone's browser gets (issue #88): one file, no other request but the API's. Kept +// small: it is sent from flash as it is. +namespace roro { + +inline constexpr char kWebSharePage[] = R"HTML( + +roro9stack files +
+

roro9stack: the SD card

+

The code on the device's screen:

+
+
+
+
+
+ +
    +

    +
    +)HTML"; + +} // namespace roro diff --git a/test/test_share_rules/test_share_rules.cpp b/test/test_share_rules/test_share_rules.cpp new file mode 100644 index 0000000..0f8e70d --- /dev/null +++ b/test/test_share_rules/test_share_rules.cpp @@ -0,0 +1,101 @@ +#include + +#include + +#include "share_rules.h" + +using namespace roro::files; + +void setUp() {} +void tearDown() {} + +void test_what_a_request_asks_for() { + TEST_ASSERT_EQUAL_STRING("/notes/my list.txt", urlDecode("%2Fnotes%2Fmy%20list.txt").c_str()); + TEST_ASSERT_EQUAL_STRING("a+b", urlDecode("a+b").c_str()); + TEST_ASSERT_EQUAL_STRING("100%", urlDecode("100%").c_str()); + TEST_ASSERT_EQUAL_STRING("%zz", urlDecode("%zz").c_str()); + TEST_ASSERT_EQUAL_STRING("\xC3\xA9t\xC3\xA9", urlDecode("%C3%A9t%C3%a9").c_str()); + std::string v; + TEST_ASSERT_TRUE(queryParam("path=%2Fnotes&replace=1", "path", v)); + TEST_ASSERT_EQUAL_STRING("/notes", v.c_str()); + TEST_ASSERT_TRUE(queryParam("path=%2Fnotes&replace=1", "replace", v)); + TEST_ASSERT_EQUAL_STRING("1", v.c_str()); + TEST_ASSERT_FALSE(queryParam("xpath=1&pathx=2", "path", v)); + TEST_ASSERT_FALSE(queryParam("", "path", v)); + TEST_ASSERT_TRUE(queryParam("a=&path=", "path", v)); + TEST_ASSERT_EQUAL_STRING("", v.c_str()); + TEST_ASSERT_EQUAL_STRING("abc123", cookieValue("theme=dark; s=abc123; x=1", "s").c_str()); + TEST_ASSERT_EQUAL_STRING("abc123", cookieValue("s=abc123", "s").c_str()); + TEST_ASSERT_EQUAL_STRING("", cookieValue("ss=abc123; xs=1", "s").c_str()); + TEST_ASSERT_EQUAL_STRING("", cookieValue("", "s").c_str()); +} + +void test_paths_a_browser_may_name() { + TEST_ASSERT_EQUAL_STRING("", checkSharePath("/").c_str()); + TEST_ASSERT_EQUAL_STRING("", checkSharePath("/notes/my list (2).txt").c_str()); + TEST_ASSERT_EQUAL_STRING("", checkSharePath("/gemini/saved/\xC3\xA9t\xC3\xA9.gmi").c_str()); + for (const char* bad : {"", "notes", "/notes/", "/notes/../wifi", "/..", "/a//b", "/a/./b", "/a\\b", "/a/b\n", "/a:b", "/what?", "/a*"}) + TEST_ASSERT_TRUE_MESSAGE(!checkSharePath(bad).empty(), bad); + TEST_ASSERT_TRUE(!checkSharePath("/" + std::string(300, 'a')).empty()); +} + +void test_json() { + TEST_ASSERT_EQUAL_STRING("\"plain\"", jsonString("plain").c_str()); + TEST_ASSERT_EQUAL_STRING("\"a \\\"b\\\" \\\\ c\"", jsonString("a \"b\" \\ c").c_str()); + TEST_ASSERT_EQUAL_STRING("\"tab\\u0009\"", jsonString("tab\t").c_str()); + TEST_ASSERT_EQUAL_STRING("\"\xC3\xA9\"", jsonString("\xC3\xA9").c_str()); + ShareListing empty("/"); + TEST_ASSERT_EQUAL_STRING("{\"path\":\"/\",\"items\":[],\"more\":false}", empty.json(false).c_str()); + ShareListing l("/notes"); + l.add("a \"b\".txt", 12, false, 1791400000); + l.add("old", 0, true, 0); + TEST_ASSERT_EQUAL_size_t(2, l.count()); + TEST_ASSERT_EQUAL_STRING("{\"path\":\"/notes\",\"items\":[{\"n\":\"a \\\"b\\\".txt\",\"s\":12,\"d\":0,\"t\":1791400000},{\"n\":\"old\",\"s\":0,\"d\":1,\"t\":0}],\"more\":true}", + l.json(true).c_str()); +} + +void test_the_code_and_the_token() { + ShareAuth auth; + std::string token; + const uint8_t r16[16] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}; + TEST_ASSERT_TRUE(auth.login("000000", 0, r16, token) == ShareAuth::Result::Locked); // not started: nobody gets in + TEST_ASSERT_FALSE(auth.allowed("")); + const uint8_t r4[4] = {0x00, 0x00, 0x30, 0x39}; // 12345 + auth.begin(r4); + TEST_ASSERT_EQUAL_STRING("012345", auth.code().c_str()); + TEST_ASSERT_FALSE(auth.allowed("")); + TEST_ASSERT_TRUE(auth.login("12345", 1000, r16, token) == ShareAuth::Result::Wrong); // the leading zero counts + TEST_ASSERT_TRUE(token.empty()); + TEST_ASSERT_TRUE(auth.login("012 345", 2000, r16, token) == ShareAuth::Result::Ok); // typed as the screen groups it + TEST_ASSERT_EQUAL_STRING("00112233445566778899aabbccddeeff", token.c_str()); + TEST_ASSERT_TRUE(auth.allowed(token)); + TEST_ASSERT_FALSE(auth.allowed(token + "0")); + TEST_ASSERT_FALSE(auth.allowed("00112233445566778899aabbccddeef0")); + // Sharing started again: a new code, and yesterday's browser is out. + const uint8_t again[4] = {0xFF, 0xFF, 0xFF, 0xFF}; + auth.begin(again); + TEST_ASSERT_EQUAL_size_t(6, auth.code().size()); + TEST_ASSERT_FALSE(auth.allowed(token)); +} + +void test_five_wrong_codes_close_it_for_a_minute() { + ShareAuth auth; + const uint8_t r4[4] = {0, 0, 0, 7}; + const uint8_t r16[16] = {0}; + auth.begin(r4); + std::string token; + for (int i = 0; i < 4; i++) TEST_ASSERT_TRUE(auth.login("999999", 1000, r16, token) == ShareAuth::Result::Wrong); + TEST_ASSERT_TRUE(auth.login("999999", 1000, r16, token) == ShareAuth::Result::Locked); + TEST_ASSERT_TRUE(auth.login("000007", 30000, r16, token) == ShareAuth::Result::Locked); // the right one too + TEST_ASSERT_TRUE(auth.login("000007", 62000, r16, token) == ShareAuth::Result::Ok); +} + +int main() { + UNITY_BEGIN(); + RUN_TEST(test_what_a_request_asks_for); + RUN_TEST(test_paths_a_browser_may_name); + RUN_TEST(test_json); + RUN_TEST(test_the_code_and_the_token); + RUN_TEST(test_five_wrong_codes_close_it_for_a_minute); + return UNITY_END(); +} -- 2.53.0 From 057af773e4dea7b1e2217c35458425c6657e5412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Martin?= Date: Thu, 8 Oct 2026 00:26:43 +0200 Subject: [PATCH 2/5] Devlog: "Press w", the SD card in a phone's browser (#88) Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT --- site/content/devlog/roro9stack-share/index.md | 184 ++++++++++++++++++ site/content/devlog/roro9stack-share/page.png | Bin 0 -> 36033 bytes .../content/devlog/roro9stack-share/share.png | Bin 0 -> 5719 bytes 3 files changed, 184 insertions(+) create mode 100644 site/content/devlog/roro9stack-share/index.md create mode 100644 site/content/devlog/roro9stack-share/page.png create mode 100644 site/content/devlog/roro9stack-share/share.png diff --git a/site/content/devlog/roro9stack-share/index.md b/site/content/devlog/roro9stack-share/index.md new file mode 100644 index 0000000..5279965 --- /dev/null +++ b/site/content/devlog/roro9stack-share/index.md @@ -0,0 +1,184 @@ ++++ +title = '''Press w''' +description = '''I asked whether roro9stack should get an FTP, SFTP or WebDAV server, to move files to and from my phone. The answer was none of them: a web page. Less than an hour later I pressed one key on the Cardputer, opened my phone's browser, and my SD card was in it. It works, and I'm still grinning.''' +date = 2026-10-08T00:30:00+02:00 + +[extra] +topics = '''ESP32-S3 · HTTP · Files''' +read_label = '''Read how the card got into my phone →''' +uid = '''share: on at http://172.16.42.25/''' +dek = "A short one, written straight after it worked, because I'm too pleased to wait. [roro9stack](/devlog/roro9stack/), my firmware for the M5Stack Cardputer, can now hand its SD card to any browser on the same Wi-Fi: no cable, no app, no computer. One key, one code, done." +byline = '''one question asked, the wrong three answers offered, a fourth taken''' + +[extra.sign] +label = "Apps installed on the phone to make this work" +note = "A browser was already there." +count = "0" + +[[extra.cast]] +name = "The question" +role = "\"FTP, SFTP or WebDAV?\"" +text = "Three ways to serve files, all of which want an app on the phone. I'd have picked one and been mildly unhappy with it for months." + +[[extra.cast]] +name = "The w key" +role = "in the Storage App" +text = "Starts a web server and shows where it is. Back stops it. That is the entire user interface on the device." + +[[extra.cast]] +name = "The code" +role = "six digits, new every time" +text = "On the device's screen and nowhere else. Type it in the page and you're in. Five wrong tries and the door stays shut for a minute." + +[[extra.cast]] +name = "The page" +role = "5.4 KB, one file" +text = "A list of what's on the card, an Upload button, a New folder button, and a Delete next to every row. Served from the firmware's own flash." + +[[extra.cast]] +name = "The storage task" +role = "the only one allowed to touch the card" +text = "Every byte in either direction goes through it, 8 KB at a time. It was there long before this and didn't need to learn anything new." ++++ + +## TL;DR + +- **Press `w` in the Storage App**, scan the QR code with a phone on the same Wi-Fi, and the SD card is a web page: list, download, upload, new folder, delete. +- **Nothing to install**, on the phone or anywhere else. That was the whole point. +- **It runs only while that screen is open.** A six-digit code, new each time, keeps the rest of the network out. +- **It is not encrypted,** and the screen says so. Fine at home; think first elsewhere. +- About **200 KB a second**, one request at a time, 57 KB of flash, 13 KB of memory while it's on. +- Also since [the last post](/devlog/roro9stack-shell/): the device shows **pictures** (v0.16.0), **Fn+p takes a screenshot** anywhere (v0.17.0), and this site has a **search**. + +## It works! + +I'll skip the build-up. I pressed `w`. This came up: + +{{ figure(src="share.png", alt="The Cardputer's screen at 2x: a large QR code on the left; on the right, In a browser, on this network: 172.16.42.25/, Code 825 132 in large blue digits, Nothing asked yet, Not encrypted, and backtick stops sharing.", width=480, height=270, caption="The whole feature, as the device sees it. The code in this picture stopped being valid the moment I pressed Back.") }} + +I picked up my phone, and there was my SD card, in the browser. **It works. That's fucking awesome.** + +Files, from my phone, to a computer the size of a biscuit and back. Over Wi-Fi. With nothing installed on either end that wasn't there this morning. + +Most of this devlog is about things that took a week of measuring and still bit me. This one I can explain to anybody in a sentence: it's a web page with your files on it. + +## The question I asked, and the one I should have + +Until tonight a file reached the card in one of two ways: the Debug Console's `put` command, which wants a PC, a Python script and a token, or pulling the card out. My phone can do neither. So I asked the obvious question: FTP, SFTP or WebDAV? + +The answer was a table, and the table was unkind to all three: + +{% table() %} +| | On the phone | On the device | +|---|---|---| +| FTP | needs an app; passwords in clear | easy | +| SFTP | needs an app | a whole SSH server: hundreds of KB, and a key exchange this chip would feel | +| WebDAV | needs an app, on iOS and Android both | fine, but see the first column | +| **A web page** | **any browser** | a small HTTP server | +{% end %} + +I had been choosing a protocol. What I wanted was to move a file with my thumb. Every phone made in the last fifteen years has exactly one file-transfer client that needs no setup, and it's the browser. + +## What's in it + +**On the device, almost nothing.** `w` starts the server and draws a screen. Back stops it. The server is the one that ships inside ESP-IDF, the framework the firmware is built on, so there was no library to choose. Seven requests: the page, the code, a listing, a download, an upload, a new folder, a delete. + +**The QR code carries the code.** Scan it and you're in without typing; type the address by hand and the page asks for the six digits. The code is made fresh from the hardware random generator each time `w` is pressed, and pressing Back throws every browser out. + +**An upload is just the request's body.** The browser sends the file as it is with a `PUT`, so there is no form to pick apart on a device with 100 KB of free memory. It lands on the card as `photo.jpg.part`, 8 KB at a time, and is renamed when the last byte has arrived. A transfer that dies halfway leaves nothing behind. If the name is taken, the page asks before replacing it, and the device refuses until it has. + +**The Storage App's rules still hold.** The page can't delete the folders the firmware keeps its own files in, and it says why: + +{{ figure(src="page.png", alt="The page in a browser at a phone's width: roro9stack: the SD card, a link SD card, buttons Upload files and New folder, then rows a-web, captures, gemini, gnss, irc, notes, screenshots, updates and wifi, each with a Delete button. Below, in orange: The firmware keeps its files in /notes.", width=390, height=630, caption="The page, at a phone's width, just after it was asked to delete `/notes`. It said no, in the device's own words.") }} + +**Nobody gets to walk out of the card.** `/a-web/../wifi` is refused before anything looks at the disk, by a function with a test that tries a dozen ways of asking. + +## What it isn't + +**Encrypted.** A TLS server costs this device about 40 KB of memory per connection, and it has around 100 KB on a good day. So the files and the code cross the Wi-Fi in clear. On my own network I don't mind. On a hotel's, I'd think about it. The device's screen says "Not encrypted." in plain words every time, because a limit you have to read the docs to find is a trap. + +**Fast.** 200 KB a second, give or take. A 2.6 MB photo takes eleven to seventeen seconds going up. I tried bigger pieces and smaller ones; the numbers moved around more between two runs of the same setting than between settings, so it's 8 KB and I stopped fiddling. + +**Able to do two things at once.** The server answers one request at a time. Start a big download and the page waits until it's done. I found that by asking for a listing in the middle of a download and watching it time out. It's written in the guide and left as it is. + +## What went wrong, for about four minutes each + +**A file that included itself.** The part that can be tested on a PC lived in `web_share.h`. So did the service, in another folder. The service's header said `#include "web_share.h"`, meaning the other one, and the compiler quite reasonably gave it itself. The testable half is now called `share_rules.h`. + +**The scanned address did nothing, sometimes.** If the page was already open and you then went to the same address with the code after the `#`, nothing happened: to a browser that isn't a new page, so the script never ran again. One line, `onhashchange`. Found by a browser test, not by me, which is the right way round. + +That's the list. Two. + +## What I checked, and what I didn't + +Checked, before I went anywhere near my phone: + +- Every request and every refusal, from a PC: wrong code, right code, a path with `..` in it, deleting a protected folder, deleting a folder that isn't empty, uploading over a file that exists. +- **2.6 MB up, then down again, compared byte for byte.** The same. +- The page in a real browser at a phone's width: uploads, a download, a new folder, a delete, a replace. +- Five wrong codes: shut for a minute, for the right code too. A browser that was already in stays in. +- Back: the server is gone and the memory comes back. + +And then on my actual phone, where it works, which is the sentence this post exists for. + +Not checked: Safari. Pulling the card out mid-transfer. Sharing while IRC is connected, when memory is tighter. What happens if the screen turns off while it's sharing. + +## Also since last time + +The day didn't stop at the [last post](/devlog/roro9stack-shell/): + +- **Pictures.** The Storage App opens PNG, JPEG, BMP and GIF files (**v0.16.0**). The interesting part was the PNG decoder: the one in the display library wanted 44 KB in a single block, got it once, and refused the next five pictures. The firmware has its own now, which needs 32. +- **Fn+p** takes a screenshot on any screen (**v0.17.0**), except the one that shows the Debug Console's token, where it politely declines. +- **This site has a [search](/search/).** +- **A WireGuard tunnel** is sitting in a pull request. It works against a test server on my own network and is waiting to meet a real one. + +## By the numbers + +{% table() %} +| | | +|---|---| +| Keys to press on the device | 1 | +| Apps to install on the phone | 0 | +| Digits in the code | 6 | +| Wrong codes before it shuts for a minute | 5 | +| The page | 5.4 KB | +| Flash | 57 KB | +| Memory while sharing | 13 KB | +| Speed | about 200 KB/s | +| Requests at a time | 1 | +| Bytes that differed after 2.6 MB went up and came back | 0 | +| Host tests | 533 | +| Things that went wrong | 2 | +{% end %} + +## Where it stands + +{% steps() %} +1. ~~M0 and M1: the skeleton, Wi-Fi, IRC, Wi-Fi Tools.~~ v0.1.0 to v0.2.1, [the first post](/devlog/roro9stack/). + +2. ~~Updates and debugging over the air.~~ v0.3.0, [Look, no cables](/devlog/roro9stack-ota/). + +3. ~~M2: GNSS.~~ v0.4.0, [Seventeen satellites](/devlog/roro9stack-gnss/). + +4. ~~G1: Gemini.~~ v0.5.0, [A browser in the RAM IRC left over](/devlog/roro9stack-gemini/). + +5. ~~M3: the LoRa radio, listening.~~ v0.6.0, [The loudest thing it hears is itself](/devlog/roro9stack-lora/). + +6. ~~S1: the card, fixed addresses, the System App.~~ v0.6.1 to v0.8.1, [One byte too early](/devlog/roro9stack-s1/). + +7. ~~F1 and the start of R1: files, notes, signed releases, updates from Gitea.~~ v0.9.0 to v0.11.0, [836 bytes](/devlog/roro9stack-f1-r1/). + +8. ~~W1: the website, and one firmware with the Debug Console in it.~~ v0.12.0, [It was off](/devlog/roro9stack-console/). + +9. ~~A help key, the Shell, notes of any size.~~ v0.13.0 to v0.15.0, [It said "No"](/devlog/roro9stack-shell/). + +10. ~~Pictures, and a screenshot key.~~ v0.16.0 and v0.17.0. + +11. ~~The card in a phone's browser.~~ This post. Not released yet: it's in a pull request as I write. + +12. Next: the WireGuard tunnel, once it has talked to a real server. And M4, the mesh, which still wants a second node. +{% end %} + +{% signoff() %} +I asked which of three servers to build and got told to build none of them. Then I pressed a key, picked up my phone, and my files were on it. Most of what this firmware does took days of careful measuring to get right. This took less than an evening, and it works, and I'm going to enjoy that at least until the next thing breaks. +{% end %} diff --git a/site/content/devlog/roro9stack-share/page.png b/site/content/devlog/roro9stack-share/page.png new file mode 100644 index 0000000000000000000000000000000000000000..7c759f8ff4db48a7b9b66b9475bda79ec591de15 GIT binary patch literal 36033 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 W!+f=EIbWRNKs5J4behL$=o1ucyVLO>$| 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 literal 0 HcmV?d00001 -- 2.53.0 From 63c2da813890a3e3b6a3472217a3449c9ded0606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Martin?= Date: Thu, 8 Oct 2026 00:30:50 +0200 Subject: [PATCH 3/5] Devlog: "Press w" with the phone's screenshot and a photo of the device (#88) Both pictures were resized and saved again from their pixels alone: no metadata is carried over. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT --- docs/milestones/F1.md | 4 +++- site/content/dev/milestones/f1.md | 4 +++- .../devlog/roro9stack-share/device-photo.jpg | Bin 0 -> 135365 bytes site/content/devlog/roro9stack-share/index.md | 4 ++++ site/content/devlog/roro9stack-share/phone.png | Bin 0 -> 73073 bytes 5 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 site/content/devlog/roro9stack-share/device-photo.jpg create mode 100644 site/content/devlog/roro9stack-share/phone.png diff --git a/docs/milestones/F1.md b/docs/milestones/F1.md index 2b6767e..637ca59 100644 --- a/docs/milestones/F1.md +++ b/docs/milestones/F1.md @@ -330,4 +330,6 @@ A scratch folder was used and removed. **Found on the way:** the server answers one request at a time. A second request during a slow download waited until it had ended. It is said in the guide, and not changed. -**Not checked:** a real phone, and its camera on the QR code. Safari. A card pulled during a transfer. Sharing with IRC connected, when memory is shorter. Home, and the screen turning off, while sharing (the code stops the server on leaving the App; only Back was tried). +**On a real phone** (the maintainer's, 2026-10-08): the page opens and lists the card, in the phone's dark theme. + +**Not checked:** the phone's camera on the QR code. Safari. A card pulled during a transfer. Sharing with IRC connected, when memory is shorter. Home, and the screen turning off, while sharing (the code stops the server on leaving the App; only Back was tried). diff --git a/site/content/dev/milestones/f1.md b/site/content/dev/milestones/f1.md index 20e2ba1..3595948 100644 --- a/site/content/dev/milestones/f1.md +++ b/site/content/dev/milestones/f1.md @@ -338,4 +338,6 @@ A scratch folder was used and removed. **Found on the way:** the server answers one request at a time. A second request during a slow download waited until it had ended. It is said in the guide, and not changed. -**Not checked:** a real phone, and its camera on the QR code. Safari. A card pulled during a transfer. Sharing with IRC connected, when memory is shorter. Home, and the screen turning off, while sharing (the code stops the server on leaving the App; only Back was tried). +**On a real phone** (the maintainer's, 2026-10-08): the page opens and lists the card, in the phone's dark theme. + +**Not checked:** the phone's camera on the QR code. Safari. A card pulled during a transfer. Sharing with IRC connected, when memory is shorter. Home, and the screen turning off, while sharing (the code stops the server on leaving the App; only Back was tried). diff --git a/site/content/devlog/roro9stack-share/device-photo.jpg b/site/content/devlog/roro9stack-share/device-photo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd981529f9c740c2e8a2a282f0a8ed8a5af7efc5 GIT binary patch literal 135365 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/site/content/devlog/roro9stack-share/index.md b/site/content/devlog/roro9stack-share/index.md index 5279965..3374967 100644 --- a/site/content/devlog/roro9stack-share/index.md +++ b/site/content/devlog/roro9stack-share/index.md @@ -58,6 +58,10 @@ I'll skip the build-up. I pressed `w`. This came up: I picked up my phone, and there was my SD card, in the browser. **It works. That's fucking awesome.** +{{ figure(src="phone.png", alt="A phone's browser in dark mode at the address 172.16.42.25, at 00:15: roro9stack: the SD card, a link SD card, a bright blue Upload files button and a New folder button, then rows captures, gemini, gnss, irc, notes, screenshots, updates and wifi, each with a Delete button.", width=462, height=1001, caption="My phone, at a quarter past midnight. Its browser, my card, nothing else.") }} + +{{ figure(src="device-photo.jpg", alt="A photograph of the Cardputer ADV on a wooden table. Its small screen shows the QR code, the address, the code 997 216, and 2.5 MB in, 3.2 MB out. Below the screen, the whole keyboard.", width=900, height=864, landscape=true, caption="And the other end of it, for scale. The whole server is in there, behind a screen smaller than the QR code on most posters.") }} + Files, from my phone, to a computer the size of a biscuit and back. Over Wi-Fi. With nothing installed on either end that wasn't there this morning. Most of this devlog is about things that took a week of measuring and still bit me. This one I can explain to anybody in a sentence: it's a web page with your files on it. diff --git a/site/content/devlog/roro9stack-share/phone.png b/site/content/devlog/roro9stack-share/phone.png new file mode 100644 index 0000000000000000000000000000000000000000..8f18c36fd0b6b72aa89f0a4f6fd91865aea8c09b GIT binary patch literal 73073 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 Date: Thu, 8 Oct 2026 00:33:14 +0200 Subject: [PATCH 4/5] F1, devlog: the QR code scanned with a real phone (#88) Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT --- docs/milestones/F1.md | 4 ++-- site/content/dev/milestones/f1.md | 4 ++-- site/content/devlog/roro9stack-share/index.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/milestones/F1.md b/docs/milestones/F1.md index 637ca59..d4dd4d6 100644 --- a/docs/milestones/F1.md +++ b/docs/milestones/F1.md @@ -330,6 +330,6 @@ A scratch folder was used and removed. **Found on the way:** the server answers one request at a time. A second request during a slow download waited until it had ended. It is said in the guide, and not changed. -**On a real phone** (the maintainer's, 2026-10-08): the page opens and lists the card, in the phone's dark theme. +**On a real phone** (the maintainer's, 2026-10-08): the QR code, scanned with the phone's camera, opens the page and logs in; the page lists the card, in the phone's dark theme. -**Not checked:** the phone's camera on the QR code. Safari. A card pulled during a transfer. Sharing with IRC connected, when memory is shorter. Home, and the screen turning off, while sharing (the code stops the server on leaving the App; only Back was tried). +**Not checked:** Safari. A card pulled during a transfer. Sharing with IRC connected, when memory is shorter. Home, and the screen turning off, while sharing (the code stops the server on leaving the App; only Back was tried). diff --git a/site/content/dev/milestones/f1.md b/site/content/dev/milestones/f1.md index 3595948..47891eb 100644 --- a/site/content/dev/milestones/f1.md +++ b/site/content/dev/milestones/f1.md @@ -338,6 +338,6 @@ A scratch folder was used and removed. **Found on the way:** the server answers one request at a time. A second request during a slow download waited until it had ended. It is said in the guide, and not changed. -**On a real phone** (the maintainer's, 2026-10-08): the page opens and lists the card, in the phone's dark theme. +**On a real phone** (the maintainer's, 2026-10-08): the QR code, scanned with the phone's camera, opens the page and logs in; the page lists the card, in the phone's dark theme. -**Not checked:** the phone's camera on the QR code. Safari. A card pulled during a transfer. Sharing with IRC connected, when memory is shorter. Home, and the screen turning off, while sharing (the code stops the server on leaving the App; only Back was tried). +**Not checked:** Safari. A card pulled during a transfer. Sharing with IRC connected, when memory is shorter. Home, and the screen turning off, while sharing (the code stops the server on leaving the App; only Back was tried). diff --git a/site/content/devlog/roro9stack-share/index.md b/site/content/devlog/roro9stack-share/index.md index 3374967..39e5899 100644 --- a/site/content/devlog/roro9stack-share/index.md +++ b/site/content/devlog/roro9stack-share/index.md @@ -56,7 +56,7 @@ I'll skip the build-up. I pressed `w`. This came up: {{ figure(src="share.png", alt="The Cardputer's screen at 2x: a large QR code on the left; on the right, In a browser, on this network: 172.16.42.25/, Code 825 132 in large blue digits, Nothing asked yet, Not encrypted, and backtick stops sharing.", width=480, height=270, caption="The whole feature, as the device sees it. The code in this picture stopped being valid the moment I pressed Back.") }} -I picked up my phone, and there was my SD card, in the browser. **It works. That's fucking awesome.** +I pointed my phone's camera at the QR code, and there was my SD card, in the browser. No address to type, no code to type. **It works. That's fucking awesome.** {{ figure(src="phone.png", alt="A phone's browser in dark mode at the address 172.16.42.25, at 00:15: roro9stack: the SD card, a link SD card, a bright blue Upload files button and a New folder button, then rows captures, gemini, gnss, irc, notes, screenshots, updates and wifi, each with a Delete button.", width=462, height=1001, caption="My phone, at a quarter past midnight. Its browser, my card, nothing else.") }} -- 2.53.0 From e3fe618c7fdc406f04c29e2e5b9be8159114660d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Martin?= Date: Thu, 8 Oct 2026 00:35:15 +0200 Subject: [PATCH 5/5] Devlog: "Press w" is v0.18.0 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT --- site/content/devlog/roro9stack-share/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/site/content/devlog/roro9stack-share/index.md b/site/content/devlog/roro9stack-share/index.md index 39e5899..ed0968d 100644 --- a/site/content/devlog/roro9stack-share/index.md +++ b/site/content/devlog/roro9stack-share/index.md @@ -43,7 +43,7 @@ text = "Every byte in either direction goes through it, 8 KB at a time. It was t ## TL;DR -- **Press `w` in the Storage App**, scan the QR code with a phone on the same Wi-Fi, and the SD card is a web page: list, download, upload, new folder, delete. +- **Press `w` in the Storage App** (**v0.18.0**), scan the QR code with a phone on the same Wi-Fi, and the SD card is a web page: list, download, upload, new folder, delete. - **Nothing to install**, on the phone or anywhere else. That was the whole point. - **It runs only while that screen is open.** A six-digit code, new each time, keeps the rest of the network out. - **It is not encrypted,** and the screen says so. Fine at home; think first elsewhere. @@ -178,7 +178,7 @@ The day didn't stop at the [last post](/devlog/roro9stack-shell/): 10. ~~Pictures, and a screenshot key.~~ v0.16.0 and v0.17.0. -11. ~~The card in a phone's browser.~~ This post. Not released yet: it's in a pull request as I write. +11. ~~The card in a phone's browser.~~ v0.18.0, this post. 12. Next: the WireGuard tunnel, once it has talked to a real server. And M4, the mesh, which still wants a second node. {% end %} -- 2.53.0