aboutsummaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
Diffstat (limited to 'build')
-rw-r--r--build/server.js280
1 files changed, 198 insertions, 82 deletions
diff --git a/build/server.js b/build/server.js
index 6351cff..c2b42ef 100644
--- a/build/server.js
+++ b/build/server.js
@@ -1304,6 +1304,43 @@ JsonParser_$8d3a3702ec359ae3022bce905b75550b.prototype = $extend(json2object_rea
}
,__class__: JsonParser_$8d3a3702ec359ae3022bce905b75550b
});
+var JsonParser_$9dc54ddefde837b3151ea03ad5d1144e = function(errors,putils,errorType) {
+ if(errorType == null) {
+ errorType = 0;
+ }
+ json2object_reader_BaseParser.call(this,errors,putils,errorType);
+};
+JsonParser_$9dc54ddefde837b3151ea03ad5d1144e.__name__ = true;
+JsonParser_$9dc54ddefde837b3151ea03ad5d1144e.__super__ = json2object_reader_BaseParser;
+JsonParser_$9dc54ddefde837b3151ea03ad5d1144e.prototype = $extend(json2object_reader_BaseParser.prototype,{
+ onIncorrectType: function(pos,variable) {
+ this.errors.push(json2object_Error.IncorrectType(variable,"{ password : String }",pos));
+ json2object_reader_BaseParser.prototype.onIncorrectType.call(this,pos,variable);
+ }
+ ,loadJsonNull: function(pos,variable) {
+ this.value = null;
+ }
+ ,loadJsonObject: function(o,pos,variable) {
+ var assigned = new haxe_ds_StringMap();
+ this.objectSetupAssign(assigned,["password"],[false]);
+ this.value = this.getAuto();
+ var _g = 0;
+ while(_g < o.length) {
+ var field = o[_g];
+ ++_g;
+ if(field.name == "password") {
+ this.value.password = this.loadObjectField(($_=new JsonParser_$27118326006d3829667a400ad23d5d98(this.errors,this.putils,1),$bind($_,$_.loadJson)),field,"password",assigned,this.value.password,pos);
+ } else {
+ this.errors.push(json2object_Error.UnknownVariable(field.name,this.putils.convertPosition(field.namePos)));
+ }
+ }
+ this.objectErrors(assigned,pos);
+ }
+ ,getAuto: function() {
+ return { password : new JsonParser_$27118326006d3829667a400ad23d5d98([],this.putils,0).loadJson(new hxjsonast_Json(hxjsonast_JsonValue.JNull,new hxjsonast_Position("",0,1)))};
+ }
+ ,__class__: JsonParser_$9dc54ddefde837b3151ea03ad5d1144e
+});
var JsonParser_$a82c17fc41c21179c58e1d406d2b20cd = function(errors,putils,errorType) {
if(errorType == null) {
errorType = 0;
@@ -1696,6 +1733,54 @@ JsonParser_$d1c1e71f4452df068de6cecc104f6dd6.prototype = $extend(json2object_rea
}
,__class__: JsonParser_$d1c1e71f4452df068de6cecc104f6dd6
});
+var JsonParser_$d581436aae29874719279c60b2eb25d0 = function(errors,putils,errorType) {
+ if(errorType == null) {
+ errorType = 0;
+ }
+ json2object_reader_BaseParser.call(this,errors,putils,errorType);
+};
+JsonParser_$d581436aae29874719279c60b2eb25d0.__name__ = true;
+JsonParser_$d581436aae29874719279c60b2eb25d0.__super__ = json2object_reader_BaseParser;
+JsonParser_$d581436aae29874719279c60b2eb25d0.prototype = $extend(json2object_reader_BaseParser.prototype,{
+ onIncorrectType: function(pos,variable) {
+ this.errors.push(json2object_Error.IncorrectType(variable,"{ token : String, passwordConfirmation : String, password : String, name : String }",pos));
+ json2object_reader_BaseParser.prototype.onIncorrectType.call(this,pos,variable);
+ }
+ ,loadJsonNull: function(pos,variable) {
+ this.value = null;
+ }
+ ,loadJsonObject: function(o,pos,variable) {
+ var assigned = new haxe_ds_StringMap();
+ this.objectSetupAssign(assigned,["name","password","passwordConfirmation","token"],[false,false,false,false]);
+ this.value = this.getAuto();
+ var _g = 0;
+ while(_g < o.length) {
+ var field = o[_g];
+ ++_g;
+ switch(field.name) {
+ case "name":
+ this.value.name = this.loadObjectField(($_=new JsonParser_$27118326006d3829667a400ad23d5d98(this.errors,this.putils,1),$bind($_,$_.loadJson)),field,"name",assigned,this.value.name,pos);
+ break;
+ case "password":
+ this.value.password = this.loadObjectField(($_=new JsonParser_$27118326006d3829667a400ad23d5d98(this.errors,this.putils,1),$bind($_,$_.loadJson)),field,"password",assigned,this.value.password,pos);
+ break;
+ case "passwordConfirmation":
+ this.value.passwordConfirmation = this.loadObjectField(($_=new JsonParser_$27118326006d3829667a400ad23d5d98(this.errors,this.putils,1),$bind($_,$_.loadJson)),field,"passwordConfirmation",assigned,this.value.passwordConfirmation,pos);
+ break;
+ case "token":
+ this.value.token = this.loadObjectField(($_=new JsonParser_$27118326006d3829667a400ad23d5d98(this.errors,this.putils,1),$bind($_,$_.loadJson)),field,"token",assigned,this.value.token,pos);
+ break;
+ default:
+ this.errors.push(json2object_Error.UnknownVariable(field.name,this.putils.convertPosition(field.namePos)));
+ }
+ }
+ this.objectErrors(assigned,pos);
+ }
+ ,getAuto: function() {
+ return { name : new JsonParser_$27118326006d3829667a400ad23d5d98([],this.putils,0).loadJson(new hxjsonast_Json(hxjsonast_JsonValue.JNull,new hxjsonast_Position("",0,1))), password : new JsonParser_$27118326006d3829667a400ad23d5d98([],this.putils,0).loadJson(new hxjsonast_Json(hxjsonast_JsonValue.JNull,new hxjsonast_Position("",0,1))), passwordConfirmation : new JsonParser_$27118326006d3829667a400ad23d5d98([],this.putils,0).loadJson(new hxjsonast_Json(hxjsonast_JsonValue.JNull,new hxjsonast_Position("",0,1))), token : new JsonParser_$27118326006d3829667a400ad23d5d98([],this.putils,0).loadJson(new hxjsonast_Json(hxjsonast_JsonValue.JNull,new hxjsonast_Position("",0,1)))};
+ }
+ ,__class__: JsonParser_$d581436aae29874719279c60b2eb25d0
+});
var JsonParser_$d7778d0c64b6ba21494c97f77a66885a = function(errors,putils,errorType) {
if(errorType == null) {
errorType = 0;
@@ -2034,51 +2119,6 @@ JsonParser_$ed5dea09095f671b801bee34ea28a319.prototype = $extend(json2object_rea
}
,__class__: JsonParser_$ed5dea09095f671b801bee34ea28a319
});
-var JsonParser_$f3c29c0813c93ee49a61ccf072b8a177 = function(errors,putils,errorType) {
- if(errorType == null) {
- errorType = 0;
- }
- json2object_reader_BaseParser.call(this,errors,putils,errorType);
-};
-JsonParser_$f3c29c0813c93ee49a61ccf072b8a177.__name__ = true;
-JsonParser_$f3c29c0813c93ee49a61ccf072b8a177.__super__ = json2object_reader_BaseParser;
-JsonParser_$f3c29c0813c93ee49a61ccf072b8a177.prototype = $extend(json2object_reader_BaseParser.prototype,{
- onIncorrectType: function(pos,variable) {
- this.errors.push(json2object_Error.IncorrectType(variable,"{ passwordConfirmation : String, password : String, name : String }",pos));
- json2object_reader_BaseParser.prototype.onIncorrectType.call(this,pos,variable);
- }
- ,loadJsonNull: function(pos,variable) {
- this.value = null;
- }
- ,loadJsonObject: function(o,pos,variable) {
- var assigned = new haxe_ds_StringMap();
- this.objectSetupAssign(assigned,["name","password","passwordConfirmation"],[false,false,false]);
- this.value = this.getAuto();
- var _g = 0;
- while(_g < o.length) {
- var field = o[_g];
- ++_g;
- switch(field.name) {
- case "name":
- this.value.name = this.loadObjectField(($_=new JsonParser_$27118326006d3829667a400ad23d5d98(this.errors,this.putils,1),$bind($_,$_.loadJson)),field,"name",assigned,this.value.name,pos);
- break;
- case "password":
- this.value.password = this.loadObjectField(($_=new JsonParser_$27118326006d3829667a400ad23d5d98(this.errors,this.putils,1),$bind($_,$_.loadJson)),field,"password",assigned,this.value.password,pos);
- break;
- case "passwordConfirmation":
- this.value.passwordConfirmation = this.loadObjectField(($_=new JsonParser_$27118326006d3829667a400ad23d5d98(this.errors,this.putils,1),$bind($_,$_.loadJson)),field,"passwordConfirmation",assigned,this.value.passwordConfirmation,pos);
- break;
- default:
- this.errors.push(json2object_Error.UnknownVariable(field.name,this.putils.convertPosition(field.namePos)));
- }
- }
- this.objectErrors(assigned,pos);
- }
- ,getAuto: function() {
- return { name : new JsonParser_$27118326006d3829667a400ad23d5d98([],this.putils,0).loadJson(new hxjsonast_Json(hxjsonast_JsonValue.JNull,new hxjsonast_Position("",0,1))), password : new JsonParser_$27118326006d3829667a400ad23d5d98([],this.putils,0).loadJson(new hxjsonast_Json(hxjsonast_JsonValue.JNull,new hxjsonast_Position("",0,1))), passwordConfirmation : new JsonParser_$27118326006d3829667a400ad23d5d98([],this.putils,0).loadJson(new hxjsonast_Json(hxjsonast_JsonValue.JNull,new hxjsonast_Position("",0,1)))};
- }
- ,__class__: JsonParser_$f3c29c0813c93ee49a61ccf072b8a177
-});
var JsonParser_$f55acea3678203c700715b781ad1ef0c = function(errors,putils,errorType) {
if(errorType == null) {
errorType = 0;
@@ -2302,17 +2342,6 @@ Lambda.findIndex = function(it,f) {
}
return -1;
};
-var haxe_IMap = function() { };
-haxe_IMap.__name__ = true;
-haxe_IMap.__isInterface__ = true;
-var haxe_ds_StringMap = function() {
- this.h = Object.create(null);
-};
-haxe_ds_StringMap.__name__ = true;
-haxe_ds_StringMap.__interfaces__ = [haxe_IMap];
-haxe_ds_StringMap.prototype = {
- __class__: haxe_ds_StringMap
-};
var Lang = function() { };
Lang.__name__ = true;
Lang.request = function(path,callback) {
@@ -2585,6 +2614,9 @@ VideoList.prototype = {
}
,__class__: VideoList
};
+var haxe_IMap = function() { };
+haxe_IMap.__name__ = true;
+haxe_IMap.__isInterface__ = true;
var haxe_Exception = function(message,previous,native) {
Error.call(this,message);
this.message = message;
@@ -2822,6 +2854,14 @@ haxe_crypto_Sha256.prototype = {
}
,__class__: haxe_crypto_Sha256
};
+var haxe_ds_StringMap = function() {
+ this.h = Object.create(null);
+};
+haxe_ds_StringMap.__name__ = true;
+haxe_ds_StringMap.__interfaces__ = [haxe_IMap];
+haxe_ds_StringMap.prototype = {
+ __class__: haxe_ds_StringMap
+};
var haxe_exceptions_PosException = function(message,previous,pos) {
haxe_Exception.call(this,message,previous);
if(pos == null) {
@@ -3958,8 +3998,13 @@ server_HttpServer.prototype = {
break;
}
}
- if(url.pathname == "/setup") {
- this.finishSetup(req,res);
+ switch(url.pathname) {
+ case "/admin-register":
+ this.registerAdmin(req,res);
+ break;
+ case "/gate":
+ this.verifyGate(req,res);
+ break;
}
return;
}
@@ -3978,8 +4023,8 @@ server_HttpServer.prototype = {
res.end("Error getting the file: No access to " + rel + ".");
return;
}
- if(url.pathname == "/setup") {
- if(this.main.hasAdmins()) {
+ if(url.pathname == "/gate") {
+ if(!this.hasGatePassword() || this.hasValidGateCookie(req)) {
tools_HttpServerTools.redirect(res,"/");
return;
}
@@ -3990,6 +4035,22 @@ server_HttpServer.prototype = {
});
return;
}
+ if(url.pathname == "/admin-register") {
+ if(!this.hasAdminToken()) {
+ tools_HttpServerTools.redirect(res,"/");
+ return;
+ }
+ js_node_Fs.readFile("" + this.dir + "/admin-register.html",function(err,data) {
+ if(err != null) {
+ _gthis.readFileError(err,res,"" + _gthis.dir + "/admin-register.html");
+ return;
+ }
+ data = js_node_buffer_Buffer.from(_gthis.localizeHtml(data.toString(),req.headers["accept-language"]));
+ res.setHeader("content-type",_gthis.getMimeType("html"));
+ res.end(data);
+ });
+ return;
+ }
if(url.pathname == "/proxy") {
if(!this.proxyUrl(req,res)) {
res.end("Proxy error: " + req.url);
@@ -4015,8 +4076,8 @@ server_HttpServer.prototype = {
return;
}
if(ext == "html") {
- if(!_gthis.main.isNoState && !_gthis.main.hasAdmins()) {
- tools_HttpServerTools.redirect(res,"/setup");
+ if(_gthis.hasGatePassword() && !_gthis.hasValidGateCookie(req)) {
+ tools_HttpServerTools.redirect(res,"/gate");
return;
}
data = _gthis.localizeHtml(data.toString(),req.headers["accept-language"]);
@@ -4104,7 +4165,7 @@ server_HttpServer.prototype = {
}
});
stream.on("error",function(err) {
- haxe_Log.trace(err,{ fileName : "src/server/HttpServer.hx", lineNumber : 231, className : "server.HttpServer", methodName : "uploadFile"});
+ haxe_Log.trace(err,{ fileName : "src/server/HttpServer.hx", lineNumber : 256, className : "server.HttpServer", methodName : "uploadFile"});
tools_HttpServerTools.json(tools_HttpServerTools.status(res,500),{ info : "File write stream error."});
var _this = _gthis.uploadingFilesSizes;
if(Object.prototype.hasOwnProperty.call(_this.h,filePath)) {
@@ -4117,7 +4178,7 @@ server_HttpServer.prototype = {
_gthis.cache.remove(name);
});
req.on("error",function(err) {
- haxe_Log.trace("Request Error:",{ fileName : "src/server/HttpServer.hx", lineNumber : 238, className : "server.HttpServer", methodName : "uploadFile", customParams : [err]});
+ haxe_Log.trace("Request Error:",{ fileName : "src/server/HttpServer.hx", lineNumber : 263, className : "server.HttpServer", methodName : "uploadFile", customParams : [err]});
stream.destroy();
tools_HttpServerTools.json(tools_HttpServerTools.status(res,500),{ info : "File request error."});
var _this = _gthis.uploadingFilesSizes;
@@ -4131,9 +4192,9 @@ server_HttpServer.prototype = {
_gthis.cache.remove(name);
});
}
- ,finishSetup: function(req,res) {
+ ,verifyGate: function(req,res) {
var _gthis = this;
- if(this.main.hasAdmins()) {
+ if(!this.hasGatePassword()) {
tools_HttpServerTools.redirect(res,"/");
return;
}
@@ -4143,30 +4204,88 @@ server_HttpServer.prototype = {
});
req.on("end",function() {
var body = js_node_buffer_Buffer.concat(bodyChunks).toString();
- var jsonParser = new JsonParser_$f3c29c0813c93ee49a61ccf072b8a177();
+ var jsonParser = new JsonParser_$9dc54ddefde837b3151ea03ad5d1144e();
+ var jsonData = jsonParser.fromJson(body);
+ if(jsonParser.errors.length > 0) {
+ tools_HttpServerTools.json(tools_HttpServerTools.status(res,400),{ success : false});
+ return;
+ }
+ if(jsonData.password == _gthis.main.config.gatePassword) {
+ var token = _gthis.getGateToken();
+ res.setHeader("set-cookie","gate_auth=" + token + "; Path=/; HttpOnly; SameSite=Strict");
+ tools_HttpServerTools.json(tools_HttpServerTools.status(res,200),{ success : true});
+ } else {
+ tools_HttpServerTools.json(tools_HttpServerTools.status(res,401),{ success : false});
+ }
+ });
+ }
+ ,hasGatePassword: function() {
+ var gp = this.main.config.gatePassword;
+ if(gp != null) {
+ return gp.length > 0;
+ } else {
+ return false;
+ }
+ }
+ ,hasValidGateCookie: function(req) {
+ var cookieHeader = req.headers["cookie"];
+ if(cookieHeader == null) {
+ return false;
+ }
+ var needle = "gate_auth=" + this.getGateToken();
+ var _g = 0;
+ var _g1 = cookieHeader.split(";");
+ while(_g < _g1.length) if(StringTools.trim(_g1[_g++]) == needle) {
+ return true;
+ }
+ return false;
+ }
+ ,getGateToken: function() {
+ return haxe_crypto_Sha256.encode("gate_" + this.main.config.gatePassword + "_" + this.main.config.salt);
+ }
+ ,hasAdminToken: function() {
+ var t = this.main.config.adminToken;
+ if(t != null) {
+ return t.length > 0;
+ } else {
+ return false;
+ }
+ }
+ ,registerAdmin: function(req,res) {
+ var _gthis = this;
+ if(!this.hasAdminToken()) {
+ tools_HttpServerTools.json(tools_HttpServerTools.status(res,403),{ success : false, error : "Admin registration is disabled"});
+ return;
+ }
+ var bodyChunks = [];
+ req.on("data",function(chunk) {
+ return bodyChunks.push(chunk);
+ });
+ req.on("end",function() {
+ var body = js_node_buffer_Buffer.concat(bodyChunks).toString();
+ var jsonParser = new JsonParser_$d581436aae29874719279c60b2eb25d0();
var jsonData = jsonParser.fromJson(body);
if(jsonParser.errors.length > 0) {
- haxe_Log.trace(json2object_ErrorUtils.convertErrorArray(jsonParser.errors),{ fileName : "src/server/HttpServer.hx", lineNumber : 264, className : "server.HttpServer", methodName : "finishSetup"});
- tools_HttpServerTools.json(tools_HttpServerTools.status(res,400),{ success : false, errors : []});
+ tools_HttpServerTools.json(tools_HttpServerTools.status(res,400),{ success : false, error : "Invalid request"});
return;
}
- var name = jsonData.name;
+ var name = StringTools.trim(jsonData.name);
var password = jsonData.password;
var passwordConfirmation = jsonData.passwordConfirmation;
- var tmp = req.headers["accept-language"];
- var lang = tmp != null ? tmp : "en";
- var errors = [];
+ if(jsonData.token != _gthis.main.config.adminToken) {
+ tools_HttpServerTools.json(tools_HttpServerTools.status(res,401),{ success : false, error : "Invalid admin token"});
+ return;
+ }
if(_gthis.main.isBadClientName(name)) {
- errors.push({ type : "name", error : StringTools.replace(Lang.get(lang,"usernameError"),"$MAX","" + _gthis.main.config.maxLoginLength)});
+ tools_HttpServerTools.json(tools_HttpServerTools.status(res,400),{ success : false, error : "Invalid username"});
+ return;
}
if(password.length < 4 || password.length > 50) {
- errors.push({ type : "password", error : StringTools.replace(StringTools.replace(Lang.get(lang,"passwordError"),"$MIN","" + 4),"$MAX","" + 50)});
+ tools_HttpServerTools.json(tools_HttpServerTools.status(res,400),{ success : false, error : "Password must be " + 4 + "-" + 50 + " characters"});
+ return;
}
if(password != passwordConfirmation) {
- errors.push({ type : "password", error : Lang.get(lang,"passwordsMismatchError")});
- }
- if(errors.length > 0) {
- tools_HttpServerTools.json(tools_HttpServerTools.status(res,400),{ success : false, errors : errors});
+ tools_HttpServerTools.json(tools_HttpServerTools.status(res,400),{ success : false, error : "Passwords do not match"});
return;
}
_gthis.main.addAdmin(name,password);
@@ -4856,9 +4975,6 @@ server_Main.prototype = {
}));
haxe_Log.trace("Admin " + name + " removed.",{ fileName : "src/server/Main.hx", lineNumber : 443, className : "server.Main", methodName : "removeAdmin"});
}
- ,hasAdmins: function() {
- return this.userList.admins.length > 0;
- }
,replayLog: function(events) {
var _gthis = this;
var timer = new haxe_Timer(1000);
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage