AdminPlugin.java
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:9k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /* CVS ID: $Id: AdminPlugin.java,v 1.3 2000/04/06 08:02:02 wastl Exp $ */
  2. import net.wastl.webmail.config.*;
  3. import net.wastl.webmail.server.*;
  4. import net.wastl.webmail.server.http.*;
  5. import net.wastl.webmail.ui.html.*;
  6. import net.wastl.webmail.ui.xml.*;
  7. import net.wastl.webmail.xml.*;
  8. import java.util.*;
  9. /**
  10.  * AdminPlugin.java
  11.  *
  12.  * Created: Thu Sep  9 16:52:36 1999
  13.  *
  14.  * Copyright (C) 2000 Sebastian Schaffert
  15.  * 
  16.  * This program is free software; you can redistribute it and/or
  17.  * modify it under the terms of the GNU General Public License
  18.  * as published by the Free Software Foundation; either version 2
  19.  * of the License, or (at your option) any later version.
  20.  * 
  21.  * This program is distributed in the hope that it will be useful,
  22.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  23.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  24.  * GNU General Public License for more details.
  25.  * 
  26.  * You should have received a copy of the GNU General Public License
  27.  * along with this program; if not, write to the Free Software
  28.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  29.  */
  30. /**
  31.  *
  32.  *
  33.  *
  34.  * @author Sebastian Schaffert
  35.  * @version
  36.  */
  37. public class AdminPlugin implements Plugin, URLHandler {
  38.     
  39.     public static final String VERSION="1.3";
  40.     public static final String URL="/admin";
  41.     protected Vector sessions;
  42.     WebMailServer parent;
  43.     public AdminPlugin() {
  44. sessions=new Vector();
  45.     }
  46.     public void register(WebMailServer parent) {
  47. parent.getURLHandler().registerHandler(URL,this);
  48. this.parent=parent;
  49.     }
  50.     public String getName() {
  51. return "Administrator";
  52.     }
  53.     public String getDescription() {
  54. return "Change WebMail settings";
  55.     }
  56.     public String getVersion() {
  57. return VERSION;
  58.     }
  59.     public String getURL() {
  60. return URL;
  61.     }
  62.     protected void reqShutdown(int time, boolean reboot) {
  63. new ShutdownThread(time,reboot,parent);
  64.     }
  65.     public HTMLDocument handleURL(String suburl, HTTPSession session, HTTPRequestHeader header) throws WebMailException {
  66. HTMLDocument content=null;
  67. if(session != null) {
  68.     session.setLastAccess();
  69.     session.setEnv();
  70. }
  71. if(session == null && !(suburl.equals("/") || suburl.equals(""))) {
  72.     throw new DocumentNotFoundException("Could not continue as there was no session id submitted");
  73. } else if(suburl.startsWith("/login")) {
  74.     System.err.println("Admin login ... ");
  75.     content=new XHTMLDocument(session.getModel(),
  76.       parent.getStorage().getStylesheet("admin-frame.xsl",
  77. Locale.getDefault(),
  78. "default"));
  79. } else if(suburl.startsWith("/system")) {
  80.     if(suburl.startsWith("/system/set")) {
  81. XMLSystemData sysdata=parent.getStorage().getSystemData();
  82. Enumeration enum=sysdata.getConfigKeys();
  83. while(enum.hasMoreElements()) {
  84.     String ckey=(String)enum.nextElement();
  85.     if(header.isContentSet(ckey)) {
  86. //  System.err.println(ckey+" = "+header.getContent(ckey));
  87. sysdata.setConfig(ckey,header.getContent(ckey));
  88.     }
  89. }
  90. parent.getStorage().save();
  91. session.setEnv();
  92.     }
  93.     content=new XHTMLDocument(session.getModel(),
  94.       parent.getStorage().getStylesheet("admin-system.xsl",
  95. Locale.getDefault(),
  96. "default"));
  97. } else if(suburl.startsWith("/navigation")) {
  98.     content=new XHTMLDocument(session.getModel(),
  99.       parent.getStorage().getStylesheet("admin-navigation.xsl",
  100. Locale.getDefault(),
  101. "default"));
  102. } else if(suburl.startsWith("/control")) {
  103.     if(suburl.startsWith("/control/kill")) {
  104. String sid=header.getContent("kill");
  105. parent.getStorage().log(Storage.LOG_INFO,"Session "+sid+": removing on administrator request.");
  106. HTTPSession sess2=parent.getSession(sid);
  107. if(sess2 != null) {
  108.     parent.removeSession(sess2);
  109. }
  110. session.setEnv();
  111.     }     
  112.     if(header.isContentSet("SHUTDOWN")) {
  113. int time=0;
  114. try {
  115.     time=Integer.parseInt(header.getContent("SHUTDOWN SECONDS"));
  116. } catch(NumberFormatException e) {}
  117. reqShutdown(time,false);
  118.     } else if(header.isContentSet("REBOOT")) {
  119. int time=0;
  120. try {
  121.     time=Integer.parseInt(header.getContent("SHUTDOWN SECONDS"));
  122. } catch(NumberFormatException e) {}
  123. reqShutdown(time,true);
  124.     }
  125.     content=new XHTMLDocument(session.getModel(),
  126.       parent.getStorage().getStylesheet("admin-status.xsl",
  127. Locale.getDefault(),
  128. "default"));
  129. } else if(suburl.startsWith("/domain")) {
  130.     if(suburl.startsWith("/domain/set")) {
  131. //System.err.println(header.toString());
  132. try {
  133.     Enumeration enum=parent.getStorage().getVirtualDomains();
  134.     while(enum.hasMoreElements()) {
  135. String s1=(String)enum.nextElement();
  136. if(header.getContent("CHANGE "+s1) != null && !header.getContent("CHANGE "+s1).equals("")) {
  137.     WebMailVirtualDomain vd=parent.getStorage().getVirtualDomain(s1);
  138.     if(!vd.getDomainName().equals(header.getContent(s1+" DOMAIN"))) {
  139. vd.setDomainName(header.getContent(s1+" DOMAIN"));
  140.     }
  141.     vd.setDefaultServer(header.getContent(s1+" DEFAULT HOST"));
  142.     vd.setAuthenticationHost(header.getContent(s1+" AUTH HOST"));
  143.     vd.setHostsRestricted(header.getContent(s1+" HOST RESTRICTION")!=null);
  144.     vd.setAllowedHosts(header.getContent(s1+" ALLOWED HOSTS"));
  145.     parent.getStorage().setVirtualDomain(s1,vd);
  146. } else if(header.getContent("DELETE "+s1) != null && !header.getContent("DELETE "+s1).equals("")) {
  147.     parent.getStorage().deleteVirtualDomain(s1);
  148. }
  149.     } 
  150.     if(header.getContent("ADD NEW") != null && !header.getContent("ADD NEW").equals("")) {
  151. WebMailVirtualDomain vd=parent.getStorage().createVirtualDomain(header.getContent("NEW DOMAIN"));
  152. vd.setDomainName(header.getContent("NEW DOMAIN"));
  153. vd.setDefaultServer(header.getContent("NEW DEFAULT HOST"));
  154. vd.setAuthenticationHost(header.getContent("NEW AUTH HOST"));
  155. vd.setHostsRestricted(header.getContent("NEW HOST RESTRICTION")!=null);
  156. vd.setAllowedHosts(header.getContent("NEW ALLOWED HOSTS"));
  157. parent.getStorage().setVirtualDomain(header.getContent("NEW DOMAIN"),vd);
  158.     }
  159. } catch(Exception ex) {
  160.     ex.printStackTrace();
  161. }
  162. parent.getStorage().save();
  163. session.setEnv();
  164.     }
  165.     
  166.     content=new XHTMLDocument(session.getModel(),
  167.       parent.getStorage().getStylesheet("admin-domains.xsl",
  168. Locale.getDefault(),
  169. "default"));
  170. } else if(suburl.startsWith("/user")) {
  171.     if(header.isContentSet("domain")) {
  172. ((AdminSession)session).selectDomain(header.getContent("domain"));
  173.     }
  174.     if(suburl.startsWith("/user/edit") && 
  175.        (header.isContentSet("edit") || header.isContentSet("change"))) {
  176. if(header.isContentSet("user")) {
  177.     ((AdminSession)session).selectUser(header.getContent("user"));
  178.     
  179.     if(header.isContentSet("change")) {
  180. ((AdminSession)session).changeUser(header);
  181.     }
  182.     
  183. } else {
  184.     ((AdminSession)session).clearUser();
  185. }
  186. content=new XHTMLDocument(session.getModel(),
  187.   parent.getStorage().getStylesheet("admin-edituser.xsl",
  188.     Locale.getDefault(),
  189.     "default"));
  190.     } else {
  191. if(header.isContentSet("user") && header.isContentSet("delete")) {
  192.     ((AdminSession)session).deleteUser(header.getContent("user"));
  193. }
  194. content=new XHTMLDocument(session.getModel(),
  195.   parent.getStorage().getStylesheet("admin-users.xsl",
  196.     Locale.getDefault(),
  197.     "default"));
  198.     }
  199. } else {     
  200.     if(suburl.startsWith("/logout")) {
  201. session.logout();
  202.     }
  203.     //content=new HTMLDocument("WebMail Administrator Login",parent.getStorage(),"adminlogin",parent.getBasePath());
  204.     XMLGenericModel model = parent.getStorage().createXMLGenericModel();
  205.     if(header.isContentSet("login")) {
  206. model.setStateVar("invalid password","yes");
  207.     }
  208.     content=new XHTMLDocument(model.getRoot(),parent.getStorage().getStylesheet("admin-login.xsl",Locale.getDefault(),"default"));
  209. }
  210. return content;
  211.     }
  212.     
  213.     public String provides() {
  214. return "admin";
  215.     }
  216.     public String requires() {
  217. return "";
  218.     }
  219.     protected class ShutdownThread extends Thread {
  220. protected WebMailServer parent;
  221. protected int time;
  222. protected boolean reboot;
  223. ShutdownThread(int time, boolean restart, WebMailServer parent) {
  224.     this.parent=parent;
  225.     this.time=time;
  226.     this.reboot=restart;
  227.     this.start();
  228. }
  229. public void run() {
  230.     String action=reboot?"reboot":"shutdown";
  231.     if(time >=0) {
  232. System.err.println("n*** WebMail "+action+" in "+time+" seconds! ***n");
  233. parent.getStorage().log(Storage.LOG_CRIT,"*** WebMail "+action+" in "+time+" seconds! ***");
  234. try {
  235.     Thread.sleep(time*1000);
  236. } catch(InterruptedException ex) {}
  237. System.err.println("n*** WebMail "+action+" NOW! ***n");
  238. if(reboot) {
  239.     parent.restart();
  240. } else {
  241.     parent.shutdown();
  242. }
  243.     }
  244. }
  245.     }
  246. } // AdminPlugin