Use proper js modules for apps. Kludge enough things to make things seem to work. Need to apply this to core still.

git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3862 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
2022-03-18 01:24:29 +00:00
parent 9b2d4b393d
commit 00bdf1df4a
4 changed files with 107 additions and 57 deletions

View File

@ -5,7 +5,6 @@ var app = require("app");
var gProcessIndex = 0;
var gProcesses = {};
var gSessionIndex = 0;
var gStatsTimer = false;
var gGlobalSettings = {
@ -16,26 +15,6 @@ var kGlobalSettingsFile = "data/global/settings.json";
var kPingInterval = 60 * 1000;
function getCookies(headers) {
var cookies = {};
if (headers.cookie) {
var parts = headers.cookie.split(/,|;/);
for (var i in parts) {
var equals = parts[i].indexOf("=");
var name = parts[i].substring(0, equals).trim();
var value = parts[i].substring(equals + 1).trim();
cookies[name] = value;
}
}
return cookies;
}
function makeSessionId() {
return (gSessionIndex++).toString();
}
function printError(out, error) {
if (error.stackTrace) {
out.print(error.fileName + ":" + error.lineNumber + ": " + error.message);
@ -154,7 +133,7 @@ async function getProcessBlob(blobId, key, options) {
process.credentials = options.credentials || {};
process.task = new Task();
process.eventHandlers = {};
process.app = new App();
process.app = new app.App();
process.lastActive = Date.now();
process.lastPing = null;
process.timeout = options.timeout;
@ -233,14 +212,14 @@ async function getProcessBlob(blobId, key, options) {
var appSourceName = blobId;
var appSource = utf8Decode(source);
try {
var app = JSON.parse(appSource);
if (app.type == "tildefriends-app") {
var appObject = JSON.parse(appSource);
if (appObject.type == "tildefriends-app") {
appSourceName = 'app.js';
var id = app.files[appSourceName];
var id = appObject.files[appSourceName];
var blob = await getBlobOrContent(id);
appSource = utf8Decode(blob);
await Promise.all(Object.keys(app.files).map(async function(f) {
await process.task.loadFile([f, await getBlobOrContent(app.files[f])]);
await Promise.all(Object.keys(appObject.files).map(async function(f) {
await process.task.loadFile([f, await getBlobOrContent(appObject.files[f])]);
}));
}
} catch (e) {
@ -444,8 +423,8 @@ async function blobHandler(request, response, blobId, uri) {
} else {
data = await getBlobOrContent(id);
if (match[3]) {
var app = JSON.parse(data);
data = app.files[match[3]];
var appObject = JSON.parse(data);
data = appObject.files[match[3]];
}
sendData(response, data, undefined, {etag: '"' + id + '"'});
}
@ -462,7 +441,7 @@ async function blobHandler(request, response, blobId, uri) {
var match;
if (match = /^\/\~(\w+)\/(\w+)$/.exec(blobId)) {
var user = match[1];
var app = match[2];
var appName = match[2];
var credentials = auth.query(request.headers);
if (credentials && credentials.session &&
(credentials.session.name == user ||
@ -473,11 +452,11 @@ async function blobHandler(request, response, blobId, uri) {
apps = new Set(JSON.parse(database.get('apps')));
} catch {
}
if (!apps.has(app)) {
apps.add(app);
if (!apps.has(appName)) {
apps.add(appName);
database.set('apps', JSON.stringify([...apps]));
}
database.set('path:' + app, newBlobId);
database.set('path:' + appName, newBlobId);
} else {
response.writeHead(401, {"Content-Type": "text/plain; charset=utf-8"});
response.end("401 Unauthorized");
@ -500,8 +479,8 @@ async function blobHandler(request, response, blobId, uri) {
response.end();
} else {
data = utf8Decode(await getBlobOrContent(id));
var app = JSON.parse(data);
data = app.files[uri.substring(1)];
var appObject = JSON.parse(data);
data = appObject.files[uri.substring(1)];
data = await getBlobOrContent(data);
type = guessType(uri);
headers = {'ETag': '"' + id + '"'};
@ -512,8 +491,8 @@ async function blobHandler(request, response, blobId, uri) {
}
} else {
data = utf8Decode(await getBlobOrContent(blobId));
var app = JSON.parse(data);
data = app.files[uri.substring(1)];
var appObject = JSON.parse(data);
data = appObject.files[uri.substring(1)];
data = await getBlobOrContent(data);
sendData(response, data, type, headers);
}
@ -608,3 +587,8 @@ loadSettings().then(function() {
}).catch(function(error) {
print('Failed to load settings.');
});
exports.getSessionProcessBlob = getSessionProcessBlob;
exports.invoke = invoke;
exports.globalSettings = gGlobalSettings;
exports.setGlobalSettings = setGlobalSettings;