aboutsummaryrefslogtreecommitdiff
path: root/src/mod_private.erl
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/mod_private.erl59
1 files changed, 53 insertions, 6 deletions
diff --git a/src/mod_private.erl b/src/mod_private.erl
index 9fa74d9b7..301880e97 100644
--- a/src/mod_private.erl
+++ b/src/mod_private.erl
@@ -89,7 +89,8 @@ process_sm_iq(#jid{luser = LUser, lserver = LServer},
end,
case DBType of
odbc -> ejabberd_odbc:sql_transaction(LServer, F);
- mnesia -> mnesia:transaction(F)
+ mnesia -> mnesia:transaction(F);
+ riak -> F()
end,
IQ#iq{type = result, sub_el = []}
end;
@@ -149,7 +150,15 @@ set_data(LUser, LServer, {XMLNS, El}, odbc) ->
LXMLNS = ejabberd_odbc:escape(XMLNS),
SData = ejabberd_odbc:escape(xml:element_to_binary(El)),
odbc_queries:set_private_data(LServer, Username, LXMLNS,
- SData).
+ SData);
+set_data(LUser, LServer, {XMLNS, El}, riak) ->
+ Username = LUser,
+ Key = <<LUser/binary, $@, LServer/binary, $@, XMLNS/binary>>,
+ SData = xml:element_to_binary(El),
+ ejabberd_riak:put(
+ LServer, <<"private">>, Key, SData,
+ [{<<"user_bin">>, Username}]),
+ ok.
get_data(LUser, LServer, Data) ->
get_data(LUser, LServer,
@@ -182,10 +191,19 @@ get_data(LUser, LServer, odbc, [{XMLNS, El} | Els],
Data when is_record(Data, xmlel) ->
get_data(LUser, LServer, odbc, Els, [Data | Res])
end;
- %% MREMOND: I wonder when the query could return a vcard ?
- {selected, [<<"vcard">>], []} ->
- get_data(LUser, LServer, odbc, Els, [El | Res]);
_ -> get_data(LUser, LServer, odbc, Els, [El | Res])
+ end;
+get_data(LUser, LServer, riak, [{XMLNS, El} | Els],
+ Res) ->
+ Key = <<LUser/binary, $@, LServer/binary, $@, XMLNS/binary>>,
+ case ejabberd_riak:get(LServer, <<"private">>, Key) of
+ {ok, SData} ->
+ case xml_stream:parse_element(SData) of
+ Data when element(1, Data) == xmlelement ->
+ get_data(LUser, LServer, riak, Els, [Data | Res])
+ end;
+ _ ->
+ get_data(LUser, LServer, riak, Els, [El | Res])
end.
@@ -214,6 +232,23 @@ get_all_data(LUser, LServer, odbc) ->
end, Res);
_ ->
[]
+ end;
+get_all_data(LUser, LServer, riak) ->
+ Username = LUser,
+ case ejabberd_riak:get_by_index(
+ LServer, <<"private">>, <<"user_bin">>, Username) of
+ {ok, Res} ->
+ lists:flatmap(
+ fun(SData) ->
+ case xml_stream:parse_element(SData) of
+ #xmlel{} = El ->
+ [El];
+ _ ->
+ []
+ end
+ end, Res);
+ _ ->
+ []
end.
remove_user(User, Server) ->
@@ -242,7 +277,19 @@ remove_user(LUser, LServer, mnesia) ->
remove_user(LUser, LServer, odbc) ->
Username = ejabberd_odbc:escape(LUser),
odbc_queries:del_user_private_storage(LServer,
- Username).
+ Username);
+remove_user(LUser, LServer, riak) ->
+ Username = LUser,
+ case ejabberd_riak:get_keys_by_index(
+ LServer, <<"private">>, <<"user_bin">>, Username) of
+ {ok, Keys} ->
+ lists:foreach(
+ fun(Key) ->
+ ejabberd_riak:delete(LServer, <<"private">>, Key)
+ end, Keys);
+ _ ->
+ ok
+ end.
update_table() ->
Fields = record_info(fields, private_storage),