88 lines
3.3 KiB
JavaScript
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;
|