@sync-in/server
Version:
The secure, open-source platform for file storage, sharing, collaboration, and sync
172 lines (171 loc) • 4.77 kB
JavaScript
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: Object.getOwnPropertyDescriptor(all, name).get
});
}
_export(exports, {
get ALLOWED_WEBDAV_METHODS () {
return ALLOWED_WEBDAV_METHODS;
},
get ALLOW_EMPTY_BODY_METHODS () {
return ALLOW_EMPTY_BODY_METHODS;
},
get DEPTH () {
return DEPTH;
},
get HEADER () {
return HEADER;
},
get HTML_CONTENT_TYPE () {
return HTML_CONTENT_TYPE;
},
get LOCK_DISCOVERY_PROP () {
return LOCK_DISCOVERY_PROP;
},
get LOCK_PREFIX () {
return LOCK_PREFIX;
},
get LOCK_SCOPE () {
return LOCK_SCOPE;
},
get NS_DAV () {
return NS_DAV;
},
get NS_PREFIX () {
return NS_PREFIX;
},
get OPTIONS_HEADERS () {
return OPTIONS_HEADERS;
},
get PRECONDITION () {
return PRECONDITION;
},
get PROPPATCH_METHOD () {
return PROPPATCH_METHOD;
},
get PROPPATCH_MODIFIED_PROPS () {
return PROPPATCH_MODIFIED_PROPS;
},
get PROPPATCH_PROP_UPDATE () {
return PROPPATCH_PROP_UPDATE;
},
get PROPPATCH_SUPPORTED_PROPS () {
return PROPPATCH_SUPPORTED_PROPS;
},
get PROPSTAT () {
return PROPSTAT;
},
get REGEX_BASE_PATH () {
return REGEX_BASE_PATH;
},
get STANDARD_PROPS () {
return STANDARD_PROPS;
},
get WEBDAV_APP_LOCK () {
return WEBDAV_APP_LOCK;
},
get XML_CONTENT_TYPE () {
return XML_CONTENT_TYPE;
}
});
const _shared = require("../../../common/shared");
const _applicationsconstants = require("../../applications.constants");
const _routes = require("./routes");
const REGEX_BASE_PATH = new RegExp(`^/?${_routes.WEBDAV_BASE_PATH}/`);
const NS_DAV = 'DAV:';
const NS_PREFIX = 'D';
const LOCK_PREFIX = 'urn:uuid:';
const XML_CONTENT_TYPE = 'application/xml; charset=utf-8';
const HTML_CONTENT_TYPE = 'text/html; charset=utf-8';
const WEBDAV_APP_LOCK = 'WebDAV';
const ALLOWED_WEBDAV_METHODS = [
_applicationsconstants.HTTP_STANDARD_METHOD.OPTIONS,
_applicationsconstants.HTTP_STANDARD_METHOD.HEAD,
_applicationsconstants.HTTP_STANDARD_METHOD.GET,
_applicationsconstants.HTTP_STANDARD_METHOD.PUT,
_applicationsconstants.HTTP_STANDARD_METHOD.DELETE,
...Object.values(_applicationsconstants.HTTP_WEBDAV_METHOD)
].join(', ');
const ALLOW_EMPTY_BODY_METHODS = [
_applicationsconstants.HTTP_WEBDAV_METHOD.PROPFIND,
_applicationsconstants.HTTP_WEBDAV_METHOD.LOCK
];
const OPTIONS_HEADERS = {
Server: _shared.SERVER_NAME,
'MS-Author-Via': 'DAV',
DAV: '1,2',
Allow: ALLOWED_WEBDAV_METHODS,
'Content-Type': HTML_CONTENT_TYPE,
'Content-Length': '0',
'Accept-Ranges': 'bytes'
};
const HEADER = {
DEPTH: 'depth',
IF: 'if',
LOCK_TOKEN: 'lock-token',
DESTINATION: 'destination',
OVERWRITE: 'overwrite',
TIMEOUT: 'timeout'
};
const LOCK_DISCOVERY_PROP = 'lockdiscovery';
const STANDARD_PROPS = [
'creationdate',
'getcontenttype',
'resourcetype',
'getlastmodified',
'getcontentlength',
'displayname',
'getetag',
'supportedlock',
LOCK_DISCOVERY_PROP
];
var LOCK_SCOPE = /*#__PURE__*/ function(LOCK_SCOPE) {
LOCK_SCOPE["EXCLUSIVE"] = "exclusive";
LOCK_SCOPE["SHARED"] = "shared";
return LOCK_SCOPE;
}({});
var DEPTH = /*#__PURE__*/ function(DEPTH) {
DEPTH["INFINITY"] = "infinity";
DEPTH["RESOURCE"] = "0";
DEPTH["MEMBERS"] = "1";
return DEPTH;
}({});
var PROPSTAT = /*#__PURE__*/ function(PROPSTAT) {
PROPSTAT["ALLPROP"] = "allprop";
PROPSTAT["PROP"] = "prop";
PROPSTAT["PROPNAME"] = "propname";
return PROPSTAT;
}({});
const PROPPATCH_PROP_UPDATE = 'propertyupdate';
const PROPPATCH_METHOD = {
SET: 'set',
REMOVE: 'remove'
};
const PROPPATCH_MODIFIED_PROPS = [
'getlastmodified',
'lastmodified',
'Win32LastModifiedTime'
];
const PROPPATCH_SUPPORTED_PROPS = [
...PROPPATCH_MODIFIED_PROPS,
'Win32CreationTime',
'Win32LastAccessTime',
'Win32FileAttributes'
];
const PRECONDITION = {
PROTECTED_PROPERTY: 'cannot-modify-protected-property',
MISSING_LOCK_TOKEN: 'lock-token-submitted',
LOCK_TOKEN_MISMATCH: 'lock-token-matches-request-uri',
LOCK_CONFLICT: 'no-conflicting-lock',
PROPFIND_FINITE_DEPTH: 'propfind-finite-depth'
};
//# sourceMappingURL=webdav.js.map