From 9044fc0234ed65056f087a86c7c117922f2a2c75 Mon Sep 17 00:00:00 2001 From: "Damien F. Katz" Date: Tue, 11 Nov 2008 19:45:50 +0000 Subject: 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 --- src/couchdb/couch_query_servers.erl | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/couchdb/couch_query_servers.erl') 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([]) -> -- cgit v1.2.3