2 -author('jason@ohloh.net').
3 -vsn('$Revision: 1 $ ').
4 -export([import_file/1,
6 -include("random.hrl").
7 -include("more_random.hrl").
9 User = filename:rootname(filename:basename(File)),
10 Server = filename:basename(filename:dirname(File)),
11 case (jlib:nodeprep(User) /= error) andalso
12 (jlib:nameprep(Server) /= error) of
14 case file:read_file(File) of
16 case xml_stream:parse_element(Text) of
17 El when element(1, El) == xmlelement ->
18 case catch process_xdb(User, Server, El) of
21 "Error while processing file \"~s\": ~p~n",
28 ?ERROR_MSG("Can't parse file \"~s\": ~p~n",
33 ?ERROR_MSG("Can't read file \"~s\": ~p~n", [File, Reason]),
37 ?ERROR_MSG("Illegal user/server name in file \"~s\"~n", [File]),
38 {error, "illegal user/server"}
41 {ok, Files} = file:list_dir(Dir),
42 MsgFiles = lists:filter(
44 case string:len(FN) > 4 of
47 string:len(FN) - 3) == ".xml";
54 Res = import_file(filename:join([Dir, FN])),
57 {ok, _} -> {error, "see aoabberd log for details"};
61 process_xdb(User, Server, {xmlelement, Name, _Attrs, Els}) ->
66 xdb_data(User, Server, El)
71 xdb_data(User, Server, {xmlcdata, _CData}) ->
73 xdb_data(User, Server, {xmlelement, _Name, Attrs, _Els} = El) ->
74 From = jlib:make_jid(User, Server, ""),
75 LServer = jlib:nameprep(Server),
76 case xml:get_attr_s("xmlns", Attrs) of
78 Password = xml:get_tag_cdata(El),
79 ejabberd_auth:set_password(User, Server, Password),
82 case lists:member(mod_roster_odbc,
83 gen_mod:loaded_modules(LServer)) of
85 catch mod_roster_odbc:set_items(User, Server, El);
87 catch mod_roster:set_items(User, Server, El)
91 TimeStamp = xml:get_attr_s("last", Attrs),
92 Status = xml:get_tag_cdata(El),
93 case lists:member(mod_last_odbc,
94 gen_mod:loaded_modules(LServer)) of
96 catch mod_last_odbc:store_last_info(
99 list_to_integer(TimeStamp),
102 catch mod_last:store_last_info(
105 list_to_integer(TimeStamp),
110 case lists:member(mod_vcard_odbc,
111 gen_mod:loaded_modules(LServer)) of
113 catch mod_vcard_odbc:process_sm_iq(
115 jlib:make_jid("", Server, ""),
116 #iq{type = set, xmlns = ?NS_VCARD, sub_el = El});
118 catch mod_vcard:process_sm_iq(
120 jlib:make_jid("", Server, ""),
121 #iq{type = set, xmlns = ?NS_VCARD, sub_el = El})
124 "jabber:x:offline" ->
125 process_offline(Server, From, El),
128 case xml:get_attr_s("j_private_flag", Attrs) of
130 catch mod_private:process_sm_iq(
132 jlib:make_jid("", Server, ""),
133 #iq{type = set, xmlns = ?NS_PRIVATE,
134 sub_el = {xmlelement, "query", [],
137 jlib:remove_attr("xdbns", El))]}});
139 ?DEBUG("jd2ejd: Unknown namespace \"~s\"~n", [XMLNS])
143 process_offline(Server, To, {xmlelement, _, _, Els}) ->
144 LServer = jlib:nameprep(Server),
145 lists:foreach(fun({xmlelement, _, Attrs, _} = El) ->
146 FromS = xml:get_attr_s("from", Attrs),
149 jlib:make_jid("", Server, "");
151 jlib:string_to_jid(FromS)
157 ejabberd_hooks:run(offline_message_hook,