|
What this is
Other links
The source code
/*
* $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/auth/OnlineUserImpl.java,v 1.32 2005/02/05 23:18:35 gbs Exp $
* $Author: gbs $
* $Revision: 1.32 $
* $Date: 2005/02/05 23:18:35 $
*
* ====================================================================
*
* Copyright (C) 2002-2005 by MyVietnam.net
*
* 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 any later version.
*
* All copyright notices regarding mvnForum MUST remain intact
* in the scripts and in the outputted HTML.
* The "powered by" text/logo with a link back to
* http://www.mvnForum.com and http://www.MyVietnam.net in the
* footer of the pages MUST remain visible when the pages
* are viewed on the internet or intranet.
*
* 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.
*
* Support can be obtained from support forums at:
* http://www.mvnForum.com/mvnforum/index
*
* Correspondence and Marketing Questions can be sent to:
* info@MyVietnam.net
*
* @author: Minh Nguyen minhnn@MyVietnam.net
* @author: Mai Nguyen mai.nh@MyVietnam.net
*/
package com.mvnforum.auth;
import java.awt.image.BufferedImage;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import net.myvietnam.mvncore.exception.*;
import net.myvietnam.mvncore.util.DateUtil;
import net.myvietnam.mvncore.util.ParamUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.mvnforum.*;
import com.mvnforum.common.MVNCaptchaService;
import com.mvnforum.db.*;
import com.octo.captcha.image.ImageCaptcha;
class OnlineUserImpl implements OnlineUser {
private static long CHECK_NEW_MESSAGE_INTERVAL = 5 * DateUtil.MINUTE;// five minutes
private static Log log = LogFactory.getLog(OnlineUserImpl.class);
private int memberID = MVNForumConstant.MEMBER_ID_OF_GUEST;
private String memberName = "";
private int authenticationType = AUTHENTICATION_TYPE_UNAUTHENTICATED;
private MVNForumPermission permission = null;
private OnlineUserAction onlineUserAction = new OnlineUserAction();
private int memberPostsPerPage = 10;
private int memberMessagesPerPage = 10;
private boolean invisible = false;
private int newMessageCount = 0;
private String memberCssPath = null;
private String memberLogoPath = null;
private int hourOffset = 0;
/* private DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
* Igor: previous line should be: new SimpleDateFormat(..., Locale.US)
* Otherwise won't work for users who don't have en/US as default.
*/
private DateFormat timestampFormatter = null;
private DateFormat dateFormatter = null;
private Timestamp lastLogonTimestamp = null;
private Timestamp lastCheckNewMessageTimestamp = null;
private String lastLogonIP = null;
private String localeName = "";
private Locale locale = null;
private boolean gender = true;
private ImageCaptcha imageCaptcha = null;
/**
* Default access constructor, prevent outsite creation
* NOTE: the implementation should init the following:
* - Is Guest or not <br/>
* - Call initRemoteAddr_UserAgent() <br/>
* - The memberCssPath <br/>
* - The memberLogoPath <br/>
*/
OnlineUserImpl(HttpServletRequest request, boolean isGuest) throws DatabaseException {
if (isGuest) {
setMemberID(MVNForumConstant.MEMBER_ID_OF_GUEST);
setMemberName(MVNForumConfig.getDefaultGuestName());
}
getOnlineUserAction().initRemoteAddr_UserAgent(request);
String contextPath = request.getContextPath();
memberCssPath = contextPath + MVNForumGlobal.CSS_FULLPATH;
memberLogoPath = contextPath + MVNForumGlobal.LOGO_FULLPATH;
if (isGuest && MVNForumConfig.getEnableCompany()) {
try {
int companyID = ParamUtil.getParameterInt(request, "companyid");
CompanyBean companyBean = DAOFactory.getCompanyDAO().getCompany(companyID);
// Load the css Path for this user
memberCssPath = MyUtil.getCompanyCssPath(companyBean, request.getContextPath());
// Load the logo Path for this user
memberLogoPath = MyUtil.getCompanyLogoPath(companyBean, request.getContextPath());
} catch (ObjectNotFoundException ex) {
// cannot find the Company in the database, just ignore
} catch (BadInputException ex) {
// cannot find the companyid in the request, just ignore
}
}
}
public int getMemberID() {
return memberID;
}
public String getMemberName() {
return memberName;
}
public boolean isGuest() {
return ( (memberID==0) || (memberID==MVNForumConstant.MEMBER_ID_OF_GUEST) );
}
public boolean isMember() {
return !isGuest();
}
public boolean isInvisibleMember() {
// @todo: temp implementation
return this.invisible;
}
public int getAuthenticationType() {
return authenticationType;
}
public MVNForumPermission getPermission() {
return permission;
}
public void reloadPermission() {
try {
if (isGuest()) {
permission = MVNForumPermissionFactory.getAnonymousPermission();
} else {
permission = MVNForumPermissionFactory.getAuthenticatedPermission(memberID);
}
} catch (Exception ex) {
log.error("Error when reload permission in OnlineUserImpl for memberID = " + memberID , ex);
}
}
public void reloadProfile() {
try {
if (isGuest()) {
// currently just do nothing, implement later
} else {
MemberBean memberBean = DAOFactory.getMemberDAO().getMember_forViewCurrentMember(memberID);
int timeZone = memberBean.getMemberTimeZone();
localeName = memberBean.getMemberLanguage();
int postsPerPage = memberBean.getMemberPostsPerPage();
setTimeZone(timeZone);
setLocaleName(localeName);
setGender(memberBean.getMemberGender() != 0);
setPostsPerPage(postsPerPage);
setInvisible(memberBean.isInvisible());
}
} catch (Exception ex) {
log.error("Error when reload profile in OnlineUserImpl for memberID = " + memberID , ex);
}
}
public boolean updateNewMessageCount(boolean forceUpdate) {
if (isGuest()) return false;
int currentMessageCount = newMessageCount;
Timestamp now = DateUtil.getCurrentGMTTimestamp();
long lastRequest = 0;
if (lastCheckNewMessageTimestamp != null ) {
lastRequest = lastCheckNewMessageTimestamp.getTime();
}
if ((lastCheckNewMessageTimestamp == null) ||
forceUpdate ||
((lastRequest + CHECK_NEW_MESSAGE_INTERVAL) <= now.getTime())) {
try {
lastCheckNewMessageTimestamp = now;
newMessageCount = DAOFactory.getMessageDAO().getNumberOfUnreadNonPublicMessages_inMember_inFolder(memberID, MVNForumConstant.MESSAGE_FOLDER_INBOX);
if (currentMessageCount < newMessageCount) {
return true;
}
} catch (Exception ex) {
log.error("Error when udpate new message count in OnlineUserImpl for memberID = " + memberID , ex);
}
}
return false;
}
public OnlineUserAction getOnlineUserAction() {
return onlineUserAction;
}
public java.util.Date convertGMTDate(java.util.Date gmtDate) {
return DateUtil.convertGMTDate(gmtDate, hourOffset);
}
public Timestamp convertGMTTimestamp(Timestamp gmtTimestamp) {
return DateUtil.convertGMTTimestamp(gmtTimestamp, hourOffset);
}
public String getGMTDateFormat(java.util.Date gmtDate) {
return getGMTDateFormat(gmtDate, true);
}
public String getGMTDateFormat(java.util.Date gmtDate, boolean adjustTimeZone) {
if (gmtDate == null) return "";
java.util.Date date = gmtDate;
if (adjustTimeZone) {
date = DateUtil.convertGMTDate(gmtDate, hourOffset);
}
return dateFormatter.format(date);
}
public String getGMTTimestampFormat(Timestamp gmtTimestamp) {
return getGMTTimestampFormat(gmtTimestamp, true);
}
public String getGMTTimestampFormat(Timestamp gmtTimestamp, boolean adjustTimeZone) {
if (gmtTimestamp == null) return "";
Timestamp timestamp = gmtTimestamp;
if (adjustTimeZone) {
timestamp = DateUtil.convertGMTTimestamp(gmtTimestamp, hourOffset);
}
return timestampFormatter.format(timestamp);
}
public String getLocaleName() {
return localeName;
}
public Locale getLocale() {
return locale;
}
public String getLastLogonIP() {
if (isGuest()) {
return "";
}
return lastLogonIP;
}
public Timestamp getLastLogonTimestamp() {
return lastLogonTimestamp;
}
/*
public boolean getGender() {
return gender;
}
*/
public int getPostsPerPage() {
return memberPostsPerPage;
}
public int getMessagesPerPage() {
return memberMessagesPerPage;
}
public int getNewMessageCount() {
return newMessageCount;
}
public String getCssPath() {
return memberCssPath;
}
public String getLogoPath() {
return memberLogoPath;
}
/**
* Build a new captcha, this method must be called before using some
* action that need captcha validation.
*/
public void buildNewCaptcha() {
destroyCurrentCaptcha();
// this line of code could throw Exception in case the captcha image
// is small to hold the whole captcha
imageCaptcha = MVNCaptchaService.getInstance().getNextImageCaptcha();
}
/**
* Destroy the current captcha, this method must be called after validate
* the captcha
*/
public void destroyCurrentCaptcha() {
imageCaptcha = null;
}
/**
* Get the captcha image to challenge the user
*
* @return BufferedImage the captcha image to challenge the user
*/
public BufferedImage getCurrentCaptchaImage() {
if (imageCaptcha == null) {
return null;
}
return (BufferedImage)(imageCaptcha.getChallenge());
}
/**
* Validate the anwser of the captcha from user
*
* @param anwser String the captcha anwser from user
* @return boolean true if the answer is valid, otherwise return false
*/
public boolean validateCaptchaResponse(String anwser) {
if (imageCaptcha == null) {
return false;
}
anwser = anwser.toUpperCase();//use upper case for easier usage
return (imageCaptcha.validateResponse(anwser)).booleanValue();
}
/**
* Check to make sure that the captcha answer is correct
*
* @param answer String the captcha answer to check
* @throws BadInputException in case the captcha answer is not correct
*/
public void ensureCorrectCaptchaResponse(String answer)
throws BadInputException {
if (validateCaptchaResponse(answer) == false) {
throw new BadInputException(MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.wrong_captcha"));
}
}
/*****************************************************************
* Default-scope methods, only for internal package usage
*****************************************************************/
void setMemberID(int memberID) {
if (memberID == 0) {
this.memberID = MVNForumConstant.MEMBER_ID_OF_GUEST;
} else {
this.memberID = memberID;
}
onlineUserAction.setMemberID(this.memberID);
}
void setMemberName(String memberName) {
this.memberName = memberName;
onlineUserAction.setMemberName(memberName);
}
void setInvisible(boolean invisible) {
this.invisible = invisible;
onlineUserAction.setMemberInvisible(invisible);
}
void setAuthenticationType(int authType) {
authenticationType = authType;
}
/**
* NOTE: this method SHOULD ONLY BE CALLED from OnlineUserFactory
*/
void setPermission(MVNForumPermission permission) {
this.permission = permission;
}
void setTimeZone(int timeZone) {
if ( (timeZone >= -12) && (timeZone <= 12) ) {
this.hourOffset = timeZone;
}
}
void setLocaleName(String localeName) {
this.localeName = localeName;
if (localeName.length() == 0) {
this.localeName = MVNForumConfig.getDefaultLocaleName();
this.locale = MVNForumConfig.getDefaultLocale();
} else {
locale = MyUtil.getLocale(localeName);
}
// now init the 2 class variables
dateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
timestampFormatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, locale);
}
void setLastLogonTimestamp(Timestamp lastLogon) {
lastLogonTimestamp = lastLogon;
}
void setLastLogonIP(String lastLogonIP) {
this.lastLogonIP = lastLogonIP;
}
void setGender(boolean gender) {
this.gender = gender;
}
void setPostsPerPage(int postsPerPage) {
if (postsPerPage < 5) {
postsPerPage = 5;
}
this.memberPostsPerPage = postsPerPage;
}
public void setCssPath(String cssPath) {
this.memberCssPath = cssPath;
}
public void setLogoPath(String logoPath) {
this.memberLogoPath = logoPath;
}
}
|
| ... 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.