You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2014/08/01 11:06:19 UTC

[43/49] chttpd commit: updated refs/heads/windsor-merge to 554ef74

 Only use cassim:set_security if cassim is enabled

BugzId: 32070


Project: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/commit/554ef748
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/tree/554ef748
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/diff/554ef748

Branch: refs/heads/windsor-merge
Commit: 554ef748625f97d21e6808b8ba09981b3ae076c5
Parents: 2a27059
Author: Russell Branca <ch...@apache.org>
Authored: Mon Jun 30 13:31:04 2014 -0700
Committer: Robert Newson <rn...@apache.org>
Committed: Thu Jul 31 11:55:11 2014 +0100

----------------------------------------------------------------------
 src/chttpd_db.erl | 72 ++++++++++++++++++++++++++++++--------------------
 1 file changed, 43 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/blob/554ef748/src/chttpd_db.erl
----------------------------------------------------------------------
diff --git a/src/chttpd_db.erl b/src/chttpd_db.erl
index 86e32dd..14e9594 100644
--- a/src/chttpd_db.erl
+++ b/src/chttpd_db.erl
@@ -1395,36 +1395,50 @@ monitor_attachments(Att) ->
 demonitor_refs(Refs) when is_list(Refs) ->
     [demonitor(Ref) || Ref <- Refs].
 
+%% This function should exist in cassim, but its depedence on the #httpd{}
+%% record makes it difficult to separate. This function should be refactored and
+%% moved into cassim once couch_doc_from_req and update_doc are reworked.
 put_security(#httpd{user_ctx=Ctx}=Req, Db, FetchRev) ->
-    DbName = Db#db.name,
-    DocId = cassim_metadata_cache:security_meta_id(DbName),
-    {SecObj0} = chttpd:json_body(Req),
-    {OldSecDoc} = cassim:get_security(DbName),
-    OldRev = couch_util:get_value(<<"_rev">>, OldSecDoc, undefined),
-    %% Maybe update the security doc with the rev when hiding mvcc logic
-    SecObj = case {FetchRev, OldRev} of
-        %% User supplied rev, just use the req body
-        {false, _} ->
-            SecObj0;
-        %% User did not supply rev, but new security doc
-        {true, undefined} ->
-            SecObj0;
-        %% User did not supply rev, use the old rev
-        {true, OldRev} ->
-            [{<<"_rev">>, OldRev} | proplists:delete(<<"_rev">>, SecObj0)]
-    end,
-    SecDoc = couch_doc_from_req(Req, DocId, {SecObj}),
-    Options = [
-        delay_commit,
-        interactive_edit,
-        {user_ctx, Ctx},
-        {w, integer_to_list(mem3:quorum(Db))}
-    ],
-    {Status, {etag, Etag}, Body} =
-        cassim:set_security(Db, SecDoc, Options),
-    HttpCode = http_code_from_status(Status),
-    ResponseHeaders = [{"Etag", Etag}],
-    send_json(Req, HttpCode, ResponseHeaders, Body).
+    case cassim:is_enabled() of
+        true ->
+            DbName = Db#db.name,
+            DocId = cassim_metadata_cache:security_meta_id(DbName),
+            {SecObj0} = chttpd:json_body(Req),
+            {OldSecDoc} = cassim:get_security(DbName),
+            OldRev = couch_util:get_value(<<"_rev">>, OldSecDoc, undefined),
+            %% Maybe update the security doc with the rev when hiding mvcc logic
+            SecObj = case {FetchRev, OldRev} of
+                %% User supplied rev, just use the req body
+                {false, _} ->
+                    SecObj0;
+                %% User did not supply rev, but new security doc
+                {true, undefined} ->
+                    SecObj0;
+                %% User did not supply rev, use the old rev
+                {true, OldRev} ->
+                    [{<<"_rev">>, OldRev}|proplists:delete(<<"_rev">>, SecObj0)]
+            end,
+            SecDoc = couch_doc_from_req(Req, DocId, {SecObj}),
+            Options = [
+                delay_commit,
+                interactive_edit,
+                {user_ctx, Ctx},
+                {w, integer_to_list(mem3:quorum(Db))}
+            ],
+            {Status, {etag, Etag}, Body} =
+                cassim:set_security(Db, SecDoc, Options),
+            HttpCode = http_code_from_status(Status),
+            ResponseHeaders = [{"Etag", Etag}],
+            send_json(Req, HttpCode, ResponseHeaders, Body);
+        false ->
+            SecObj = chttpd:json_body(Req),
+            case fabric:set_security(Db, SecObj, [{user_ctx, Ctx}]) of
+                ok ->
+                    send_json(Req, {[{<<"ok">>, true}]});
+                Else ->
+                    throw(Else)
+            end
+    end.
 
 -ifdef(TEST).
 -include_lib("eunit/include/eunit.hrl").