commit b7fc5e66f2412edd4eba487960bf7c11ccadcae2
parent eac0c1a94dbc6d3d19b6d5440328b0a39a4661c8
Author: Dan Stillman <dstillman@zotero.org>
Date: Mon, 15 Sep 2008 10:40:10 +0000
Adds support for Microsoft IIS (5.1) WebDAV
Diffstat:
1 file changed, 38 insertions(+), 3 deletions(-)
diff --git a/chrome/content/zotero/xpcom/storage.js b/chrome/content/zotero/xpcom/storage.js
@@ -418,7 +418,17 @@ Zotero.Sync.Storage = new function () {
_error("DAV:href not found in " + funcName);
}
- if (href.firstChild.nodeValue != uri.path) {
+ // Absolute
+ if (href.firstChild.nodeValue.match(/^https?:\/\//)) {
+ var ios = Components.classes["@mozilla.org/network/io-service;1"].
+ getService(Components.interfaces.nsIIOService);
+ var href = ios.newURI(href.firstChild.nodeValue, null, null);
+ if (href.path != uri.path) {
+ _error("DAV:href does not match path in " + funcName);
+ }
+ }
+ // Relative
+ else if (href.firstChild.nodeValue != uri.path) {
_error("DAV:href does not match path in " + funcName);
}
@@ -889,10 +899,26 @@ Zotero.Sync.Storage = new function () {
var deleteFiles = [];
for each(var response in xml.D::response) {
var href = response.D::href.toString();
+
+ // Convert absolute to relative
+ if (href.match(/^https?:\/\//)) {
+ var ios = Components.classes["@mozilla.org/network/io-service;1"].
+ getService(Components.interfaces.nsIIOService);
+ href = ios.newURI(href, null, null).path;
+ }
+
+ // Skip root URI
if (href == path) {
continue;
}
- var file = href.match(/[^\/]+$/)[0];
+
+ var matches = href.match(/[^\/]+$/);
+ if (!matches) {
+ _error("Unexpected href '" + href
+ + "' in Zotero.Sync.Storage.purgeOrphanedStorageFiles()")
+ }
+ var file = matches[0];
+
if (file.indexOf('.') == 0) {
Zotero.debug("Skipping hidden file " + file);
continue;
@@ -1244,6 +1270,7 @@ Zotero.Sync.Storage = new function () {
switch (status) {
case 201:
case 204:
+ case 200: // IIS 5
break;
default:
@@ -1422,6 +1449,8 @@ Zotero.Sync.Storage = new function () {
var requestXML = new XML('<D:propfind ' + nsDeclarations + '/>');
requestXML.D::prop = '';
+ // IIS 5.1 requires at least one property in PROPFIND
+ requestXML.D::prop.D::getcontentlength = '';
var xmlstr = prolog + requestXML.toXMLString();
@@ -1502,6 +1531,8 @@ Zotero.Sync.Storage = new function () {
switch (req.status) {
case 204:
+ // IIS 5.1 returns 200
+ case 200:
callback(
uri,
Zotero.Sync.Storage.SUCCESS,
@@ -1560,7 +1591,7 @@ Zotero.Sync.Storage = new function () {
var parentURI = uri.clone();
parentURI.spec = parentURI.spec.replace(/zotero\/$/, '');
- // Zotero directory wasn't found, so if at least
+ // Zotero directory wasn't found, so see if at least
// the parent directory exists
Zotero.Utilities.HTTP.WebDAV.doProp("PROPFIND", parentURI, xmlstr,
function (req) {
@@ -1573,6 +1604,10 @@ Zotero.Sync.Storage = new function () {
callback(uri, Zotero.Sync.Storage.ERROR_ZOTERO_DIR_NOT_FOUND);
return;
+ case 400:
+ callback(uri, Zotero.Sync.Storage.ERROR_BAD_REQUEST);
+ return;
+
case 401:
callback(uri, Zotero.Sync.Storage.ERROR_AUTH_FAILED);
return;