/**
TwitStreet - Twitter Stock Market Game
Copyright (C) 2012 Engin Guller (bisanthe@gmail.com), Cagdas Ozek (cagdasozek@gmail.com)
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 3 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, see <http://www.gnu.org/licenses/>.
**/
package com.twitstreet.servlet;
import java.io.IOException;
import java.util.Calendar;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.inject.Inject;
import com.twitstreet.db.data.User;
import com.twitstreet.localization.LocalizationUtil;
import com.twitstreet.main.TwitstreetException;
import com.twitstreet.session.UserMgr;
import com.twitstreet.util.Util;
public class TwitStreetServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 4132204849052813369L;
@Inject
UserMgr userMgr;
public void loadUser(HttpServletRequest request) {
getLanguage(request);
if (request.getAttribute(User.USER) != null) {
return;
}
if (request.getSession().getAttribute(User.USER_ID) == null) {
loadUserFromCookie(request);
} else {
long userId = (Long) request.getSession()
.getAttribute(User.USER_ID);
User user = userMgr.getUserById(userId);
request.setAttribute(User.USER, user);
}
}
protected boolean isMobile(HttpServletRequest request){
return Util.getDevice(request).equalsIgnoreCase(Util.DEVICE_MOBILE);
}
protected boolean dispatchIfMobile(HttpServletRequest request,HttpServletResponse response,String url) throws ServletException, IOException {
if(isMobile(request)){
getServletContext().getRequestDispatcher(url).forward(request, response);
return true;
}
return false;
}
protected int getPage(HttpServletRequest request) {
int page =-1;
try{
page = Integer.valueOf((String) request.getParameter("page"));
}catch(Exception ex){
}
if(page<1){
page = 1;
}
return page;
}
public String getLanguage(HttpServletRequest request) {
String langParam = request.getParameter(LocalizationUtil.LANGUAGE) ;
if (langParam!= null && langParam.length()>0){
request.getSession().setAttribute(LocalizationUtil.LANGUAGE, langParam);
}
String lang = (String) request.getSession().getAttribute(LocalizationUtil.LANGUAGE);
if (lang == null || lang.length() < 1) {
String language = null;
try{
language = request.getHeader("Accept-Language").substring(0,2);
}catch(Exception ex){
}
if(LocalizationUtil.getInstance().checkLanguageIsValid(language)){
request.getSession().setAttribute(LocalizationUtil.LANGUAGE,language);
}
else{
request.getSession().setAttribute(LocalizationUtil.LANGUAGE,LocalizationUtil.DEFAULT_LANGUAGE);
}
}
return (String) request.getSession().getAttribute(LocalizationUtil.LANGUAGE);
}
public void loadUserFromCookie(HttpServletRequest request) {
if (request.getAttribute(User.USER) != null) {
return;
}
Cookie[] cookies = request.getCookies() == null ? new Cookie[] {}
: request.getCookies();
boolean idFound = false;
boolean oAuthFound = false;
String idStr = "";
String oAuth = "";
User user = null;
for (Cookie cookie : cookies) {
if (cookie.getName().equals(CallBackServlet.COOKIE_ID)) {
idStr = cookie.getValue();
idFound = true;
}
if (cookie.getName().equals(CallBackServlet.COOKIE_OAUTHTOKEN)) {
oAuth = cookie.getValue();
oAuthFound = true;
}
if (idFound && oAuthFound) {
try {
long id = Long.parseLong(idStr);
user = userMgr.getUserById(id);
if (user != null && oAuth.equals(user.getOauthToken())) {
request.setAttribute(User.USER, user);
request.getSession().setAttribute(User.USER_ID, user.getId());
userMgr.updateUserLastLoginDate(user.getId(), Calendar.getInstance().getTime());
userMgr.updateAutoPlayerStatus(user.getId(), false);
break;
}
} catch (NumberFormatException nfe) {
// log here someday.
}
break;
}
}
}
public void writeErrorIntoResponse(HttpServletRequest request, HttpServletResponse response, TwitstreetException e) throws IOException{
response.getWriter().print(e.getLocalizedMessage(getLanguage(request)));
response.setStatus(450);
}
}