summaryrefslogtreecommitdiff
path: root/src/couchdb/couch_query_servers.erl
diff options
context:
space:
mode:
authorDamien F. Katz <damien@apache.org>2008-11-11 19:45:50 +0000
committerDamien F. Katz <damien@apache.org>2008-11-11 19:45:50 +0000
commit9044fc0234ed65056f087a86c7c117922f2a2c75 (patch)
treeea87133de1e3617c5d3d7366983b7f7039d6cffd /src/couchdb/couch_query_servers.erl
parent538f455f2e2842d5caa33ed300d28b3cd52599b3 (diff)
Check in of initial validation and authorization work. This work is incomplete, as there is not yet any way of restricting who can update the design docs.
git-svn-id: https://svn.apache.org/repos/asf/incubator/couchdb/trunk@713132 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/couchdb/couch_query_servers.erl')
-rw-r--r--src/couchdb/couch_query_servers.erl25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/couchdb/couch_query_servers.erl b/src/couchdb/couch_query_servers.erl
index e9f309a2..141c9406 100644
--- a/src/couchdb/couch_query_servers.erl
+++ b/src/couchdb/couch_query_servers.erl
@@ -17,7 +17,7 @@
-export([init/1, terminate/2, handle_call/3, handle_cast/2, handle_info/2,code_change/3,stop/0]).
-export([start_doc_map/2, map_docs/2, stop_doc_map/1]).
--export([reduce/3, rereduce/3]).
+-export([reduce/3, rereduce/3,validate_doc_update/5]).
% -export([test/0]).
-include("couch_db.hrl").
@@ -46,10 +46,10 @@ readline(Port, Acc) ->
lists:reverse(Acc, Data);
{Port, Err} ->
catch port_close(Port),
- throw({map_process_error, Err})
+ throw({external_process_error, Err})
after Timeout ->
catch port_close(Port),
- throw({map_process_error, "map function timed out"})
+ throw({external_process_error, "External process timed out"})
end.
read_json(Port) ->
@@ -174,6 +174,25 @@ reduce(Lang, RedSrcs, KVs) ->
return_linked_port(Lang, Port),
{ok, Results}.
+validate_doc_update(Lang, FunSrc, EditDoc, DiskDoc, Ctx) ->
+ Port = get_linked_port(Lang),
+ JsonEditDoc = couch_doc:to_json_obj(EditDoc, [revs]),
+ JsonDiskDoc =
+ if DiskDoc == nil ->
+ null;
+ true ->
+ couch_doc:to_json_obj(EditDoc, [revs])
+ end,
+ try prompt(Port,
+ [<<"validate">>, FunSrc, JsonEditDoc, JsonDiskDoc, Ctx]) of
+ 1 ->
+ ok;
+ {ErrorObject} ->
+ {user_error,
+ {ErrorObject}}
+ after
+ return_linked_port(Lang, Port)
+ end.
init([]) ->