diff options
Diffstat (limited to 'src/mod_privacy_riak.erl')
-rw-r--r-- | src/mod_privacy_riak.erl | 173 |
1 files changed, 71 insertions, 102 deletions
diff --git a/src/mod_privacy_riak.erl b/src/mod_privacy_riak.erl index 28851d042..0cd39c110 100644 --- a/src/mod_privacy_riak.erl +++ b/src/mod_privacy_riak.erl @@ -27,11 +27,9 @@ -behaviour(mod_privacy). %% API --export([init/2, process_lists_get/2, process_list_get/3, - process_default_set/3, process_active_set/3, - remove_privacy_list/3, set_privacy_list/1, - set_privacy_list/4, get_user_list/2, get_user_lists/2, - remove_user/2, import/1]). +-export([init/2, set_default/3, unset_default/2, set_lists/1, + set_list/4, get_lists/2, get_list/3, remove_lists/2, + remove_list/3, import/1]). -export([privacy_schema/0]). @@ -44,122 +42,93 @@ init(_Host, _Opts) -> ok. -process_lists_get(LUser, LServer) -> +unset_default(LUser, LServer) -> case ejabberd_riak:get(privacy, privacy_schema(), {LUser, LServer}) of - {ok, #privacy{default = Default, lists = Lists}} -> - LItems = lists:map(fun ({N, _}) -> N end, Lists), - {Default, LItems}; - {error, notfound} -> - {none, []}; - {error, _} -> - error + {ok, R} -> + ejabberd_riak:put(R#privacy{default = none}, privacy_schema()); + {error, notfound} -> + ok; + Err -> + Err end. -process_list_get(LUser, LServer, Name) -> +set_default(LUser, LServer, Name) -> case ejabberd_riak:get(privacy, privacy_schema(), {LUser, LServer}) of - {ok, #privacy{lists = Lists}} -> - case lists:keysearch(Name, 1, Lists) of - {value, {_, List}} -> List; - _ -> not_found - end; - {error, notfound} -> - not_found; - {error, _} -> - error + {ok, #privacy{lists = Lists} = P} -> + case lists:keymember(Name, 1, Lists) of + true -> + ejabberd_riak:put(P#privacy{default = Name, + lists = Lists}, + privacy_schema()); + false -> + {error, notfound} + end; + Err -> + Err end. -process_default_set(LUser, LServer, none) -> - {atomic, - case ejabberd_riak:get(privacy, privacy_schema(), {LUser, LServer}) of - {ok, R} -> - ejabberd_riak:put(R#privacy{default = none}, privacy_schema()); - {error, _} -> - ok - end}; -process_default_set(LUser, LServer, Name) -> - {atomic, - case ejabberd_riak:get(privacy, privacy_schema(), {LUser, LServer}) of - {ok, #privacy{lists = Lists} = P} -> - case lists:keymember(Name, 1, Lists) of - true -> - ejabberd_riak:put(P#privacy{default = Name, - lists = Lists}, - privacy_schema()); - false -> - not_found - end; - {error, _} -> - not_found - end}. - -process_active_set(LUser, LServer, Name) -> +remove_list(LUser, LServer, Name) -> case ejabberd_riak:get(privacy, privacy_schema(), {LUser, LServer}) of - {ok, #privacy{lists = Lists}} -> - case lists:keysearch(Name, 1, Lists) of - {value, {_, List}} -> List; - false -> error - end; - {error, _} -> - error + {ok, #privacy{default = Default, lists = Lists} = P} -> + if Name == Default -> + {error, conflict}; + true -> + NewLists = lists:keydelete(Name, 1, Lists), + ejabberd_riak:put(P#privacy{lists = NewLists}, + privacy_schema()) + end; + Err -> + Err end. -remove_privacy_list(LUser, LServer, Name) -> - {atomic, - case ejabberd_riak:get(privacy, privacy_schema(), {LUser, LServer}) of - {ok, #privacy{default = Default, lists = Lists} = P} -> - if Name == Default -> - conflict; - true -> - NewLists = lists:keydelete(Name, 1, Lists), - ejabberd_riak:put(P#privacy{lists = NewLists}, - privacy_schema()) - end; - {error, _} -> - ok - end}. - -set_privacy_list(Privacy) -> +set_lists(Privacy) -> ejabberd_riak:put(Privacy, privacy_schema()). -set_privacy_list(LUser, LServer, Name, List) -> - {atomic, - case ejabberd_riak:get(privacy, privacy_schema(), {LUser, LServer}) of - {ok, #privacy{lists = Lists} = P} -> - NewLists1 = lists:keydelete(Name, 1, Lists), - NewLists = [{Name, List} | NewLists1], - ejabberd_riak:put(P#privacy{lists = NewLists}, privacy_schema()); - {error, _} -> - NewLists = [{Name, List}], - ejabberd_riak:put(#privacy{us = {LUser, LServer}, - lists = NewLists}, - privacy_schema()) - end}. - -get_user_list(LUser, LServer) -> +set_list(LUser, LServer, Name, List) -> + case ejabberd_riak:get(privacy, privacy_schema(), {LUser, LServer}) of + {ok, #privacy{lists = Lists} = P} -> + NewLists1 = lists:keydelete(Name, 1, Lists), + NewLists = [{Name, List} | NewLists1], + ejabberd_riak:put(P#privacy{lists = NewLists}, privacy_schema()); + {error, notfound} -> + NewLists = [{Name, List}], + ejabberd_riak:put(#privacy{us = {LUser, LServer}, + lists = NewLists}, + privacy_schema()); + Err -> + Err + end. + +get_list(LUser, LServer, Name) -> case ejabberd_riak:get(privacy, privacy_schema(), {LUser, LServer}) of - {ok, #privacy{default = Default, lists = Lists}} -> - case Default of - none -> {none, []}; - _ -> - case lists:keysearch(Default, 1, Lists) of - {value, {_, List}} -> {Default, List}; - _ -> {none, []} - end - end; - {error, _} -> - {none, []} + {ok, #privacy{default = Default, lists = Lists}} when Name == default -> + case lists:keyfind(Default, 1, Lists) of + {_, List} -> {ok, {Default, List}}; + false -> error + end; + {ok, #privacy{lists = Lists}} -> + case lists:keyfind(Name, 1, Lists) of + {_, List} -> {ok, {Name, List}}; + false -> error + end; + {error, notfound} -> + error; + Err -> + Err end. -get_user_lists(LUser, LServer) -> +get_lists(LUser, LServer) -> case ejabberd_riak:get(privacy, privacy_schema(), {LUser, LServer}) of {ok, #privacy{} = P} -> {ok, P}; - {error, _} -> - error + {error, notfound} -> + error; + Err -> + Err end. -remove_user(LUser, LServer) -> - {atomic, ejabberd_riak:delete(privacy, {LUser, LServer})}. +remove_lists(LUser, LServer) -> + ejabberd_riak:delete(privacy, {LUser, LServer}). import(#privacy{} = P) -> ejabberd_riak:put(P, privacy_schema()). |