mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-22 16:20:52 +01: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:
parent
9e3c4edd1d
commit
2f47b7edd9
16
ChangeLog
16
ChangeLog
@ -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>
|
||||||
|
|
||||||
|
@ -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-->
|
||||||
|
@ -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}
|
||||||
|
@ -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);
|
||||||
|
@ -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(),
|
||||||
|
Loading…
Reference in New Issue
Block a user