Return-Path: X-Original-To: apmail-couchdb-commits-archive@www.apache.org Delivered-To: apmail-couchdb-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E60BF4A73 for ; Tue, 17 May 2011 20:31:54 +0000 (UTC) Received: (qmail 83737 invoked by uid 500); 17 May 2011 20:31:54 -0000 Delivered-To: apmail-couchdb-commits-archive@couchdb.apache.org Received: (qmail 83668 invoked by uid 500); 17 May 2011 20:31:54 -0000 Mailing-List: contact commits-help@couchdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@couchdb.apache.org Delivered-To: mailing list commits@couchdb.apache.org Received: (qmail 83661 invoked by uid 99); 17 May 2011 20:31:54 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 17 May 2011 20:31:54 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 17 May 2011 20:31:53 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id F2F882388A90; Tue, 17 May 2011 20:31:32 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1104530 - in /couchdb/branches/1.1.x: src/erlang-oauth/oauth_uri.erl test/etap/190-oauth.t test/etap/Makefile.am Date: Tue, 17 May 2011 20:31:32 -0000 To: commits@couchdb.apache.org From: rnewson@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110517203132.F2F882388A90@eris.apache.org> Author: rnewson Date: Tue May 17 20:31:32 2011 New Revision: 1104530 URL: http://svn.apache.org/viewvc?rev=1104530&view=rev Log: backport oauth fix - COUCHDB-1144 Added: couchdb/branches/1.1.x/test/etap/190-oauth.t (with props) Modified: couchdb/branches/1.1.x/src/erlang-oauth/oauth_uri.erl couchdb/branches/1.1.x/test/etap/Makefile.am Modified: couchdb/branches/1.1.x/src/erlang-oauth/oauth_uri.erl URL: http://svn.apache.org/viewvc/couchdb/branches/1.1.x/src/erlang-oauth/oauth_uri.erl?rev=1104530&r1=1104529&r2=1104530&view=diff ============================================================================== --- couchdb/branches/1.1.x/src/erlang-oauth/oauth_uri.erl (original) +++ couchdb/branches/1.1.x/src/erlang-oauth/oauth_uri.erl Tue May 17 20:31:32 2011 @@ -6,14 +6,6 @@ -import(lists, [concat/1]). --define(is_uppercase_alpha(C), C >= $A, C =< $Z). --define(is_lowercase_alpha(C), C >= $a, C =< $z). --define(is_alpha(C), ?is_uppercase_alpha(C); ?is_lowercase_alpha(C)). --define(is_digit(C), C >= $0, C =< $9). --define(is_alphanumeric(C), ?is_alpha(C); ?is_digit(C)). --define(is_unreserved(C), ?is_alphanumeric(C); C =:= $-; C =:= $_; C =:= $.; C =:= $~). --define(is_hex(C), ?is_digit(C); C >= $A, C =< $F). - normalize(URI) -> case http_uri:parse(URI) of @@ -66,23 +58,41 @@ intersperse(_, [X]) -> [X]; intersperse(Sep, [X|Xs]) -> [X, Sep|intersperse(Sep, Xs)]. -decode(Chars) -> - decode(Chars, []). +-define(is_alphanum(C), C >= $A, C =< $Z; C >= $a, C =< $z; C >= $0, C =< $9). -decode([], Decoded) -> - lists:reverse(Decoded); -decode([$%,A,B|Etc], Decoded) when ?is_hex(A), ?is_hex(B) -> - decode(Etc, [erlang:list_to_integer([A,B], 16)|Decoded]); -decode([C|Etc], Decoded) when ?is_unreserved(C) -> - decode(Etc, [C|Decoded]). - -encode(Chars) -> - encode(Chars, []). - -encode([], Encoded) -> - lists:flatten(lists:reverse(Encoded)); -encode([C|Etc], Encoded) when ?is_unreserved(C) -> - encode(Etc, [C|Encoded]); -encode([C|Etc], Encoded) -> - Value = io_lib:format("%~2.2.0s", [erlang:integer_to_list(C, 16)]), - encode(Etc, [Value|Encoded]). +encode(Term) when is_integer(Term) -> + integer_to_list(Term); +encode(Term) when is_atom(Term) -> + encode(atom_to_list(Term)); +encode(Term) when is_list(Term) -> + encode(lists:reverse(Term, []), []). + +encode([X | T], Acc) when ?is_alphanum(X); X =:= $-; X =:= $_; X =:= $.; X =:= $~ -> + encode(T, [X | Acc]); +encode([X | T], Acc) -> + NewAcc = [$%, dec2hex(X bsr 4), dec2hex(X band 16#0f) | Acc], + encode(T, NewAcc); +encode([], Acc) -> + Acc. + +decode(Str) when is_list(Str) -> + decode(Str, []). + +decode([$%, A, B | T], Acc) -> + decode(T, [(hex2dec(A) bsl 4) + hex2dec(B) | Acc]); +decode([X | T], Acc) -> + decode(T, [X | Acc]); +decode([], Acc) -> + lists:reverse(Acc, []). + +-compile({inline, [{dec2hex, 1}, {hex2dec, 1}]}). + +dec2hex(N) when N >= 10 andalso N =< 15 -> + N + $A - 10; +dec2hex(N) when N >= 0 andalso N =< 9 -> + N + $0. + +hex2dec(C) when C >= $A andalso C =< $F -> + C - $A + 10; +hex2dec(C) when C >= $0 andalso C =< $9 -> + C - $0. Added: couchdb/branches/1.1.x/test/etap/190-oauth.t URL: http://svn.apache.org/viewvc/couchdb/branches/1.1.x/test/etap/190-oauth.t?rev=1104530&view=auto ============================================================================== --- couchdb/branches/1.1.x/test/etap/190-oauth.t (added) +++ couchdb/branches/1.1.x/test/etap/190-oauth.t Tue May 17 20:31:32 2011 @@ -0,0 +1,31 @@ +#!/usr/bin/env escript +% Licensed under the Apache License, Version 2.0 (the "License"); you may not +% use this file except in compliance with the License. You may obtain a copy of +% the License at +% +% http://www.apache.org/licenses/LICENSE-2.0 +% +% Unless required by applicable law or agreed to in writing, software +% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +% License for the specific language governing permissions and limitations under +% the License. + +main(_) -> + test_util:init_code_path(), + etap:plan(1), + case (catch test()) of + ok -> + etap:end_tests(); + Other -> + etap:diag(io_lib:format("Test died abnormally: ~p", [Other])), + etap:bail(Other) + end, + ok. + +test() -> + etap:is( + oauth_uri:params_from_string("realm=http://localhost:5984"), + [{"realm","http://localhost:5984"}], + "decode should handle non-percent encoded input."), + ok. Propchange: couchdb/branches/1.1.x/test/etap/190-oauth.t ------------------------------------------------------------------------------ svn:executable = * Modified: couchdb/branches/1.1.x/test/etap/Makefile.am URL: http://svn.apache.org/viewvc/couchdb/branches/1.1.x/test/etap/Makefile.am?rev=1104530&r1=1104529&r2=1104530&view=diff ============================================================================== --- couchdb/branches/1.1.x/test/etap/Makefile.am (original) +++ couchdb/branches/1.1.x/test/etap/Makefile.am Tue May 17 20:31:32 2011 @@ -85,4 +85,5 @@ EXTRA_DIST = \ 173-os-daemon-cfg-register.t \ 180-http-proxy.ini \ 180-http-proxy.t \ + 190-oauth.t \ 200-view-group-no-db-leaks.t