24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-02 21:17:12 +02:00

* doc/guide.tex: Updated

* src/web/ejabberd_web.erl: Updated

* src/web/ejabberd_http.erl: Bugfix

SVN Revision: 220
This commit is contained in:
Alexey Shchepin 2004-03-20 20:55:58 +00:00
parent 9e3c4edd1d
commit 2f47b7edd9
5 changed files with 160 additions and 16 deletions

View File

@ -1,3 +1,11 @@
2004-03-20 Alexey Shchepin <alexey@sevcom.net>
* doc/guide.tex: Updated
* src/web/ejabberd_web.erl: Updated
* src/web/ejabberd_http.erl: Bugfix
2004-03-16 Alexey Shchepin <alexey@sevcom.net> 2004-03-16 Alexey Shchepin <alexey@sevcom.net>
* src/mod_roster.erl: Bugfix * src/mod_roster.erl: Bugfix
@ -139,7 +147,7 @@
* src/mod_irc/mod_irc.erl: Likewise * src/mod_irc/mod_irc.erl: Likewise
* src/mod_configure.erl: "jabber:iq:data" replaced with * src/mod_configure.erl: "jabber:iq:data" replaced with
"ejabber:config" namespace (thanks to Sergei Golovan) "ejabberd:config" namespace (thanks to Sergei Golovan)
* src/mod_disco.erl: Likewise * src/mod_disco.erl: Likewise
2004-02-12 Alexey Shchepin <alexey@sevcom.net> 2004-02-12 Alexey Shchepin <alexey@sevcom.net>
@ -150,15 +158,15 @@
* src/msgs/ru.msg: Updated (thanks to Sergei Golovan) * src/msgs/ru.msg: Updated (thanks to Sergei Golovan)
* src/mod_irc/mod_irc.erl: Now uses "ejabber:config" namespace * src/mod_irc/mod_irc.erl: Now uses "ejabberd:config" namespace
(thanks to Sergei Golovan) (thanks to Sergei Golovan)
* src/mod_disco.erl: Fixed disco category and type (thanks to * src/mod_disco.erl: Fixed disco category and type (thanks to
Sergei Golovan) Sergei Golovan)
* src/mod_pubsub/mod_pubsub.erl: Likewise * src/mod_pubsub/mod_pubsub.erl: Likewise
* src/jlib.hrl: Added "ejabber:config" namespace (thanks to Sergei * src/jlib.hrl: Added "ejabberd:config" namespace (thanks to
Golovan) Sergei Golovan)
2004-01-27 Alexey Shchepin <alexey@sevcom.net> 2004-01-27 Alexey Shchepin <alexey@sevcom.net>

View File

@ -129,7 +129,11 @@ Works on most of popular platforms: *nix (tested on Linux, FreeBSD and
<A HREF="http://www.jabber.org/jeps/jep-0060.html">Publish-Subscribe</A> <A HREF="http://www.jabber.org/jeps/jep-0060.html">Publish-Subscribe</A>
service service
<LI>Built-in Jabber Users Directory service based on users vCards <LI>Built-in Jabber Users Directory service based on users vCards
<LI>Built-in
<A HREF="http://www.jabber.org/jeps/jep-0025.html">HTTP Polling</A>
service
<LI>SSL support <LI>SSL support
<LI>Support for LDAP authentification
<LI>Ability to interface with external components (JIT, MSN-t, Yahoo-t, etc) <LI>Ability to interface with external components (JIT, MSN-t, Yahoo-t, etc)
<LI>Migration from jabberd14 is possible <LI>Migration from jabberd14 is possible
<LI>Mostly XMPP-compliant <LI>Mostly XMPP-compliant
@ -139,12 +143,11 @@ Works on most of popular platforms: *nix (tested on Linux, FreeBSD and
<LI>Support for <LI>Support for
<A HREF="http://www.jabber.org/jeps/jep-0039.html">JEP-0039</A> <A HREF="http://www.jabber.org/jeps/jep-0039.html">JEP-0039</A>
(Statistics Gathering). (Statistics Gathering).
<LI>Support for <TT>xml:lang</TT> attribute in many XML elements <LI>Support for <TT>xml:lang</TT>
</UL> </UL>
The misfeatures of <TT>ejabberd</TT> is: The misfeatures of <TT>ejabberd</TT> is:
<UL><LI> <UL><LI>
No support for external authentification No support for virtual domains
<LI>No support for virtual domains
<LI>No support for STARTTLS <LI>No support for STARTTLS
</UL> </UL>
<!--TOC section Installation--> <!--TOC section Installation-->

View File

@ -78,7 +78,11 @@ The main features of \ejabberd{} is:
\footahref{http://www.jabber.org/jeps/jep-0060.html}{Publish-Subscribe} \footahref{http://www.jabber.org/jeps/jep-0060.html}{Publish-Subscribe}
service service
\item Built-in Jabber Users Directory service based on users vCards \item Built-in Jabber Users Directory service based on users vCards
\item Built-in
\footahref{http://www.jabber.org/jeps/jep-0025.html}{HTTP Polling}
service
\item SSL support \item SSL support
\item Support for LDAP authentification
\item Ability to interface with external components (JIT, MSN-t, Yahoo-t, etc) \item Ability to interface with external components (JIT, MSN-t, Yahoo-t, etc)
\item Migration from jabberd14 is possible \item Migration from jabberd14 is possible
\item Mostly XMPP-compliant \item Mostly XMPP-compliant
@ -88,12 +92,11 @@ The main features of \ejabberd{} is:
\item Support for \item Support for
\footahref{http://www.jabber.org/jeps/jep-0039.html}{JEP-0039} \footahref{http://www.jabber.org/jeps/jep-0039.html}{JEP-0039}
(Statistics Gathering). (Statistics Gathering).
\item Support for \ns{xml:lang} attribute in many XML elements \item Support for \ns{xml:lang}
\end{itemize} \end{itemize}
The misfeatures of \ejabberd{} is: The misfeatures of \ejabberd{} is:
\begin{itemize} \begin{itemize}
\item No support for external authentification
\item No support for virtual domains \item No support for virtual domains
\item No support for STARTTLS \item No support for STARTTLS
\end{itemize} \end{itemize}

View File

@ -122,7 +122,8 @@ process_request(#state{request_method = 'GET',
case ejabberd_web:process_get(Request) of case ejabberd_web:process_get(Request) of
El when element(1, El) == xmlelement -> El when element(1, El) == xmlelement ->
make_xhtml_output(200, [], El); make_xhtml_output(200, [], El);
{Status, Headers, El} -> {Status, Headers, El} when
element(1, El) == xmlelement ->
make_xhtml_output(Status, Headers, El); make_xhtml_output(Status, Headers, El);
Text when is_list(Text) -> Text when is_list(Text) ->
make_text_output(200, [], Text); make_text_output(200, [], Text);

View File

@ -84,7 +84,8 @@ process_admin(#request{user = User,
?XE("ul", ?XE("ul",
[?LI([?AC("acls/", "Access Control Lists"), ?C(" "), [?LI([?AC("acls/", "Access Control Lists"), ?C(" "),
?AC("acls-raw/", "(raw)")]), ?AC("acls-raw/", "(raw)")]),
?LI([?AC("access/", "Access Rules")]), ?LI([?AC("access/", "Access Rules"), ?C(" "),
?AC("access-raw/", "(raw)")]),
?LI([?AC("users/", "Users")]), ?LI([?AC("users/", "Users")]),
?LI([?AC("nodes/", "Nodes")]), ?LI([?AC("nodes/", "Nodes")]),
?LI([?AC("stats/", "Statistics")]) ?LI([?AC("stats/", "Statistics")])
@ -177,6 +178,100 @@ process_admin(#request{method = Method,
]) ])
]); ]);
process_admin(#request{user = User,
path = ["access-raw"],
q = Query,
lang = Lang} = Request) ->
SetAccess =
fun(Rs) ->
mnesia:transaction(
fun() ->
Os = mnesia:select(config,
[{{config, {access, '$1'}, '$2'},
[],
['$_']}]),
lists:foreach(fun(O) ->
mnesia:delete_object(O)
end, Os),
lists:foreach(
fun({access, Name, Rules}) ->
mnesia:write({config,
{access, Name},
Rules})
end, Rs)
end)
end,
Res = case lists:keysearch("access", 1, Query) of
{value, {_, String}} ->
case erl_scan:string(String) of
{ok, Tokens, _} ->
case erl_parse:parse_term(Tokens) of
{ok, Rs} ->
case SetAccess(Rs) of
{atomic, _} ->
ok;
_ ->
error
end;
_ ->
error
end;
_ ->
error
end;
_ ->
nothing
end,
Access =
lists:flatten(
io_lib:format(
"~p.", [ets:select(config,
[{{config, {access, '$1'}, '$2'},
[],
[{{access, '$1', '$2'}}]}])])),
make_xhtml([?XC("h1", "ejabberd access rules configuration")] ++
case Res of
ok -> [?C("submited"), ?P];
error -> [?C("bad format"), ?P];
nothing -> []
end ++
[?XAE("form", [{"method", "post"}],
[?XAC("textarea", [{"name", "access"},
{"rows", "16"},
{"cols", "80"}],
Access),
?BR,
?XA("input", [{"type", "submit"}])
])
]);
process_admin(#request{method = Method,
user = User,
path = ["access"],
q = Query,
lang = Lang} = Request) ->
?INFO_MSG("query: ~p", [Query]),
Res = nothing,
AccessRules =
ets:select(config,
[{{config, {access, '$1'}, '$2'},
[],
[{{access, '$1', '$2'}}]}]),
make_xhtml([?XC("h1", "ejabberd access rules configuration")] ++
case Res of
ok -> [?C("submited"), ?P];
error -> [?C("bad format"), ?P];
nothing -> []
end ++
[?XAE("form", [{"method", "post"}],
[access_rules_to_xhtml(AccessRules),
?BR,
?XA("input", [{"type", "submit"},
{"name", "delete"},
{"value", "Delete Selected"}])
])
]);
process_admin(#request{user = User, process_admin(#request{user = User,
path = ["users"], path = ["users"],
q = Query, q = Query,
@ -209,7 +304,7 @@ acls_to_xhtml(ACLs) ->
lists:map( lists:map(
fun({acl, Name, Spec} = ACL) -> fun({acl, Name, Spec} = ACL) ->
SName = atom_to_list(Name), SName = atom_to_list(Name),
ID = acl_to_id(ACL), ID = term_to_id(ACL),
?XE("tr", ?XE("tr",
[?XE("td", [?XE("td",
[?XA("input", [{"type", "checkbox"}, [?XA("input", [{"type", "checkbox"},
@ -268,8 +363,8 @@ acl_spec_select(ID, Opt) ->
term_to_string(T) -> term_to_string(T) ->
lists:flatten(io_lib:format("~1000000p", [T])). lists:flatten(io_lib:format("~1000000p", [T])).
acl_to_id(ACL) -> term_to_id(T) ->
jlib:encode_base64(binary_to_list(term_to_binary(ACL))). jlib:encode_base64(binary_to_list(term_to_binary(T))).
acl_parse_query(Query) -> acl_parse_query(Query) ->
@ -289,7 +384,7 @@ acl_parse_submit(ACLs, Query) ->
lists:map( lists:map(
fun({acl, Name, Spec} = ACL) -> fun({acl, Name, Spec} = ACL) ->
SName = atom_to_list(Name), SName = atom_to_list(Name),
ID = acl_to_id(ACL), ID = term_to_id(ACL),
case {lists:keysearch("type" ++ ID, 1, Query), case {lists:keysearch("type" ++ ID, 1, Query),
lists:keysearch("value" ++ ID, 1, Query)} of lists:keysearch("value" ++ ID, 1, Query)} of
{{value, {_, T}}, {value, {_, V}}} -> {{value, {_, T}}, {value, {_, V}}} ->
@ -336,12 +431,46 @@ acl_parse_delete(ACLs, Query) ->
NewACLs = NewACLs =
lists:filter( lists:filter(
fun({acl, Name, Spec} = ACL) -> fun({acl, Name, Spec} = ACL) ->
ID = acl_to_id(ACL), ID = term_to_id(ACL),
not lists:member({"selected", ID}, Query) not lists:member({"selected", ID}, Query)
end, ACLs), end, ACLs),
NewACLs. NewACLs.
access_rules_to_xhtml(AccessRules) ->
?XAE("table", [],
[?XE("tbody",
lists:map(
fun({access, Name, Rules} = Access) ->
SName = atom_to_list(Name),
ID = term_to_id(Access),
?XE("tr",
[?XE("td",
[?XA("input", [{"type", "checkbox"},
{"name", "selected"},
{"value", ID}])]),
?XE("td", [?AC(SName ++ "/", SName)]),
?XC("td", term_to_string(Rules))
]
)
end, AccessRules) ++
[?XE("tr",
[?X("td"),
?XE("td",
[?XA("input", [{"type", "text"},
{"name", "namenew"},
{"value", ""}])]
),
?XE("td",
[?XA("input", [{"type", "submit"},
{"name", "addnew"},
{"value", "Add New"}])])
]
)]
)]).
list_users() -> list_users() ->
Users = ejabberd_auth:dirty_get_registered_users(), Users = ejabberd_auth:dirty_get_registered_users(),