📄 ejabberd_web_admin.erl
字号:
%%%----------------------------------------------------------------------%%% File : ejabberd_web_admin.erl%%% Author : Alexey Shchepin <alexey@sevcom.net>%%% Purpose : Administration web interface%%% Created : 9 Apr 2004 by Alexey Shchepin <alexey@sevcom.net>%%% Id : $Id: ejabberd_web_admin.erl,v 1.13 2004/10/08 20:40:28 aleksey Exp $%%%----------------------------------------------------------------------%%% Copyright (c) 2004 Alexey Shchepin%%% Copyright (c) 2004 Process One%%%-----------------------------------------------------------------------module(ejabberd_web_admin).-author('alexey@sevcom.net').-vsn('$Revision: 1.13 $ ').%% External exports-export([process_admin/1]).-include("ejabberd.hrl").-include("jlib.hrl").-include("ejabberd_http.hrl").-define(X(Name), {xmlelement, Name, [], []}).-define(XA(Name, Attrs), {xmlelement, Name, Attrs, []}).-define(XE(Name, Els), {xmlelement, Name, [], Els}).-define(XAE(Name, Attrs, Els), {xmlelement, Name, Attrs, Els}).-define(C(Text), {xmlcdata, Text}).-define(XC(Name, Text), ?XE(Name, [?C(Text)])).-define(XAC(Name, Attrs, Text), ?XAE(Name, Attrs, [?C(Text)])).-define(T(Text), translate:translate(Lang, Text)).-define(CT(Text), ?C(?T(Text))).-define(XCT(Name, Text), ?XC(Name, ?T(Text))).-define(XACT(Name, Attrs, Text), ?XAC(Name, Attrs, ?T(Text))).-define(LI(Els), ?XE("li", Els)).-define(A(URL, Els), ?XAE("a", [{"href", URL}], Els)).-define(AC(URL, Text), ?A(URL, [?C(Text)])).-define(ACT(URL, Text), ?AC(URL, ?T(Text))).-define(P, ?X("p")).-define(BR, ?X("br")).-define(INPUT(Type, Name, Value), ?XA("input", [{"type", Type}, {"name", Name}, {"value", Value}])).-define(INPUTT(Type, Name, Value), ?INPUT(Type, Name, ?T(Value))).-define(INPUTS(Type, Name, Value, Size), ?XA("input", [{"type", Type}, {"name", Name}, {"value", Value}, {"size", Size}])).-define(INPUTST(Type, Name, Value, Size), ?INPUT(Type, Name, ?T(Value), Size)).make_xhtml(Els, Lang) -> {200, [html], {xmlelement, "html", [{"xmlns", "http://www.w3.org/1999/xhtml"}, {"xml:lang", Lang}, {"lang", Lang}], [{xmlelement, "head", [], [{xmlelement, "meta", [{"http-equiv", "Content-Type"}, {"content", "text/html; charset=utf-8"}], []}, {xmlelement, "link", [{"href", "/admin/style.css"}, {"type", "text/css"}, {"rel", "stylesheet"}], []}]}, ?XE("body", [?XAE("table", [{"id", "main"}], [?XE("tbody", [?XAE("tr", [{"id", "top"}], [?XE("td", [?XE("table", [?XE("tbody", [?XE("tr", [?XE("td", [?XAE("a", [{"href", "/admin/"}], [?XA("img", [{"src", "/admin/logo.png"}, {"width", "343"}, {"height", "55"}, {"alt", "ejabberd"}, {"border", "0"}])])]), ?XAE("td", [{"width", "100%"}, {"background", "/admin/logo-fill.png"}], [?XAE("a", [{"href", "/admin/"}], [?XA("img", [{"src", "/admin/1x1tr.gif"}, {"width", "100%"}, {"height", "55"}, {"alt", ""}, {"border", "0"}])])] )])]) ])])]), ?XAE("tr", [{"id", "middle"}], [?XE("td", [?XAE("table", [{"id", "middle-table"}], [?XE("tbody", [?XE("tr", [?XAE("td", [{"id", "middle-td1"}], [?XAE("ul", [{"id", "navlist"}], [?LI([?ACT("/admin/acls/", "Access Control Lists")]), ?LI([?ACT("/admin/access/", "Access Rules")]), ?LI([?ACT("/admin/users/", "Users")]), ?LI([?ACT("/admin/online-users/", "Online Users")]), ?LI([?ACT("/admin/nodes/", "Nodes")]), ?LI([?ACT("/admin/stats/", "Statistics")]) ])]), ?XAE("td", [{"id", "middle-td2"}], [?XAE("div", [{"id", "content"}], Els)])])]) ])])]), ?XAE("tr", [{"id", "bottom"}], [?XE("td", [?XE("table", [?XE("tbody", [?XE("tr", [?XCT("td", "ejabberd (c) 2002-2004 Alexey Shchepin, 2004 Process One") ])]) ])])])])])]) ]}}.css() -> "body { margin-left: 0; margin-right: 0; margin-top: 0; margin-bottom: 0;}#main { border: none; border-spacing: 0; border-collapse: collapse; background-color: #fe8a00; width: 100%; height: 100%; padding: 0;}#main > tbody > tr > td { padding: 0;}#top > td > table { border: none; border-spacing: 0; border-collapse: collapse; background-color: #fe8a00; width: 100%; padding-top: 2px;}#top table { border: none; border-spacing: 0; border-collapse: collapse; background-color: #fe8a00; width: 100%; padding-top: 2px;}#top td { padding: 0;}#top img { margin-bottom: 0px;}#middle { height: 100%;}#middle-table { border: none; border-spacing: 0; border-collapse: collapse; width: 100%; height: 100%; empty-cells: show;}#middle-td1, #middle-td2 { padding: 0; background-color: #ffffff; vertical-align: top;}#middle-td2 { width: 100%;}#bottom table { border: none; border-spacing: 0; border-collapse: collapse; width: 100%;}#bottom table td { padding: 0; color: #ffffff; background-color: #fe8a00; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 7pt; font-weight: bold; text-align: center;} /*td{ font-size: 3pt; } td.a{ color: #fc8800; background-color: #fe8a00; } td.b{ color: #333333; background-color: #000000; } td.c{ color: #743300; background-color: #723100; } td.d{ color: #fdc58a; background-color: #ffc78c; } td.e{ color: #fde1c7; background-color: #ffe3c9; } td.f{ color: #fdfdfd; background-color: #ffffff; }*/ td.copy{ color: #ffffff; background-color: #fe8a00; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 7pt; font-weight: bold; text-align: center; } #navlist { padding: 0 1px 1px; margin-left: 0; font: bold 10px Verdana, sans-serif; background: #d47911; width: 13em; } #navlist li { list-style: none; margin: 0; text-align: left; display: inline; } #navlist li a { display: block; padding: 0.25em 0.5em 0.25em 0.75em; border-left: 1em solid #ffc78c; border-top: 1px solid gray; background: #ffe3c9; text-decoration: none; } #navlist li a:link { color: #844; } #navlist li a:visited { color: #766; } #navlist li a:hover { border-color: #fc8800; color: #FFF; background: #332; }input { border: 1px solid #d6760e; color: #723202; background-color: #fff2e8; vertical-align: middle; margin-bottom: 0px; padding: 0.1em;}input[type=submit] { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 7pt; font-weight: bold; color: #ffffff; background-color: #fe8a00; border: 1px solid #d6760e;}textarea { border: 1px solid #93a6c7; color: #556655; background-color: #ffffff; vertical-align: middle; margin-top: 7px; margin-left: 7px; margin-right: 7px; margin-bottom: 5px; padding: 0.1em;}select { border: 1px solid #d6760e; color: #723202; background-color: #fff2e8; vertical-align: middle; margin-bottom: 0px; padding: 0.1em;}thead { color: #000000; background-color: #ffffff; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold;}tr.head { color: #ffffff; background-color: #3b547a; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; font-weight: bold; text-align: center;}tr.oddraw { color: #412c75; background-color: #ccd4df; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; font-weight: normal; text-align: center;}tr.evenraw { color: #412c75; background-color: #dbe0e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; font-weight: normal; text-align: center;}td.leftheader { color: #412c75; background-color: #ccccc1; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; font-weight: bold; padding-left: 5px; padding-top: 2px; padding-bottom: 2px; margin-top: 0px; margin-bottom: 0px;}td.leftcontent { color: #000044; background-color: #e6e6df; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 7pt; font-weight: normal; padding-left: 5px; padding-right: 5px; padding-top: 2px; padding-bottom: 2px; margin-top: 0px; margin-bottom: 0px;}td.rightcontent { color: #000044; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: normal; text-align: justify; padding-left: 10px; padding-right: 10px; padding-bottom: 5px;}h1 { color: #000044; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14pt; font-weight: bold; text-align: center; padding-left: 5px; padding-top: 2px; padding-bottom: 2px; margin-top: 0px; margin-bottom: 0px;}h2 { color: #000044; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12pt; font-weight: bold; text-align: center; padding-left: 5px; padding-top: 2px; padding-bottom: 2px; margin-top: 0px; margin-bottom: 0px;}h3 { color: #000044; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; text-align: left; padding-left: 5px; padding-top: 20px; padding-bottom: 2px; margin-top: 0px; margin-bottom: 0px;}#content a:link { color: #444466; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; text-decoration: underlined;}#content a:visited { color: #444466; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; text-decoration: underlined;}#content a:hover { color: #222266; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; text-decoration: underlined;}#content li { list-style-type: dot; font-size: 10pt; /*font-size: 7pt;*/ padding-left: 10px;}#content li.big { font-size: 10pt;}div#content { margin-left: 10px; margin-top: 5px;}*.alignright { text-align: right;}".logo() -> jlib:decode_base64( "iVBORw0KGgoAAAANSUhEUgAAAVcAAAA3CAMAAACPbPnEAAAAYFBMVEX///8CAgJyMgL+vm7Wdg7+igL+/v7+slb+qkb+4sr+ojP+nir+lhr+1qb+khL+wnb+wn7+zpb+jgb+yoz+xo7+tmL+pj7+mib+jg7+5sb+rlL+rkr+mh7+tl7+2q7+umpJ0uikAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfUBAUJBhWzc9qJAAABQ0lEQVR42u2bXU/CQBBFUUZFURAU5Ev4//+S3Ow+tFl3s6adtE3Oebghzc4DJ/Nw04WZgQczexJkz4lXvOKVxKuXV6APTCFXAq94xSte8ermFYbrA6+ilemZRxGz+fxBxMydL0/Vz5anvkUrPfb1IPCKV7ziFa9uXsG/DzyLPz7ndjS3tc3tSbcwPdl9tmYq3dHmk9x3r8mtiM11KfCKV7ziFa9uXmEc7wf+u6+5TtlXf62fKu9rl3wX9ibsLPCKV7ziFa9uXmF87wf67aBT6a+hp4bOehFxU0/CbgKveMUrXvHq5hXG+vuBcpss75zH/VZ5X7vcb4W7q5A/wvbCXoTNhX0JvOIVr3jFq5tX4P8Fw2V6g7UQ9itsLeKmfgi84hWveMWrm1egDwyX6Q3WTtinsI2wq7CjwCte8YpXvLp5BQ/utIiGbwh9RAEAAAAASUVORK5CYII=").logo_fill() -> jlib:decode_base64( "iVBORw0KGgoAAAANSUhEUgAAAAYAAAA3BAMAAADdxCZzAAAAIVBMVEX////Wdg7+igL+khL+jg7+nir+rkr+umr+yoz+1qb+5sYp3v/aAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElNRQfUBAYHDzOol2bZAAAASElEQVR42mMQFBRkUFJSxMAgcWNjQwwMEndxccTAIPHQ0EAMDBJPS0vEwCDx8vJCDAwS7+hoxMAg8ZkzJ2JgkPiqVQsxMFAcABvNNugXg2QkAAAAAElFTkSuQmCC").empty() -> jlib:decode_base64( "R0lGODlhAQABAIAAAP///////yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQBCgABACwAAAAAAQABAAACAkwBADs=").process_admin(#request{user = User, path = [], q = Query, lang = Lang} = Request) -> make_xhtml([?XCT("h1", "ejabberd administration"), ?XE("ul", [?LI([?ACT("acls/", "Access Control Lists"), ?C(" "), ?ACT("acls-raw/", "(raw)")]), ?LI([?ACT("access/", "Access Rules"), ?C(" "), ?ACT("access-raw/", "(raw)")]), ?LI([?ACT("users/", "Users")]), ?LI([?ACT("online-users/", "Online Users")]), ?LI([?ACT("nodes/", "Nodes")]), ?LI([?ACT("stats/", "Statistics")]) ])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -