summaryrefslogtreecommitdiff
path: root/src/mod_configure.erl
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2003-01-21 20:36:55 +0000
committerAlexey Shchepin <alexey@process-one.net>2003-01-21 20:36:55 +0000
commitf0427ecab55b393cdc368c6f8b2bb0ae2d8cf07c (patch)
treebf151a7c8bd4b4964a6095dceda261dca48c29e5 /src/mod_configure.erl
parent*** empty log message *** (diff)
*** empty log message ***
SVN Revision: 46
Diffstat (limited to '')
-rw-r--r--src/mod_configure.erl144
1 files changed, 139 insertions, 5 deletions
diff --git a/src/mod_configure.erl b/src/mod_configure.erl
index b72f180b..5ae67513 100644
--- a/src/mod_configure.erl
+++ b/src/mod_configure.erl
@@ -11,7 +11,8 @@
-vsn('$Revision$ ').
-export([start/0,
- process_local_iq/3]).
+ process_local_iq/3,
+ process_sm_iq/3]).
-include("ejabberd.hrl").
-include("namespaces.hrl").
@@ -19,7 +20,10 @@
start() ->
ejabberd_local:register_iq_handler(?NS_XDATA,
- ?MODULE, process_local_iq).
+ ?MODULE, process_local_iq),
+ ejabberd_sm:register_iq_handler(?NS_XDATA,
+ ?MODULE, process_sm_iq),
+ ok.
process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
@@ -92,6 +96,12 @@ process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
{"label", translate:translate(Lang, Label)},
{"var", Var}], []}).
+-define(XFIELD(Type, Label, Var, Val),
+ {xmlelement, "field", [{"type", Type},
+ {"label", translate:translate(Lang, Label)},
+ {"var", Var}],
+ [{xmlelement, "value", [], [{xmlcdata, Val}]}]}).
+
-define(TABLEFIELD(Table, Val),
{xmlelement, "field", [{"type", "list-single"},
{"label", atom_to_list(Table)},
@@ -105,7 +115,8 @@ process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
"RAM and disc copy")}],
[{xmlelement, "value", [], [{xmlcdata, "disc_copies"}]}]},
{xmlelement, "option", [{"label",
- translate:translate(Lang, "Disk copy")}],
+ translate:translate(Lang,
+ "Disc only copy")}],
[{xmlelement, "value", [], [{xmlcdata, "disc_only_copies"}]}]},
{xmlelement, "option", [{"label",
translate:translate(Lang, "Remote copy")}],
@@ -123,6 +134,7 @@ get_form(["running nodes", ENode, "DB"], Lang) ->
{badrpc, Reason} ->
{error, "500", "Internal Server Error"};
Tables ->
+ STables = lists:sort(Tables),
{result, [{xmlelement, "title", [],
[{xmlcdata,
translate:translate(
@@ -142,11 +154,27 @@ get_form(["running nodes", ENode, "DB"], Lang) ->
Type ->
?TABLEFIELD(Table, Type)
end
- end, Tables)
+ end, STables)
]}
end
end;
+get_form(["config", "hostname"], Lang) ->
+ {result, [{xmlelement, "title", [],
+ [{xmlcdata,
+ translate:translate(
+ Lang, "DB Tables Configuration")}]},
+ {xmlelement, "instructions", [],
+ [{xmlcdata,
+ translate:translate(
+ Lang, "Choose host name")}]},
+ {xmlelement, "field", [{"type", "text-single"},
+ {"label",
+ translate:translate(Lang, "Host name")},
+ {"var", "hostname"}],
+ [{xmlelement, "value", [], [{xmlcdata, ?MYNAME}]}]}
+ ]};
+
get_form(_, Lang) ->
{error, "503", "Service Unavailable"}.
@@ -159,7 +187,7 @@ set_form(["running nodes", ENode, "DB"], Lang, XData) ->
Node ->
lists:foreach(
fun({SVar, SVals}) ->
- % We believe that this allowed only for good peoples
+ % We believe that this is allowed only for good peoples
Table = list_to_atom(SVar),
Type = case SVals of
["unknown"] -> unknown;
@@ -186,6 +214,19 @@ set_form(["running nodes", ENode, "DB"], Lang, XData) ->
{result, []}
end;
+set_form(["config", "hostname"], Lang, XData) ->
+ case lists:keysearch("hostname", 1, XData) of
+ false ->
+ {error, "406", "Not Acceptable"};
+ {value, {_, [""]}} ->
+ {error, "406", "Not Acceptable"};
+ {value, {_, [NewName]}} ->
+ ejabberd_config:add_global_option(hostname, NewName),
+ {result, []};
+ _ ->
+ {error, "406", "Not Acceptable"}
+ end;
+
set_form(_, Lang, XData) ->
{error, "503", "Service Unavailable"}.
@@ -204,4 +245,97 @@ search_running_node(SNode, [Node | Nodes]) ->
search_running_node(SNode, Nodes)
end.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+process_sm_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+ case acl:match_rule(configure, From) of
+ deny ->
+ {iq, ID, error, XMLNS, [SubEl, {xmlelement, "error",
+ [{"code", "405"}],
+ [{xmlcdata, "Not Allowed"}]}]};
+ allow ->
+ {User, _, _} = To,
+ Lang = xml:get_tag_attr_s("xml:lang", SubEl),
+ case Type of
+ set ->
+ case xml:get_tag_attr_s("type", SubEl) of
+ "cancel" ->
+ {iq, ID, result, XMLNS,
+ [{xmlelement, "query", [{"xmlns", XMLNS}], []}]};
+ "submit" ->
+ XData = jlib:parse_xdata_submit(SubEl),
+ case XData of
+ invalid ->
+ {iq, ID, error, XMLNS,
+ [SubEl, {xmlelement, "error",
+ [{"code", "400"}],
+ [{xmlcdata, "Bad Request"}]}]};
+ _ ->
+ Node =
+ string:tokens(
+ xml:get_tag_attr_s("node", SubEl),
+ "/"),
+ case set_sm_form(
+ User, Node, Lang, XData) of
+ {result, Res} ->
+ {iq, ID, result, XMLNS,
+ [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ Res
+ }]};
+ {error, Code, Desc} ->
+ {iq, ID, error, XMLNS,
+ [SubEl, {xmlelement, "error",
+ [{"code", Code}],
+ [{xmlcdata, Desc}]}]}
+ end
+ end;
+ _ ->
+ {iq, ID, error, XMLNS,
+ [SubEl, {xmlelement, "error",
+ [{"code", "405"}],
+ [{xmlcdata, "Not Allowed"}]}]}
+ end;
+ get ->
+ Node =
+ string:tokens(xml:get_tag_attr_s("node", SubEl), "/"),
+ case get_sm_form(User, Node, Lang) of
+ {result, Res} ->
+ {iq, ID, result, XMLNS,
+ [{xmlelement, "query", [{"xmlns", XMLNS}],
+ Res
+ }]};
+ {error, Code, Desc} ->
+ {iq, ID, error, XMLNS,
+ [SubEl, {xmlelement, "error",
+ [{"code", Code}],
+ [{xmlcdata, Desc}]}]}
+ end
+ end
+ end.
+
+
+get_sm_form(User, [], Lang) ->
+ {result, [{xmlelement, "title", [],
+ [{xmlcdata,
+ translate:translate(
+ Lang, "Administration of " ++ User)}]},
+ %{xmlelement, "instructions", [],
+ % [{xmlcdata,
+ % translate:translate(
+ % Lang, "Choose host name")}]},
+ ?XFIELD("text-private", "Password", "password",
+ ejabberd_auth:get_password_s(User))
+ %{xmlelement, "field", [{"type", "text-single"},
+ % {"label",
+ % translate:translate(Lang, "Host name")},
+ % {"var", "hostname"}],
+ % [{xmlelement, "value", [], [{xmlcdata, ?MYNAME}]}]}
+ ]};
+
+get_sm_form(_, _, Lang) ->
+ {error, "503", "Service Unavailable"}.
+
+
+set_sm_form(_, _, Lang, XData) ->
+ {error, "503", "Service Unavailable"}.