Author: kocolosk
Date: Thu Oct 15 05:46:22 2009
New Revision: 825401
URL: http://svn.apache.org/viewvc?rev=825401&view=rev
Log:
bugfixes for redirects in replication and iolists in OAuth qs params
Modified:
couchdb/trunk/ (props changed)
couchdb/trunk/etc/default/couchdb (props changed)
couchdb/trunk/share/www/script/test/oauth.js
couchdb/trunk/src/couchdb/couch_rep_httpc.erl
Propchange: couchdb/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Oct 15 05:46:22 2009
@@ -4,3 +4,4 @@
/couchdb/branches/form:729440-730015
/couchdb/branches/list-iterator:782292-784593
/couchdb/branches/tail_header:775760-778477
+/couchdb/tags/0.10.0:825400
Propchange: couchdb/trunk/etc/default/couchdb
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Oct 15 05:46:22 2009
@@ -4,4 +4,5 @@
/couchdb/branches/form/etc/default/couchdb:729440-730015
/couchdb/branches/list-iterator/etc/default/couchdb:782292-784593
/couchdb/branches/tail_header/etc/default/couchdb:775760-778477
+/couchdb/tags/0.10.0/etc/default/couchdb:825400
/incubator/couchdb/trunk/etc/default/couchdb:642419-694440
Modified: couchdb/trunk/share/www/script/test/oauth.js
URL:
http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/oauth.js?rev=825401&r1=825400&r2=825401&view=diff
==============================================================================
--- couchdb/trunk/share/www/script/test/oauth.js (original)
+++ couchdb/trunk/share/www/script/test/oauth.js Thu Oct 15 05:46:22 2009
@@ -170,6 +170,11 @@
T(xhr.status == expectedCode);
// Replication
+ var dbA = new CouchDB("test_suite_db_a", {
+ "X-Couch-Full-Commit":"false",
+ "Authorization": adminBasicAuthHeaderValue()
+ });
+ T(dbA.save({_id:"_design/"+i+consumerKey}).ok);
var result = CouchDB.replicate(dbPair.source, dbPair.target, {
headers: {"Authorization": adminBasicAuthHeaderValue()}
});
Modified: couchdb/trunk/src/couchdb/couch_rep_httpc.erl
URL:
http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_rep_httpc.erl?rev=825401&r1=825400&r2=825401&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_rep_httpc.erl (original)
+++ couchdb/trunk/src/couchdb/couch_rep_httpc.erl Thu Oct 15 05:46:22 2009
@@ -126,7 +126,7 @@
Code =:= 301; Code =:= 302 ->
MochiHeaders = mochiweb_headers:make(Headers),
RedirectUrl = mochiweb_headers:get_value("Location", MochiHeaders),
- do_request(Req#http_db{url = RedirectUrl});
+ do_request(redirected_request(Req, RedirectUrl));
Code =:= 409 ->
throw(conflict);
Code >= 400, Code < 500 ->
@@ -175,6 +175,17 @@
do_request(Req#http_db{retries = Retries-1, pause = 2*Pause})
end.
+redirected_request(Req, RedirectUrl) ->
+ {Base, QStr, _} = mochiweb_util:urlsplit_path(RedirectUrl),
+ QS = mochiweb_util:parse_qs(QStr),
+ Hdrs = case proplists:get_value(<<"oauth">>, Req#http_db.auth) of
+ undefined ->
+ Req#http_db.headers;
+ _Else ->
+ lists:keydelete("Authorization", 1, Req#http_db.headers)
+ end,
+ Req#http_db{url=Base, resource="", qs=QS, headers=Hdrs}.
+
spawn_worker_process(Req) ->
Url = ibrowse_lib:parse_url(Req#http_db.url),
{ok, Pid} = ibrowse_http_client:start(Url),
@@ -195,7 +206,9 @@
end.
oauth_header(Url, QS, Action, Props) ->
- QSL = [{couch_util:to_list(K), couch_util:to_list(V)} || {K,V} <- QS],
+ % erlang-oauth doesn't like iolists
+ QSL = [{couch_util:to_list(K), ?b2l(?l2b(couch_util:to_list(V)))} ||
+ {K,V} <- QS],
ConsumerKey = ?b2l(proplists:get_value(<<"consumer_key">>, Props)),
Token = ?b2l(proplists:get_value(<<"token">>, Props)),
TokenSecret = ?b2l(proplists:get_value(<<"token_secret">>, Props)),