parent
aea6166efe
commit
3a5d2dbed8
@ -1,35 +0,0 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2018 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
%%% published by the Free Software Foundation; either version 2 of the
|
||||
%%% License, or (at your option) any later version.
|
||||
%%%
|
||||
%%% This program is distributed in the hope that it will be useful,
|
||||
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
%%% General Public License for more details.
|
||||
%%%
|
||||
%%% You should have received a copy of the GNU General Public License along
|
||||
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
%%%
|
||||
%%%----------------------------------------------------------------------
|
||||
|
||||
-type conn_param() :: {binary(), binary(), inet:port_number(), binary()} |
|
||||
{binary(), binary(), inet:port_number()} |
|
||||
{binary(), binary()} |
|
||||
{binary()}.
|
||||
|
||||
-type irc_data() :: [{username, binary()} | {connections_params, [conn_param()]}].
|
||||
|
||||
-record(irc_connection,
|
||||
{jid_server_host = {#jid{}, <<"">>, <<"">>} :: {jid(), binary(), binary()},
|
||||
pid = self() :: pid()}).
|
||||
|
||||
-record(irc_custom,
|
||||
{us_host = {{<<"">>, <<"">>}, <<"">>} :: {{binary(), binary()},
|
||||
binary()},
|
||||
data = [] :: irc_data()}).
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,81 +0,0 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% File : mod_irc_mnesia.erl
|
||||
%%% Author : Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||
%%% Created : 14 Apr 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2018 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
%%% published by the Free Software Foundation; either version 2 of the
|
||||
%%% License, or (at your option) any later version.
|
||||
%%%
|
||||
%%% This program is distributed in the hope that it will be useful,
|
||||
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
%%% General Public License for more details.
|
||||
%%%
|
||||
%%% You should have received a copy of the GNU General Public License along
|
||||
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
%%%
|
||||
%%%----------------------------------------------------------------------
|
||||
|
||||
-module(mod_irc_mnesia).
|
||||
|
||||
-behaviour(mod_irc).
|
||||
|
||||
%% API
|
||||
-export([init/2, get_data/3, set_data/4, import/2]).
|
||||
-export([need_transform/1, transform/1]).
|
||||
|
||||
-include("jid.hrl").
|
||||
-include("mod_irc.hrl").
|
||||
-include("logger.hrl").
|
||||
|
||||
%%%===================================================================
|
||||
%%% API
|
||||
%%%===================================================================
|
||||
init(_Host, _Opts) ->
|
||||
ejabberd_mnesia:create(?MODULE, irc_custom,
|
||||
[{disc_copies, [node()]},
|
||||
{attributes, record_info(fields, irc_custom)}]).
|
||||
|
||||
get_data(_LServer, Host, From) ->
|
||||
{U, S, _} = jid:tolower(From),
|
||||
case catch mnesia:dirty_read({irc_custom, {{U, S}, Host}}) of
|
||||
{'EXIT', _Reason} -> error;
|
||||
[] -> empty;
|
||||
[#irc_custom{data = Data}] -> Data
|
||||
end.
|
||||
|
||||
set_data(_LServer, Host, From, Data) ->
|
||||
{U, S, _} = jid:tolower(From),
|
||||
F = fun () ->
|
||||
mnesia:write(#irc_custom{us_host = {{U, S}, Host},
|
||||
data = Data})
|
||||
end,
|
||||
mnesia:transaction(F).
|
||||
|
||||
import(_LServer, #irc_custom{} = R) ->
|
||||
mnesia:dirty_write(R).
|
||||
|
||||
need_transform(#irc_custom{us_host = {{U, S}, H}})
|
||||
when is_list(U) orelse is_list(S) orelse is_list(H) ->
|
||||
?INFO_MSG("Mnesia table 'irc_custom' will be converted to binary", []),
|
||||
true;
|
||||
need_transform(_) ->
|
||||
false.
|
||||
|
||||
transform(#irc_custom{us_host = {{U, S}, H},
|
||||
data = Data} = R) ->
|
||||
JID = jid:make(U, S),
|
||||
R#irc_custom{us_host = {{iolist_to_binary(U),
|
||||
iolist_to_binary(S)},
|
||||
iolist_to_binary(H)},
|
||||
data = mod_irc:data_to_binary(JID, Data)}.
|
||||
|
||||
%%%===================================================================
|
||||
%%% Internal functions
|
||||
%%%===================================================================
|
@ -1,65 +0,0 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% File : mod_irc_riak.erl
|
||||
%%% Author : Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||
%%% Created : 14 Apr 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2018 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
%%% published by the Free Software Foundation; either version 2 of the
|
||||
%%% License, or (at your option) any later version.
|
||||
%%%
|
||||
%%% This program is distributed in the hope that it will be useful,
|
||||
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
%%% General Public License for more details.
|
||||
%%%
|
||||
%%% You should have received a copy of the GNU General Public License along
|
||||
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
%%%
|
||||
%%%----------------------------------------------------------------------
|
||||
|
||||
-module(mod_irc_riak).
|
||||
|
||||
-behaviour(mod_irc).
|
||||
|
||||
%% API
|
||||
-export([init/2, get_data/3, set_data/4, import/2]).
|
||||
|
||||
-include("jid.hrl").
|
||||
-include("mod_irc.hrl").
|
||||
|
||||
%%%===================================================================
|
||||
%%% API
|
||||
%%%===================================================================
|
||||
init(_Host, _Opts) ->
|
||||
ok.
|
||||
|
||||
get_data(_LServer, Host, From) ->
|
||||
{U, S, _} = jid:tolower(From),
|
||||
case ejabberd_riak:get(irc_custom, irc_custom_schema(), {{U, S}, Host}) of
|
||||
{ok, #irc_custom{data = Data}} ->
|
||||
Data;
|
||||
{error, notfound} ->
|
||||
empty;
|
||||
_Err ->
|
||||
error
|
||||
end.
|
||||
|
||||
set_data(_LServer, Host, From, Data) ->
|
||||
{U, S, _} = jid:tolower(From),
|
||||
{atomic, ejabberd_riak:put(#irc_custom{us_host = {{U, S}, Host},
|
||||
data = Data},
|
||||
irc_custom_schema())}.
|
||||
|
||||
import(_LServer, #irc_custom{} = R) ->
|
||||
ejabberd_riak:put(R, irc_custom_schema()).
|
||||
|
||||
%%%===================================================================
|
||||
%%% Internal functions
|
||||
%%%===================================================================
|
||||
irc_custom_schema() ->
|
||||
{record_info(fields, irc_custom), #irc_custom{}}.
|
@ -1,106 +0,0 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% File : mod_irc_sql.erl
|
||||
%%% Author : Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||
%%% Created : 14 Apr 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2018 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
%%% published by the Free Software Foundation; either version 2 of the
|
||||
%%% License, or (at your option) any later version.
|
||||
%%%
|
||||
%%% This program is distributed in the hope that it will be useful,
|
||||
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
%%% General Public License for more details.
|
||||
%%%
|
||||
%%% You should have received a copy of the GNU General Public License along
|
||||
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
%%%
|
||||
%%%----------------------------------------------------------------------
|
||||
|
||||
-module(mod_irc_sql).
|
||||
|
||||
-compile([{parse_transform, ejabberd_sql_pt}]).
|
||||
|
||||
-behaviour(mod_irc).
|
||||
|
||||
%% API
|
||||
-export([init/2, get_data/3, set_data/4, import/1, import/2, export/1]).
|
||||
|
||||
-include("jid.hrl").
|
||||
-include("mod_irc.hrl").
|
||||
-include("ejabberd_sql_pt.hrl").
|
||||
|
||||
%%%===================================================================
|
||||
%%% API
|
||||
%%%===================================================================
|
||||
init(_Host, _Opts) ->
|
||||
ok.
|
||||
|
||||
get_data(LServer, Host, From) ->
|
||||
SJID = jid:encode(jid:tolower(jid:remove_resource(From))),
|
||||
case catch ejabberd_sql:sql_query(
|
||||
LServer,
|
||||
?SQL("select @(data)s from irc_custom"
|
||||
" where jid=%(SJID)s and host=%(Host)s and %(LServer)H")) of
|
||||
{selected, [{SData}]} ->
|
||||
mod_irc:data_to_binary(From, ejabberd_sql:decode_term(SData));
|
||||
{'EXIT', _} -> error;
|
||||
{selected, _} -> empty
|
||||
end.
|
||||
|
||||
set_data(LServer, Host, From, Data) ->
|
||||
SJID = jid:encode(jid:tolower(jid:remove_resource(From))),
|
||||
SData = misc:term_to_expr(Data),
|
||||
F = fun () ->
|
||||
?SQL_UPSERT_T(
|
||||
"irc_custom",
|
||||
["!jid=%(SJID)s",
|
||||
"!host=%(Host)s",
|
||||
"server_host=%(LServer)s",
|
||||
"data=%(SData)s"]),
|
||||
ok
|
||||
end,
|
||||
ejabberd_sql:sql_transaction(LServer, F).
|
||||
|
||||
export(_Server) ->
|
||||
[{irc_custom,
|
||||
fun(Host, #irc_custom{us_host = {{U, S}, IRCHost},
|
||||
data = Data}) ->
|
||||
case str:suffix(Host, IRCHost) of
|
||||
true ->
|
||||
SJID = jid:encode(jid:make(U, S)),
|
||||
LServer = ejabberd_router:host_of_route(IRCHost),
|
||||
SData = misc:term_to_expr(Data),
|
||||
[?SQL("delete from irc_custom"
|
||||
" where jid=%(SJID)s and host=%(IRCHost)s and %(LServer)H;"),
|
||||
?SQL_INSERT(
|
||||
"irc_custom",
|
||||
["jid=%(SJID)s",
|
||||
"host=%(Host)s",
|
||||
"server_host=%(LServer)s",
|
||||
"data=%(SData)s"])];
|
||||
false ->
|
||||
[]
|
||||
end
|
||||
end}].
|
||||
|
||||
import(_LServer) ->
|
||||
[{<<"select jid, host, data from irc_custom;">>,
|
||||
fun([SJID, IRCHost, SData]) ->
|
||||
#jid{luser = U, lserver = S} = jid:decode(SJID),
|
||||
Data = ejabberd_sql:decode_term(SData),
|
||||
#irc_custom{us_host = {{U, S}, IRCHost},
|
||||
data = Data}
|
||||
end}].
|
||||
|
||||
import(_, _) ->
|
||||
pass.
|
||||
|
||||
%%%===================================================================
|
||||
%%% Internal functions
|
||||
%%%===================================================================
|
Loading…
Reference in new issue