diff options
author | garren smith <garren.smith@gmail.com> | 2021-07-15 16:34:31 +0200 |
---|---|---|
committer | garren smith <garren.smith@gmail.com> | 2021-07-22 17:00:30 +0200 |
commit | 383c8a9f59936b3c0a6331c1ea29a3aa887956fa (patch) | |
tree | 7551f705310c531d9c3bdf617cf5ec5a0a0669b8 | |
parent | 647aea29ce8431fa5c2049cc6da47a9305ad3e6b (diff) | |
download | couchdb-383c8a9f59936b3c0a6331c1ea29a3aa887956fa.tar.gz |
move validate doc update to go through couch_eval
-rw-r--r-- | src/couch/src/couch_doc.erl | 3 | ||||
-rw-r--r-- | src/couch_eval/src/couch_eval.erl | 11 | ||||
-rw-r--r-- | src/couch_js/src/couch_js.erl | 6 |
3 files changed, 16 insertions, 4 deletions
diff --git a/src/couch/src/couch_doc.erl b/src/couch/src/couch_doc.erl index 124d14c33..2771e1486 100644 --- a/src/couch/src/couch_doc.erl +++ b/src/couch/src/couch_doc.erl @@ -27,7 +27,6 @@ -include_lib("couch/include/couch_db.hrl"). - -spec to_path(#doc{}) -> path(). to_path(#doc{revs = {Start, RevIds}} = Doc) -> [Branch] = to_branch(Doc, lists:reverse(RevIds)), @@ -431,7 +430,7 @@ get_validate_doc_fun(#doc{body = {Props}} = DDoc) -> nil; _Else -> fun(EditDoc, DiskDoc, Ctx, SecObj) -> - couch_query_servers:validate_doc_update(DDoc, EditDoc, DiskDoc, Ctx, SecObj) + couch_eval:validate_doc_update(DDoc, EditDoc, DiskDoc, Ctx, SecObj) end end. diff --git a/src/couch_eval/src/couch_eval.erl b/src/couch_eval/src/couch_eval.erl index affcf714e..cdaf8ce4d 100644 --- a/src/couch_eval/src/couch_eval.erl +++ b/src/couch_eval/src/couch_eval.erl @@ -17,7 +17,8 @@ release_map_context/1, map_docs/2, with_context/2, - try_compile/4 + try_compile/4, + validate_doc_update/5 ]). -include_lib("couch/include/couch_db.hrl"). @@ -37,6 +38,7 @@ -type function_name() :: binary(). -type function_src() :: binary(). -type error(_Error) :: no_return(). +-type user_context() :: any(). -type context_opts() :: #{ db_name := db_name(), @@ -58,6 +60,8 @@ -callback acquire_context() -> {ok, any()} | {error, any()}. -callback release_context(context()) -> ok | {error, any()}. -callback try_compile(context(), function_type(), function_name(), function_src()) -> ok. +-callback validate_doc_update(ddoc(), doc(), doc(), user_context(), sec_obj()) -> + ok | {error, any()}. -spec acquire_map_context( db_name(), @@ -116,6 +120,11 @@ try_compile({_ApiMod, _Ctx}, reduce, <<_/binary>>, disabled) -> try_compile({ApiMod, Ctx}, FuncType, FuncName, FuncSrc) -> ApiMod:try_compile(Ctx, FuncType, FuncName, FuncSrc). +validate_doc_update(#doc{body = {Props}} = DDoc, EditDoc, DiskDoc, Ctx, SecObj) -> + Language = couch_util:get_value(<<"language">>, Props, <<"javascript">>), + ApiMod = get_api_mod(Language), + ApiMod:validate_doc_update(DDoc, EditDoc, DiskDoc, Ctx, SecObj). + acquire_context(Language) -> ApiMod = get_api_mod(Language), {ok, Ctx} = ApiMod:acquire_context(), diff --git a/src/couch_js/src/couch_js.erl b/src/couch_js/src/couch_js.erl index 3a80a99c3..739aa1b9c 100644 --- a/src/couch_js/src/couch_js.erl +++ b/src/couch_js/src/couch_js.erl @@ -19,7 +19,8 @@ map_docs/2, acquire_context/0, release_context/1, - try_compile/4 + try_compile/4, + validate_doc_update/5 ]). -include_lib("couch/include/couch_db.hrl"). @@ -62,3 +63,6 @@ release_context(Proc) -> try_compile(Proc, FunctionType, FunName, FunSrc) -> couch_query_servers:try_compile(Proc, FunctionType, FunName, FunSrc). + +validate_doc_update(DDoc, EditDoc, DiskDoc, Ctx, SecObj) -> + couch_query_servers:validate_doc_update(DDoc, EditDoc, DiskDoc, Ctx, SecObj). |