aboutsummaryrefslogtreecommitdiffstats
path: root/src/server/HttpServer.hx
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2026-10-19 15:32:53 -0700
committerPinapelz <yukais@pinapelz.com>2026-10-19 15:32:53 -0700
commit304bd1e77a5442f614aacd2b35f330777118b2cd (patch)
tree970e7da13bb1bd8edf1f9b453af4d0994c665e94 /src/server/HttpServer.hx
parenta4f3064542ddad6939598e7e60ca0090be07df60 (diff)
merge with upstream https://github.com/RblSb/SyncTubeHEADmaster
Diffstat (limited to 'src/server/HttpServer.hx')
-rw-r--r--src/server/HttpServer.hx26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/server/HttpServer.hx b/src/server/HttpServer.hx
index bcbf9aa..7bd42f4 100644
--- a/src/server/HttpServer.hx
+++ b/src/server/HttpServer.hx
@@ -22,6 +22,7 @@ private class HttpServerConfig {
public final dir:String;
public final customDir:String = null;
public final allowLocalRequests = false;
+ public final enableCORS = false;
public final cache:Cache = null;
}
@@ -68,6 +69,7 @@ class HttpServer {
final hasCustomRes = false;
final allowedLocalFiles:Map<String, Bool> = [];
final allowLocalRequests = false;
+ final enableCORS = false;
final cache:Cache = null;
final CHUNK_SIZE = 1024 * 1024 * 5; // 5 MB
// temp media data while file is uploading to allow instant streaming
@@ -79,6 +81,7 @@ class HttpServer {
dir = config.dir;
customDir = config.customDir;
allowLocalRequests = config.allowLocalRequests;
+ enableCORS = config.enableCORS;
cache = config.cache;
if (customDir != null) hasCustomRes = FileSystem.exists(customDir);
@@ -93,6 +96,18 @@ class HttpServer {
var filePath = getPath(dir, url);
final ext = Path.extension(filePath).toLowerCase();
+ if (enableCORS) {
+ res.setHeader("access-control-allow-origin", "*");
+ res.setHeader("access-control-allow-headers", "content-type, range, content-name, x-client-uuid");
+ res.setHeader("access-control-expose-headers", "accept-ranges, content-encoding, content-length, content-range");
+ if (req.method == "OPTIONS") {
+ res.setHeader("access-control-allow-methods", "GET, HEAD, POST, OPTIONS");
+ res.statusCode = 204;
+ res.end();
+ return;
+ }
+ }
+
res.setHeader("accept-ranges", "bytes");
res.setHeader("content-type", getMimeType(ext));
@@ -255,7 +270,6 @@ class HttpServer {
info: cache.notEnoughSpaceErrorText,
errorId: "freeSpace",
});
- cache.remove(name);
req.destroy();
final client = main.clients.getByName(name) ?? return;
main.serverMessage(client, cache.notEnoughSpaceErrorText);
@@ -453,10 +467,16 @@ class HttpServer {
}
function parseRangeHeader(rangeHeader:String, videoSize:Int):{start:Int, end:Int} {
- final ranges = ~/[-=]/g.split(rangeHeader);
+ final ranges = ~/[=-]/g.split(rangeHeader);
var start = Std.parseInt(ranges[1]);
- if (Utils.isOutOfRange(start, 0, videoSize - 1)) start = 0;
var end = Std.parseInt(ranges[2]);
+ // handle file end requests like `bytes=-500`: ["bytes","","500"]
+ if (start == null) {
+ final suffix = end ?? 0;
+ start = (videoSize - suffix).limitMin(0);
+ end = videoSize - 1;
+ }
+ if (Utils.isOutOfRange(start, 0, videoSize - 1)) start = 0;
if (end == null) end = start + CHUNK_SIZE;
if (Utils.isOutOfRange(end, start, videoSize - 1)) end = (videoSize - 1).limitMin(0);
return {
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage