summaryrefslogtreecommitdiff
path: root/src/mod_blocking_riak.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-04-14 14:17:20 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-04-14 14:17:20 +0300
commit860db2ddcae5d8bc541a566de24e5c03e546292d (patch)
tree72de399637291883f24a1c57bd2acc92534aba6f /src/mod_blocking_riak.erl
parentClean mod_privacy.erl from DB specific code (diff)
Clean mod_blocking.erl from DB specific code
Diffstat (limited to 'src/mod_blocking_riak.erl')
-rw-r--r--src/mod_blocking_riak.erl98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/mod_blocking_riak.erl b/src/mod_blocking_riak.erl
new file mode 100644
index 00000000..5dd5cfa9
--- /dev/null
+++ b/src/mod_blocking_riak.erl
@@ -0,0 +1,98 @@
+%%%-------------------------------------------------------------------
+%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
+%%% @copyright (C) 2016, Evgeny Khramtsov
+%%% @doc
+%%%
+%%% @end
+%%% Created : 14 Apr 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net>
+%%%-------------------------------------------------------------------
+-module(mod_blocking_riak).
+
+-behaviour(mod_blocking).
+
+%% API
+-export([process_blocklist_block/3, unblock_by_filter/3,
+ process_blocklist_get/2]).
+
+-include("jlib.hrl").
+-include("mod_privacy.hrl").
+
+%%%===================================================================
+%%% API
+%%%===================================================================
+process_blocklist_block(LUser, LServer, Filter) ->
+ {atomic,
+ begin
+ case ejabberd_riak:get(privacy, mod_privacy_riak:privacy_schema(),
+ {LUser, LServer}) of
+ {ok, #privacy{default = Default, lists = Lists} = P} ->
+ case lists:keysearch(Default, 1, Lists) of
+ {value, {_, List}} ->
+ NewDefault = Default,
+ NewLists1 = lists:keydelete(Default, 1, Lists);
+ false ->
+ NewDefault = <<"Blocked contacts">>,
+ NewLists1 = Lists,
+ List = []
+ end;
+ {error, _} ->
+ P = #privacy{us = {LUser, LServer}},
+ NewDefault = <<"Blocked contacts">>,
+ NewLists1 = [],
+ List = []
+ end,
+ NewList = Filter(List),
+ NewLists = [{NewDefault, NewList} | NewLists1],
+ case ejabberd_riak:put(P#privacy{default = NewDefault,
+ lists = NewLists},
+ mod_privacy_riak:privacy_schema()) of
+ ok ->
+ {ok, NewDefault, NewList};
+ Err ->
+ Err
+ end
+ end}.
+
+unblock_by_filter(LUser, LServer, Filter) ->
+ {atomic,
+ case ejabberd_riak:get(privacy, mod_privacy_riak:privacy_schema(),
+ {LUser, LServer}) of
+ {error, _} ->
+ %% No lists, nothing to unblock
+ ok;
+ {ok, #privacy{default = Default, lists = Lists} = P} ->
+ case lists:keysearch(Default, 1, Lists) of
+ {value, {_, List}} ->
+ NewList = Filter(List),
+ NewLists1 = lists:keydelete(Default, 1, Lists),
+ NewLists = [{Default, NewList} | NewLists1],
+ case ejabberd_riak:put(P#privacy{lists = NewLists},
+ mod_privacy_riak:privacy_schema()) of
+ ok ->
+ {ok, Default, NewList};
+ Err ->
+ Err
+ end;
+ false ->
+ %% No default list, nothing to unblock
+ ok
+ end
+ end}.
+
+process_blocklist_get(LUser, LServer) ->
+ case ejabberd_riak:get(privacy, mod_privacy_riak:privacy_schema(),
+ {LUser, LServer}) of
+ {ok, #privacy{default = Default, lists = Lists}} ->
+ case lists:keysearch(Default, 1, Lists) of
+ {value, {_, List}} -> List;
+ _ -> []
+ end;
+ {error, notfound} ->
+ [];
+ {error, _} ->
+ error
+ end.
+
+%%%===================================================================
+%%% Internal functions
+%%%===================================================================