|
What this is
Other links
The source code/* CVS ID $Id: XMLUserData.java,v 1.1.1.1 2002/10/02 18:42:55 wastl Exp $ */ package net.wastl.webmail.xml; import net.wastl.webmail.config.*; import net.wastl.webmail.server.*; import net.wastl.webmail.misc.*; import net.wastl.webmail.exceptions.*; import java.util.*; import java.text.*; import org.w3c.dom.*; /** * XMLUserData.java * * Created: Fri Mar 10 16:17:28 2000 * * Copyright (C) 2000 Sebastian Schaffert * * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /** * * * * @author Sebastian Schaffert * @version */ /* 9/25/2000 devink -- modified for challenge/response authentication */ public class XMLUserData implements UserData { protected Document root; protected Element userdata; protected boolean debug; protected long login_time; protected boolean logged_in; public XMLUserData(Document d) { debug=WebMailServer.getDebug(); root=d; userdata=root.getDocumentElement(); if(userdata==null) { System.err.println("UserData was null ???"); userdata=root.createElement("USERDATA"); root.appendChild(userdata); } } public void init(String user, String domain, String password) { setUserName(user); setDomain(domain); setFullName(user); if(domain.equals("")) { // This is a special case when the user already contains the domain // e.g. QMail setEmail(user); } else { setEmail(user+"@"+domain); } try { setPassword(password,password); } catch(InvalidPasswordException ex) {} // Modified by exce, start /** * Set user's locale to WebMailServer's default locale. */ // setPreferredLocale(Locale.getDefault().toString()); setPreferredLocale(WebMailServer.getDefaultLocale().toString()); // Modified by exce, end setTheme(WebMailServer.getDefaultTheme()); setIntVar("first login",System.currentTimeMillis()); setIntVar("last login", System.currentTimeMillis()); setIntVar("login count",0); setIntVar("max show messages",20); setIntVar("icon size",48); setBoolVar("break lines",true); setIntVar("max line length",79); } public Document getRoot() { return root; } public Element getUserData() { return userdata; } public DocumentFragment getDocumentFragment() { DocumentFragment df=root.createDocumentFragment(); df.appendChild(userdata); return df; } protected void ensureElement(String tag, String attribute, String att_value) { NodeList nl=userdata.getElementsByTagName(tag); boolean flag=false; for(int i=0;i<nl.getLength();i++) { Element e=(Element)nl.item(i); if(attribute == null) { // No attribute required flag=true; break; } else if(att_value == null) { if(e.getAttributeNode(attribute) != null) { // Attribute exists, value is not requested flag=true; break; } } else if(e.getAttribute(attribute).equals(att_value)) { flag=true; break; } } if(!flag) { Element elem=root.createElement(tag); if(attribute != null) { elem.setAttribute(attribute,att_value==null?"":att_value); } userdata.appendChild(elem); } } public void login() { // Increase login count and last login pointer //setIntVar("last login",System.currentTimeMillis()); if(!logged_in) { setIntVar("login count",getIntVar("login count")+1); login_time=System.currentTimeMillis(); logged_in=true; } else { System.err.println("Err: Trying to log in a second time for user "+getLogin()); } } public void logout() { if(logged_in) { setIntVar("last login",login_time); // Modified by exce, start logged_in = false; // Modified by exce, end } else { System.err.println("Err: Logging out a user that wasn't logged in."); } } public void addMailHost(String name, String host, String login, String password) { // First, check whether a mailhost with this name already exists. // Delete, if yes. try { //System.err.println("Adding mailhost "+name); if(getMailHost(name) != null) { removeMailHost(name); } Element mailhost=root.createElement("MAILHOST"); mailhost.setAttribute("name",name); mailhost.setAttribute("id",Long.toHexString(Math.abs(name.hashCode()))+Long.toHexString(System.currentTimeMillis())); Element mh_login=root.createElement("MH_LOGIN"); XMLCommon.setElementTextValue(mh_login,login); mailhost.appendChild(mh_login); Element mh_pass=root.createElement("MH_PASSWORD"); XMLCommon.setElementTextValue(mh_pass,Helper.encryptTEA(password)); mailhost.appendChild(mh_pass); Element mh_uri=root.createElement("MH_URI"); XMLCommon.setElementTextValue(mh_uri,host); mailhost.appendChild(mh_uri); userdata.appendChild(mailhost); //System.err.println("Done mailhost "+name); //XMLCommon.writeXML(root,System.err,""); } catch(Exception ex) { ex.printStackTrace(); } } public void removeMailHost(String id) { Element n=XMLCommon.getElementByAttribute(userdata,"MAILHOST","id",id); if(n!=null) { userdata.removeChild(n); } } public MailHostData getMailHost(String id) { final Element mailhost=XMLCommon.getElementByAttribute(userdata,"MAILHOST","id",id); return new MailHostData() { public String getPassword() { return Helper.decryptTEA(XMLCommon.getTagValue(mailhost,"MH_PASSWORD")); } public void setPassword(String s) { XMLCommon.setTagValue(mailhost,"MH_PASSWORD",Helper.encryptTEA(s)); } public String getLogin() { return XMLCommon.getTagValue(mailhost,"MH_LOGIN"); } public String getName() { return mailhost.getAttribute("name"); } public void setLogin(String s) { XMLCommon.setTagValue(mailhost,"MH_LOGIN",s); } public void setName(String s) { mailhost.setAttribute("name",s); } public String getHostURL() { return XMLCommon.getTagValue(mailhost,"MH_URI"); } public void setHostURL(String s) { XMLCommon.setTagValue(mailhost,"MH_URI",s); } public String getID() { return mailhost.getAttribute("id"); } }; } public Enumeration mailHosts() { final NodeList nl=userdata.getElementsByTagName("MAILHOST"); return new Enumeration() { int i=0; public boolean hasMoreElements() { return i<nl.getLength(); } public Object nextElement() { Element e=(Element)nl.item(i++); return e.getAttribute("id"); } }; } public int getMaxShowMessages() { int retval=(int)getIntVarWrapper("max show messages"); return retval==0?20:retval; } public void setMaxShowMessages(int i) { setIntVarWrapper("max show messages",i); } /** * As of WebMail 0.7.0 this is different from the username, because it * consists of the username and the domain. * @see getUserName() */ public String getLogin() { return getUserName()+"@"+getDomain(); } public String getFullName() { return XMLCommon.getTagValue(userdata,"FULL_NAME"); } public void setFullName(String s) { XMLCommon.setTagValue(userdata,"FULL_NAME",s); } public String getSignature() { return XMLCommon.getTagValue(userdata,"SIGNATURE"); } public void setSignature(String s) { XMLCommon.setTagValue(userdata,"SIGNATURE",s,true); } public String getEmail() { return XMLCommon.getTagValue(userdata,"EMAIL"); } public void setEmail(String s) { XMLCommon.setTagValue(userdata,"EMAIL",s); } public Locale getPreferredLocale() { String loc=XMLCommon.getTagValue(userdata,"LOCALE"); StringTokenizer t=new StringTokenizer(loc,"_"); String language=t.nextToken().toLowerCase(); String country=""; if(t.hasMoreTokens()) { country=t.nextToken().toUpperCase(); } return new Locale(language,country); } public void setPreferredLocale(String newloc) { XMLCommon.setTagValue(userdata,"LOCALE",newloc); } public String getTheme() { String retval=XMLCommon.getTagValue(userdata,"THEME"); if(retval.equals("")) { return WebMailServer.getDefaultTheme(); } else { return retval; } } public void setTheme(String theme) { XMLCommon.setTagValue(userdata,"THEME",theme); } private String formatDate(long date) { TimeZone tz=TimeZone.getDefault(); DateFormat df=DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.DEFAULT, getPreferredLocale()); df.setTimeZone(tz); String now=df.format(new Date(date)); return now; } public String getFirstLogin() { long date=getIntVarWrapper("first login"); return formatDate(date); } public String getLastLogin() { long date=getIntVarWrapper("last login"); return formatDate(date); } public String getLoginCount() { return getIntVarWrapper("login count")+""; } public boolean checkPassword(String s) { String password=XMLCommon.getTagValue(userdata,"PASSWORD"); if(password.startsWith(">")) { password=password.substring(1); } return password.equals(Helper.crypt(password,s)); } public void setPassword(String newpasswd, String verify) throws InvalidPasswordException { if(newpasswd.equals(verify)) { Random r=new Random(); // Generate the crypted password; avoid problems with XML parsing String crypted=">"; while(crypted.lastIndexOf(">") >= 0 || crypted.lastIndexOf("<") >= 0) { // This has to be some integer between 46 and 127 for the Helper // class String seed=(char)(r.nextInt(80)+46) + "" + (char)(r.nextInt(80)+46); System.err.println("Seed: "+seed); crypted=Helper.crypt(seed,newpasswd); } XMLCommon.setTagValue(userdata,"PASSWORD",crypted); } else { throw new InvalidPasswordException("The passwords did not match!"); } } public void setPasswordData(String data) { XMLCommon.setTagValue(userdata, "PASSDATA", data); } public String getPasswordData() { return XMLCommon.getTagValue(userdata, "PASSDATA"); } public int getMaxLineLength() { int retval=(int)getIntVarWrapper("max line length"); return retval==0?79:retval; } public void setMaxLineLength(int i) { setIntVarWrapper("max line length",i); } public boolean wantsBreakLines() { return getBoolVarWrapper("break lines"); } public void setBreakLines(boolean b) { setBoolVarWrapper("break lines",b); } public boolean wantsShowImages() { return getBoolVarWrapper("show images"); } public void setShowImages(boolean b) { setBoolVarWrapper("show images",b); } public boolean wantsShowFancy() { return getBoolVarWrapper("show fancy"); } public void setShowFancy(boolean b) { setBoolVarWrapper("show fancy",b); } public boolean wantsSetFlags() { return getBoolVarWrapper("set message flags"); } public void setSetFlags(boolean b) { setBoolVarWrapper("set message flags",b); } public void setSaveSent(boolean b) { setBoolVarWrapper("save sent messages",b); } public boolean wantsSaveSent() { return getBoolVarWrapper("save sent messages"); } public String getSentFolder() { return XMLCommon.getTagValue(userdata,"SENT_FOLDER"); } public void setSentFolder(String s) { XMLCommon.setTagValue(userdata,"SENT_FOLDER",s); } public String getDomain() { return XMLCommon.getTagValue(userdata,"USER_DOMAIN"); } public void setDomain(String s) { XMLCommon.setTagValue(userdata,"USER_DOMAIN",s); } /** * Return the username without the domain (in contrast to getLogin()). * @see getLogin() */ public String getUserName() { return XMLCommon.getTagValue(userdata,"LOGIN"); } public void setUserName(String s) { XMLCommon.setTagValue(userdata,"LOGIN",s); } public void setIntVar(String var, long value) { setIntVarWrapper(var,value); } public long getIntVar(String var) { return getIntVarWrapper(var); } public void setBoolVar(String var, boolean value) { setBoolVarWrapper(var,value); } public boolean getBoolVar(String var) { return getBoolVarWrapper(var); } /** * Wrapper method for setting all bool vars */ protected void setIntVarWrapper(String var, long value) { ensureElement("INTVAR","name",var); Element e=XMLCommon.getElementByAttribute(userdata,"INTVAR","name",var); e.setAttribute("value",value+""); if(debug) System.err.println("XMLUserData ("+getUserName()+"@"+getDomain()+"): Setting '"+var+"' to '"+value+"'"); } protected long getIntVarWrapper(String var) { ensureElement("INTVAR","name",var); Element e=XMLCommon.getElementByAttribute(userdata,"INTVAR","name",var); long r=0; try { r=Long.parseLong(e.getAttribute("value")); } catch(NumberFormatException ex) { System.err.println("Warning: Not a valid number in '"+var+"' for user "+ getUserName()+"@"+getDomain()); } return r; } /** * Wrapper method for setting all bool vars */ protected void setBoolVarWrapper(String var, boolean value) { ensureElement("BOOLVAR","name",var); Element e=XMLCommon.getElementByAttribute(userdata,"BOOLVAR","name",var); e.setAttribute("value",value?"yes":"no"); if(debug) System.err.println("XMLUserData ("+getUserName()+"@"+getDomain()+"): Setting '"+var+"' to '"+value+"'"); } protected boolean getBoolVarWrapper(String var) { ensureElement("BOOLVAR","name",var); Element e=XMLCommon.getElementByAttribute(userdata,"BOOLVAR","name",var); return (e.getAttribute("value").toUpperCase().equals("YES") || e.getAttribute("value").toUpperCase().equals("TRUE")); } /** * Set all boolvars to "false". * */ public void resetBoolVars() { NodeList nl=root.getElementsByTagName("BOOLVAR"); for(int i=0;i<nl.getLength();i++) { Element elem=(Element)nl.item(i); elem.setAttribute("value","no"); } } } // XMLUserData |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.