Commit 168b7c44 authored by iv's avatar iv Committed by Romain Courteaud

DavStorage: add 'with_credentials' option to send domain cookie

This option is false by default to prevent any Cross Origin issue unsupported by most webdav servers

Squashed commit of the following:

commit 1591f5e199f91abca92ba3bb46ee3aa356c976fc
Author: Romain Courteaud <romain@nexedi.com>
Date:   Fri Dec 18 15:56:42 2015 +0100

    DavStorage: rename _withcredentials parameter to with_credentials

    Add tests.
    Update documentation.

commit 33b2113ca5ac42b015264f12776326d848320022
Author: Isabelle Vallet <isabelle.vallet@nexedi.com>
Date:   Wed Dec 16 06:22:08 2015 -0800

    DAV storage: add option for cross-origin cookie propagation.
parent 81e1f72b
...@@ -100,14 +100,17 @@ Example: ...@@ -100,14 +100,17 @@ Example:
DavStorage DavStorage
^^^^^^^^^^ ^^^^^^^^^^
================ ========== ========== ========================================================== ===================== ========== ========== ==========================================================
parameter required? type description parameter required? type description
================ ========== ========== ========================================================== ===================== ========== ========== ==========================================================
``type`` yes string name of the storage type (here: "dav") ``type`` yes string name of the storage type (here: "dav")
``url`` yes string url of your webdav server ``url`` yes string url of your webdav server
``basic_login`` no string | login and password of your dav, base64 encoded like this: ``basic_login`` no string | login and password of your dav, base64 encoded like this:
| ``btoa(username + ":" + password)`` | ``btoa(username + ":" + password)``
================ ========== ========== ========================================================== ``with_credentials`` no boolean | true: send domain cookie
| false: do not send domain cookie
| default to false.
===================== ========== ========== ==========================================================
Example: Example:
......
...@@ -31,6 +31,13 @@ ...@@ -31,6 +31,13 @@
} }
options.headers.Authorization = storage._authorization; options.headers.Authorization = storage._authorization;
} }
if (storage._with_credentials !== undefined) {
if (options.xhrFields === undefined) {
options.xhrFields = {};
}
options.xhrFields.withCredentials = storage._with_credentials;
}
// if (start !== undefined) { // if (start !== undefined) {
// if (end !== undefined) { // if (end !== undefined) {
// headers.Range = "bytes=" + start + "-" + end; // headers.Range = "bytes=" + start + "-" + end;
...@@ -78,7 +85,7 @@ ...@@ -78,7 +85,7 @@
if (typeof spec.basic_login === 'string') { if (typeof spec.basic_login === 'string') {
this._authorization = "Basic " + spec.basic_login; this._authorization = "Basic " + spec.basic_login;
} }
this._with_credentials = spec.with_credentials;
} }
DavStorage.prototype.put = function (id, param) { DavStorage.prototype.put = function (id, param) {
......
...@@ -27,18 +27,20 @@ ...@@ -27,18 +27,20 @@
equal(jio.__type, "dav"); equal(jio.__type, "dav");
deepEqual(jio.__storage._url, domain); deepEqual(jio.__storage._url, domain);
deepEqual(jio.__storage._authorization, undefined); deepEqual(jio.__storage._authorization, undefined);
deepEqual(jio.__storage._with_credentials, undefined);
}); });
test("Storage store basic login", function () { test("Storage store basic login", function () {
var jio = jIO.createJIO({ var jio = jIO.createJIO({
type: "dav", type: "dav",
url: domain, url: domain,
basic_login: basic_login basic_login: basic_login,
with_credentials: true
}); });
equal(jio.__type, "dav"); equal(jio.__type, "dav");
deepEqual(jio.__storage._url, domain); deepEqual(jio.__storage._url, domain);
deepEqual(jio.__storage._authorization, "Basic login:passwd"); deepEqual(jio.__storage._with_credentials, true);
}); });
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
...@@ -54,7 +56,8 @@ ...@@ -54,7 +56,8 @@
this.jio = jIO.createJIO({ this.jio = jIO.createJIO({
type: "dav", type: "dav",
url: domain, url: domain,
basic_login: basic_login basic_login: basic_login,
with_credentials: true
}); });
}, },
teardown: function () { teardown: function () {
...@@ -71,7 +74,7 @@ ...@@ -71,7 +74,7 @@
}, ""]); }, ""]);
stop(); stop();
expect(7); expect(8);
this.jio.put("/put1/", {}) this.jio.put("/put1/", {})
.then(function () { .then(function () {
...@@ -85,6 +88,7 @@ ...@@ -85,6 +88,7 @@
Authorization: "Basic login:passwd", Authorization: "Basic login:passwd",
"Content-Type": "text/plain;charset=utf-8" "Content-Type": "text/plain;charset=utf-8"
}); });
equal(server.requests[0].withCredentials, true);
}) })
.fail(function (error) { .fail(function (error) {
ok(false, error); ok(false, error);
...@@ -181,7 +185,8 @@ ...@@ -181,7 +185,8 @@
this.jio = jIO.createJIO({ this.jio = jIO.createJIO({
type: "dav", type: "dav",
url: domain, url: domain,
basic_login: basic_login basic_login: basic_login,
with_credentials: true
}); });
}, },
teardown: function () { teardown: function () {
...@@ -198,7 +203,7 @@ ...@@ -198,7 +203,7 @@
}, ""]); }, ""]);
stop(); stop();
expect(7); expect(8);
this.jio.remove("/remove1/") this.jio.remove("/remove1/")
.then(function () { .then(function () {
...@@ -212,6 +217,7 @@ ...@@ -212,6 +217,7 @@
Authorization: "Basic login:passwd", Authorization: "Basic login:passwd",
"Content-Type": "text/plain;charset=utf-8" "Content-Type": "text/plain;charset=utf-8"
}); });
equal(server.requests[0].withCredentials, true);
}) })
.fail(function (error) { .fail(function (error) {
ok(false, error); ok(false, error);
...@@ -270,7 +276,8 @@ ...@@ -270,7 +276,8 @@
this.jio = jIO.createJIO({ this.jio = jIO.createJIO({
type: "dav", type: "dav",
url: domain, url: domain,
basic_login: basic_login basic_login: basic_login,
with_credentials: true
}); });
}, },
teardown: function () { teardown: function () {
...@@ -454,7 +461,8 @@ ...@@ -454,7 +461,8 @@
this.jio = jIO.createJIO({ this.jio = jIO.createJIO({
type: "dav", type: "dav",
url: domain, url: domain,
basic_login: basic_login basic_login: basic_login,
with_credentials: true
}); });
}, },
teardown: function () { teardown: function () {
...@@ -690,7 +698,8 @@ ...@@ -690,7 +698,8 @@
this.jio = jIO.createJIO({ this.jio = jIO.createJIO({
type: "dav", type: "dav",
url: domain, url: domain,
basic_login: basic_login basic_login: basic_login,
with_credentials: true
}); });
}, },
teardown: function () { teardown: function () {
...@@ -797,7 +806,7 @@ ...@@ -797,7 +806,7 @@
}, ""]); }, ""]);
stop(); stop();
expect(7); expect(8);
this.jio.putAttachment( this.jio.putAttachment(
"/putAttachment1/", "/putAttachment1/",
...@@ -815,6 +824,7 @@ ...@@ -815,6 +824,7 @@
Authorization: "Basic login:passwd", Authorization: "Basic login:passwd",
"Content-Type": "text/plain;charset=utf-8" "Content-Type": "text/plain;charset=utf-8"
}); });
equal(server.requests[0].withCredentials, true);
}) })
.fail(function (error) { .fail(function (error) {
ok(false, error); ok(false, error);
...@@ -837,7 +847,8 @@ ...@@ -837,7 +847,8 @@
this.jio = jIO.createJIO({ this.jio = jIO.createJIO({
type: "dav", type: "dav",
url: domain, url: domain,
basic_login: basic_login basic_login: basic_login,
with_credentials: true
}); });
}, },
teardown: function () { teardown: function () {
...@@ -917,7 +928,7 @@ ...@@ -917,7 +928,7 @@
}, ""]); }, ""]);
stop(); stop();
expect(7); expect(8);
this.jio.removeAttachment( this.jio.removeAttachment(
"/removeAttachment1/", "/removeAttachment1/",
...@@ -934,6 +945,7 @@ ...@@ -934,6 +945,7 @@
Authorization: "Basic login:passwd", Authorization: "Basic login:passwd",
"Content-Type": "text/plain;charset=utf-8" "Content-Type": "text/plain;charset=utf-8"
}); });
equal(server.requests[0].withCredentials, true);
}) })
.fail(function (error) { .fail(function (error) {
ok(false, error); ok(false, error);
...@@ -983,7 +995,8 @@ ...@@ -983,7 +995,8 @@
this.jio = jIO.createJIO({ this.jio = jIO.createJIO({
type: "dav", type: "dav",
url: domain, url: domain,
basic_login: basic_login basic_login: basic_login,
with_credentials: true
}); });
}, },
teardown: function () { teardown: function () {
...@@ -1063,7 +1076,7 @@ ...@@ -1063,7 +1076,7 @@
}, "foo\nbaré"]); }, "foo\nbaré"]);
stop(); stop();
expect(10); expect(11);
this.jio.getAttachment( this.jio.getAttachment(
"/getAttachment1/", "/getAttachment1/",
...@@ -1079,6 +1092,7 @@ ...@@ -1079,6 +1092,7 @@
deepEqual(server.requests[0].requestHeaders, { deepEqual(server.requests[0].requestHeaders, {
Authorization: "Basic login:passwd" Authorization: "Basic login:passwd"
}); });
equal(server.requests[0].withCredentials, true);
ok(result instanceof Blob, "Data is Blob"); ok(result instanceof Blob, "Data is Blob");
deepEqual(result.type, "text/plain", "Check mimetype"); deepEqual(result.type, "text/plain", "Check mimetype");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment