Warning: session_start(): open(/var/lib/php/sessions/sess_sg0vhvv89kvhd36q0i2isu76kr, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51

Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
// TODO: only works with NanoHTTPD for now sclass HttpFromFileSystem { File baseDir; bool serveDirectoryListings; O serve(S uri) { LS parts = nempties(splitAtSlash(uri)); // process . and .. for i over parts: if (eq(parts.get(i), ".")) parts.remove(i); else if (eq(parts.get(i), "..")) if (i == 0) fail(".. leading nowhere: " + uri); else { parts.remove(i); parts.remove(--i); } if (all validFileName(parts)) fail("Bad path: " + uri); File f = baseDir; if (!isDirectory(dir)) print("Base dir not found: " + f2s(f)); for (S part : parts) { f = newFile(f, part); if (!fileExists(f)) fail("Path not found: " + uri); } if (isDirectory(f)) ret serveListing(f); else ret serveFile(f); } O serveFile(File f) { ret main serveFile(f, contentTypeForFile(f)); } O serveListing(File dir) { if (!serveDirectoryListings) fail("Can't serve directory listings"); ret "Directory listing" + ul_htmlEncode(listFileNames(dir)); } swappable S contentTypeForFile(File f) { ret or2(extensionToMimeType(f), binaryMimeType()); } swappable bool validFileName(S name) { ret isValidFileName(name); } }