aboutsummaryrefslogtreecommitdiff
path: root/src/mod_private_riak.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-04-15 15:12:12 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-04-15 15:12:12 +0300
commitfb0ecf33612d5de004817824096d950fac5b5cc3 (patch)
treef29c5855c6737aa11ef1f71dee92a998407df89f /src/mod_private_riak.erl
parentAdd preliminary tests on ACL module and prepare clean-up / refactor (diff)
parentClean mod_mam.erl from DB specific code (diff)
Merge branch 'move-db-code'
Diffstat (limited to 'src/mod_private_riak.erl')
-rw-r--r--src/mod_private_riak.erl67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/mod_private_riak.erl b/src/mod_private_riak.erl
new file mode 100644
index 000000000..11cfa4770
--- /dev/null
+++ b/src/mod_private_riak.erl
@@ -0,0 +1,67 @@
+%%%-------------------------------------------------------------------
+%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
+%%% @copyright (C) 2016, Evgeny Khramtsov
+%%% @doc
+%%%
+%%% @end
+%%% Created : 13 Apr 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net>
+%%%-------------------------------------------------------------------
+-module(mod_private_riak).
+
+-behaviour(mod_private).
+
+%% API
+-export([init/2, set_data/3, get_data/3, get_all_data/2, remove_user/2,
+ import/2]).
+
+-include("jlib.hrl").
+-include("mod_private.hrl").
+
+%%%===================================================================
+%%% API
+%%%===================================================================
+init(_Host, _Opts) ->
+ ok.
+
+set_data(LUser, LServer, Data) ->
+ lists:foreach(
+ fun({XMLNS, El}) ->
+ ejabberd_riak:put(#private_storage{usns = {LUser, LServer, XMLNS},
+ xml = El},
+ private_storage_schema(),
+ [{'2i', [{<<"us">>, {LUser, LServer}}]}])
+ end, Data),
+ {atomic, ok}.
+
+get_data(LUser, LServer, XMLNS) ->
+ case ejabberd_riak:get(private_storage, private_storage_schema(),
+ {LUser, LServer, XMLNS}) of
+ {ok, #private_storage{xml = El}} ->
+ {ok, El};
+ _ ->
+ error
+ end.
+
+get_all_data(LUser, LServer) ->
+ case ejabberd_riak:get_by_index(
+ private_storage, private_storage_schema(),
+ <<"us">>, {LUser, LServer}) of
+ {ok, Res} ->
+ [El || #private_storage{xml = El} <- Res];
+ _ ->
+ []
+ end.
+
+remove_user(LUser, LServer) ->
+ {atomic, ejabberd_riak:delete_by_index(private_storage,
+ <<"us">>, {LUser, LServer})}.
+
+import(_LServer, #private_storage{usns = {LUser, LServer, _}} = PS) ->
+ ejabberd_riak:put(PS, private_storage_schema(),
+ [{'2i', [{<<"us">>, {LUser, LServer}}]}]).
+
+%%%===================================================================
+%%% Internal functions
+%%%===================================================================
+private_storage_schema() ->
+ {record_info(fields, private_storage), #private_storage{}}.