Serve core static files without leaving C.

git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4833 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
2024-02-09 01:21:57 +00:00
parent e87acc6286
commit ed2d57fb4b
8 changed files with 323 additions and 48 deletions

View File

@ -11,7 +11,7 @@
<tf-auth id="auth"></tf-auth>
<script>window.litDisableBundleWarning = true;</script>
<script type="module">
import {LitElement, html} from '/static/lit/lit-all.min.js';
import {LitElement, html} from '/lit/lit-all.min.js';
let g_data = $AUTH_DATA;
let app = document.getElementById('auth');
Object.assign(app, g_data);

View File

@ -1,4 +1,4 @@
import {LitElement, html, css, svg} from '/static/lit/lit-all.min.js';
import {LitElement, html, css, svg} from '/lit/lit-all.min.js';
let cm6;
let gSocket;

View File

@ -35,12 +35,6 @@ const k_magic_bytes = [
let k_static_files = [
{uri: '/', path: 'index.html', type: 'text/html; charset=UTF-8'},
{uri: '/client.js', type: 'text/javascript; charset=UTF-8'},
{uri: '/favicon.png', type: 'image/png'},
{uri: '/jszip.min.js', type: 'text/javascript; charset=UTF-8'},
{uri: '/style.css', type: 'text/css; charset=UTF-8'},
{uri: '/tfrpc.js', type: 'text/javascript; charset=UTF-8', headers: {'Access-Control-Allow-Origin': 'null'}},
{uri: '/w3.css', type: 'text/css; charset=UTF-8'},
];
const k_global_settings = {
@ -562,37 +556,6 @@ function startsWithBytes(data, bytes) {
}
}
async function staticFileHandler(request, response, blobId, uri) {
for (let i in k_static_files) {
if (uri === k_static_files[i].uri) {
let path = k_static_files[i].path || uri.substring(1);
let type = k_static_files[i].type || guessTypeFromName(path);
let stat = await File.stat('core/' + path);
let id = `${stat.mtime}_${stat.size}`;
if (request.headers['if-none-match'] === '"' + id + '"') {
response.writeHead(304, {'Content-Length': '0'});
response.end();
} else {
let data = await File.readFile('core/' + path);
response.writeHead(200, Object.assign(
{
'Content-Type': type,
'Content-Length': data.byteLength,
'etag': '"' + id + '"',
},
k_static_files[i].headers || {}));
response.end(data);
}
return;
}
}
response.writeHead(404, {"Content-Type": "text/plain; charset=utf-8", "Content-Length": "File not found".length});
response.end("File not found");
}
async function staticDirectoryHandler(request, response, directory, uri) {
let filename = uri || 'index.html';
if (filename.indexOf('..') != -1) {
@ -983,6 +946,7 @@ loadSettings().then(function() {
httpd.set_http_redirect(gGlobalSettings.http_redirect);
}
httpd.all("/login", auth.handler);
httpd.all("/login/logout", auth.handler);
httpd.all("/app/socket", app.socket);
httpd.all("", function default_http_handler(request, response) {
let match;
@ -1004,14 +968,12 @@ loadSettings().then(function() {
return blobHandler(request, response, match[1], match[2]);
} else if (match = /^\/([&\%][^\.]{44}(?:\.\w+)?)(\/?.*)/.exec(request.uri)) {
return blobHandler(request, response, match[1], match[2]);
} else if (match = /^\/static\/lit\/([\.\w-/]*)$/.exec(request.uri)) {
} else if (match = /^\/lit\/([\.\w-/]*)$/.exec(request.uri)) {
return staticDirectoryHandler(request, response, 'deps/lit/', match[1]);
} else if (match = /^\/codemirror\/([\.\w-/]*)$/.exec(request.uri)) {
return staticDirectoryHandler(request, response, 'deps/codemirror/', match[1]);
} else if (match = /^\/speedscope\/([\.\w-/]*)$/.exec(request.uri)) {
return staticDirectoryHandler(request, response, 'deps/speedscope/', match[1]);
} else if (match = /^\/static(\/.*)/.exec(request.uri)) {
return staticFileHandler(request, response, null, match[1]);
} else if (match = /^(.*)(\/(?:save|delete)?)$/.exec(request.uri)) {
return blobHandler(request, response, match[1], match[2]);
} else if ((match = /^\/.well-known\/(.*)/.exec(request.uri)) && request.uri.indexOf("..") == -1) {