aboutsummaryrefslogtreecommitdiff
path: root/src/mod_privacy_riak.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_privacy_riak.erl')
-rw-r--r--src/mod_privacy_riak.erl173
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()).