2025-10-01 19:55:38 +02:00

88 lines
3.3 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var WebDAVRequest_1 = require("../WebDAVRequest");
var Errors_1 = require("../../../Errors");
var https = require("https");
var http = require("http");
function executeRequest(req, res, rootPath) {
var _this = this;
var method = this.methods[this.normalizeMethodName(req.method)];
if (!method)
method = this.unknownMethod;
WebDAVRequest_1.HTTPRequestContext.create(this, req, res, rootPath, function (e, base) {
if (e) {
if (e === Errors_1.Errors.AuenticationPropertyMissing || e === Errors_1.Errors.MissingAuthorisationHeader || e === Errors_1.Errors.BadAuthentication || e === Errors_1.Errors.WrongHeaderFormat)
base.setCode(WebDAVRequest_1.HTTPCodes.Unauthorized);
else
base.setCode(WebDAVRequest_1.HTTPCodes.InternalServerError);
res.end();
return;
}
base.exit = function () {
base.response.end();
_this.invokeAfterRequest(base, null);
};
if (!method.chunked) {
var go_1 = function (data) {
_this.invokeBeforeRequest(base, function () {
method.unchunked(base, data, base.exit);
});
};
if (base.headers.contentLength <= 0) {
go_1(Buffer.alloc(0));
}
else {
var data_1 = Buffer.alloc(base.headers.contentLength);
var index_1 = 0;
req.on('data', function (chunk) {
if (chunk.constructor === String)
chunk = Buffer.from(chunk);
for (var i = 0; i < chunk.length && index_1 < data_1.length; ++i, ++index_1)
data_1[index_1] = chunk[i];
if (index_1 >= base.headers.contentLength)
go_1(data_1);
});
}
}
else {
_this.invokeBeforeRequest(base, function () {
method.chunked(base, req, base.exit);
});
}
});
}
exports.executeRequest = executeRequest;
function start(port, callback) {
var _this = this;
var _port = this.options.port;
var _callback;
if (port && typeof port === 'number')
_port = port;
else if (callback && typeof callback === 'number')
_port = callback;
if (port && typeof port === 'function')
_callback = port;
else if (callback && typeof callback === 'function')
_callback = callback;
if (!this.server) {
var serverCreator = this.options.https ? function (c) { return https.createServer(_this.options.https, c); } : function (c) { return http.createServer(c); };
this.server = serverCreator(executeRequest.bind(this));
this.autoSave();
}
this.server.listen(_port, this.options.hostname, function () {
if (_callback)
_callback(_this.server);
});
}
exports.start = start;
function stop(callback) {
callback = callback ? callback : function () { };
if (this.server) {
this.server.close(callback);
this.server = null;
}
else
process.nextTick(callback);
}
exports.stop = stop;