📄 context.java
字号:
/*
* @(#)Context.java
*
* Copyright (C) 2005 Sergey Bredikhin
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
* This program is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
* USA.
*/
package olivax.webmail;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Constructor;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.Vector;
import java.util.regex.Pattern;
import javax.activation.DataHandler;
import javax.mail.internet.MimeBodyPart;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspWriter;
import oliva.common.OlivaUtils;
import oliva.mail.Coder;
import oliva.mail.MailBean;
import oliva.mail.MessageHeader;
import oliva.mail.NewMessage;
import oliva.ssl.SSLUtils;
public class Context {
public Context() {
super();
}
public MailBean mailBean = new MailBean();
public static final String xMailer = "OlivaMail/Webmail 1.5.4"; //$NON-NLS-1$
// This codepage is used for html pages, produced by servlets' output. Hence the name "Client Codepage"
public static final String clntCp = "UTF-8";
// This codepage is used to read from string resource files
public static final String resCp = "UTF-8";
private static final String imgPattern = "<\\s*[iI][mM][gG]\\s+";
public oliva.mail.Message currentMessage = null;
public int currentMsgNo = -1;
public String currentMsgUID = null;
public String currentCp = null;
public Storage storage = null;
public Properties cpProps = new Properties();
public Properties langProps = new Properties();
public Properties strings = new Properties();
private boolean settingsLoaded = false;
private boolean loggedIn = false;
private boolean adminLoggedIn = false;
public String lang = "";
public boolean _admin_enabled = false;
public boolean _hints_enabled = false;
public boolean _delayed_message = false;
public boolean _storage_enabled = false;
private oliva.mail.NewMessage delayedMsg = null;
private PdaPane pdaLogo = null;
private WebPane webLogo = null;
private void cleanState() {
currentMessage = null;
currentMsgNo = -1;
currentMsgUID = null;
currentCp = null;
}
public synchronized void getBinaryPart(int msgno, String msguid,
int partno, JspWriter out)
throws Exception {
oliva.mail.Message msg = getMessage(msgno, msguid, null);
mailBean.openFolder(true);
msg.getBinaryPart(partno, out);
mailBean.closeFolder();
}
public synchronized void getBinaryPart(int msgno, String msguid,
int partno, PrintWriter out)
throws Exception {
oliva.mail.Message msg = getMessage(msgno, msguid, null);
mailBean.openFolder(true);
msg.getBinaryPart(partno, out);
mailBean.closeFolder();
}
public synchronized oliva.mail.Message getMessage(int msgno, String msguid,
String cp) throws Exception {
boolean identical = true;
if (currentMsgNo != msgno
|| !OlivaUtils.nvl(currentMsgUID).equals(OlivaUtils.nvl(msguid))) {
identical = false;
}
if (!OlivaUtils.nvl(cp).equalsIgnoreCase(OlivaUtils.nvl(currentCp)))
identical = false;
if (identical)
return currentMessage;
else
return getMessageNoCache(msgno, msguid, cp);
}
public synchronized oliva.mail.Message getMessageNoCache(int msgno,
String msguid, String cp)
throws Exception {
cleanState();
currentMessage = mailBean.getMessageFromList(msgno, msguid, cp);
if (currentMessage != null) {
currentMsgNo = msgno;
currentMsgUID = msguid;
currentCp = cp;
}
return currentMessage;
}
public synchronized void prepareStorage(String className, String url,
String schema, String user, String pass) throws Exception {
if (storage != null)
return;
Class storageClass = Class.forName(className);
Constructor ct = storageClass.getConstructor(null);
storage = (olivax.webmail.Storage) ct.newInstance(null);
storage.setDatabaseUrl(url); //$NON-NLS-1$
storage.setSchema(schema); //$NON-NLS-1$
storage.setCredentials(user, pass);
}
public synchronized void closeStorage() {
if (!_storage_enabled)
return;
if (storage == null)
return;
try {
storage.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public String getSenderDomain() {
return getI18nString("_settings.sender_domain");
}
public String getI18nString(String str) {
// return OlivaUtils.nvl(strings.getProperty(str));
String result = '!' + str + '!';
str = strings.getProperty(str);
if(str != null)
result = str;
return result;
}
public synchronized void loadSettings(ServletRequest request) throws Exception {
if (settingsLoaded)
return;
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle(
"settings", java.util.Locale.US);
for (java.util.Enumeration e = bundle.getKeys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
String value = oliva.common.OlivaUtils.getStringInternals(bundle
.getString(key), resCp);
strings.setProperty(key, value);
}
_hints_enabled = OlivaUtils.parseBoolean(getI18nString("_settings.hints_enabled"),
true);
_delayed_message = OlivaUtils.parseBoolean(
getI18nString("_settings.delayed_message"), true);
_admin_enabled = OlivaUtils.parseBoolean(getI18nString("_settings.admin_enabled"),
false);
_storage_enabled = OlivaUtils.parseBoolean(
getI18nString("_settings.storage_enabled"), false);
//clntCp = getI18nString("_settings.clientCodePage");
mailBean.setXMailer(xMailer);
mailBean.setSendCodePage(getI18nString("_settings.sendCodePage"));
mailBean.setDefaultCodePage(getI18nString("_settings.defaultCodePage"));
mailBean.setHost(getI18nString("_settings.server_type"),
getI18nString("_settings.incoming_server"),
Integer.parseInt(getI18nString("_settings.incoming_port")));
mailBean.setUsePOP3UID(OlivaUtils.parseBoolean(
getI18nString("_settings.native_pop3_msguid"),
false));
mailBean.setPageSize(Integer
.parseInt(getI18nString("_settings.page_size")));
mailBean.setSmtpHost(getI18nString("_settings.outgoing_server"),
Integer.parseInt(getI18nString("_settings.outgoing_port")));
mailBean.setSentFolder(getI18nString("_settings.sent_folder"));
mailBean.setSortEnabled(OlivaUtils.parseBoolean(
getI18nString("_settings.sort_enabled"), false));
mailBean.setLimitToSort(Integer
.parseInt(getI18nString("_settings.sort_limit")));
mailBean.setSizeLimit(Integer
.parseInt(getI18nString("_settings.msg_size_limit")));
if (getI18nString("_settings.smtp_auth").equalsIgnoreCase("true")) {
mailBean.setSmtpAuth(true);
} else {
mailBean.setSmtpAuth(false);
}
// SSL
if (OlivaUtils.parseBoolean(getI18nString("_settings.incoming_ssl"),
false)) {
SSLUtils.setSSL(getI18nString("_settings.server_type"), Integer
.parseInt(getI18nString("_settings.incoming_port")), true);
}
if (OlivaUtils.parseBoolean(getI18nString("_settings.outgoing_ssl"),
false)) {
SSLUtils.setSSL("smtp", Integer
.parseInt(getI18nString("_settings.outgoing_port")), true);
}
if (_storage_enabled) {
prepareStorage(getI18nString("_settings.storage_class"),
getI18nString("_settings.storage_connect_str"),
getI18nString("_settings.storage_schema"),
getI18nString("_settings.storage_user"),
getI18nString("_settings.storage_password"));
}
bundle = java.util.ResourceBundle.getBundle("languages",
java.util.Locale.US);
for (java.util.Enumeration e = bundle.getKeys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
String value = oliva.common.OlivaUtils.getStringInternals(bundle
.getString(key), resCp);
langProps.setProperty(key, value);
}
bundle = java.util.ResourceBundle.getBundle("codepages",
java.util.Locale.US);
for (java.util.Enumeration e = bundle.getKeys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
String value = oliva.common.OlivaUtils.getStringInternals(bundle
.getString(key), resCp);
cpProps.setProperty(key, value);
}
settingsLoaded = true;
}
public synchronized boolean isLogonNeeded(ServletRequest request) throws Exception {
String action = request.getParameter("action");
if (OlivaUtils.nvl(action).equalsIgnoreCase("logout")) {
loggedIn = false;
}
if (!loggedIn) {
String user = request.getParameter("user");
String pass = request.getParameter("pass");
if (!OlivaUtils.nvl(user).equals("") && !OlivaUtils.nvl(pass).equals("")) {
mailBean.setCredentials(user, pass);
mailBean.setFolderName("INBOX");
if (mailBean.logon() == 0) {
mailBean.setSenderAddress(user
+ getI18nString("_settings.sender_domain"));
mailBean.setSmtpCredentials(user, pass);
mailBean.setRichContent(OlivaUtils.parseBoolean(
getI18nString("_settings.rich_content"), true));
if (_storage_enabled) {
storage.setCredentials(
getI18nString("_settings.storage_user"),
getI18nString("_settings.storage_password"));
storage.setAppUser(mailBean.getMyAddress(),
OlivaUtils.parseBoolean(getI18nString(
"_settings.storage_autouser")
.toLowerCase(), false));
}
loggedIn = true;
}
}
}
return !loggedIn;
}
public synchronized boolean isPcBrowser(ServletRequest request) {
String userAgent = ((HttpServletRequest) request)
.getHeader("User-Agent");
if (userAgent == null)
return false;
userAgent = userAgent.toUpperCase();
boolean mozilla = (userAgent.indexOf("MOZILLA") != -1);
boolean msie = (userAgent.indexOf("MSIE") != -1);
boolean windowsNt = (userAgent.indexOf("WINDOWS NT") != -1);
if ((mozilla || msie) && windowsNt)
return true;
boolean netscape = (userAgent.indexOf("NETSCAPE") != -1);
boolean opera = (userAgent.indexOf("OPERA") != -1);
boolean operaMini = (userAgent.indexOf("OPERA MINI") != -1);
boolean windowsCe = (userAgent.indexOf("WINDOWS CE") != -1);
boolean palm = (userAgent.indexOf("PALM") != -1);
boolean j2me = (userAgent.indexOf("MIDP") != -1 || userAgent
.indexOf("CLDC") != -1);
if ((mozilla || netscape || opera) &&
!(windowsCe || palm ||j2me || operaMini))
return true;
return false;
}
public synchronized void setLanguage(ServletRequest request) throws Exception {
String oldLang = lang;
if (lang.equals("")) {
String accLang = ((HttpServletRequest) request)
.getHeader("Accept-Language");
// ru,ar-iq;q=0.8,zh-cn;q=0.5,en-gb;q=0.3
if (accLang != null) {
int idx = accLang.indexOf(",");
if (idx != -1)
accLang = accLang.substring(0, idx);
idx = accLang.indexOf("-");
if (idx != -1)
accLang = accLang.substring(0, idx);
accLang = accLang.trim().toLowerCase();
if (langProps.getProperty(accLang) != null)
lang = accLang;
}
if (lang.equals(""))
lang = "en";
}
String parLang = request.getParameter("lang");
if (parLang != null) {
parLang = parLang.trim().toLowerCase();
if (langProps.getProperty(parLang) != null)
lang = parLang;
}
if (!lang.equals(oldLang)) {
Locale locale = new Locale(lang, "");
ResourceBundle bundle = ResourceBundle.getBundle("strings", locale);
for (java.util.Enumeration e = bundle.getKeys(); e
.hasMoreElements();) {
String key = (String) e.nextElement();
String value = oliva.common.OlivaUtils.getStringInternals(bundle
.getString(key), resCp);
strings.setProperty(key, value);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -