X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=source%2FMir.java;h=1c0de3e42a469e62d2d253d156211311a2e00f00;hb=cab817b5bb2ff7bd7f18c9a6125715a487ca8cb3;hp=c8bb32d3e3a1c0c87880f594aa0f09b3cbc1a9a0;hpb=0f1d06080db7839f70140e6aead274dcabfe8fc3;p=mir.git diff --git a/source/Mir.java b/source/Mir.java index c8bb32d3..1c0de3e4 100755 --- a/source/Mir.java +++ b/source/Mir.java @@ -8,13 +8,13 @@ import java.sql.*; import freemarker.template.*; -import webdb.misc.*; -import webdb.servlet.*; - +import mir.misc.*; import mir.servlet.*; -import mir.module.*; -import mir.entity.*; -import mir.storage.*; + +import mircoders.servlet.*; +import mircoders.module.*; +import mircoders.entity.*; +import mircoders.storage.*; /** * Mir.java - main servlet, that dispatches to servletmodules @@ -27,184 +27,236 @@ import mir.storage.*; public class Mir extends AbstractServlet { - private static ModuleUsers usersModule=null; - private static ModuleMessage messageModule=null; - private static boolean confed=false; + private static ModuleUsers usersModule=null; + private static ModuleMessage messageModule=null; + private static boolean confed=false; + public HttpSession session; - public void doGet(HttpServletRequest req, HttpServletResponse res) - throws ServletException, IOException { - doPost(req,res); - } + public void doGet(HttpServletRequest req, HttpServletResponse res) + throws ServletException, IOException { + doPost(req,res); + } - public void doPost(HttpServletRequest req, HttpServletResponse res) - throws ServletException, IOException { + public void doPost(HttpServletRequest req, HttpServletResponse res) + throws ServletException, IOException { - long startTime = (new java.util.Date()).getTime(); - Class theServletModule; - ServletModule smod; - long sessionConnectTime=0; - String http=""; + long startTime = (new java.util.Date()).getTime(); + Class theServletModule; + ServletModule smod; + long sessionConnectTime=0; + String http=""; - // get the configration + // get the configration if (!confed){ confed = getConfig(req); } + MirConfig.setServletName(getServletName()); + session = req.getSession(true); - if (req.getServerPort() == 443) http="https"; else http="http"; - res.setContentType("text/html"); - String moduleName = req.getParameter("module"); - HttpSession session = req.getSession(true); + if (req.getServerPort() == 443) http="https"; else http="http"; + res.setContentType("text/html"); + String moduleName = req.getParameter("module"); if(session.getAttribute("Language")==null){ - setLanguage(req,getAcceptLanguage(req)); + setLanguage(session,getAcceptLanguage(req)); } - // Authentifizierung - if (moduleName!=null && moduleName.equals("login")) { - String user=req.getParameter("login"); - String passwd= req.getParameter("password"); + // Authentifizierung + if (moduleName!=null && moduleName.equals("login")) { + String user=req.getParameter("login"); + String passwd= req.getParameter("password"); String lang = req.getParameter("lang"); - theLog.printDebugInfo("--login: evaluating for user: "+user); - EntityUsers userEntity = allowedUser(user,passwd); - if (userEntity==null) { - // login failed: redirecting to login - theLog.printWarning("--login: failed!"); - _sendLoginPage(req,res.getWriter()); - return; - } else { - // login successful + theLog.printDebugInfo("--login: evaluating for user: "+user); + EntityUsers userEntity = allowedUser(user,passwd); + if (userEntity==null) { + // login failed: redirecting to login + theLog.printWarning("--login: failed!"); + _sendLoginPage(res,req,res.getWriter()); + return; + } else { + // login successful //if accept-language!=selected language change language - if(!getLanguage(req).equals(lang)){ - setLanguage(req,lang); + if(!getLanguage(req,session).equals(lang)){ + setLanguage(session,lang); } - theLog.printInfo("--login: successful! setting uid: " + userEntity.getId()); - session.setAttribute("login.uid", userEntity); - theLog.printDebugInfo("--login: trying to retrieve login.target"); - String target = (String)session.getAttribute("login.target"); - if (target != null) { - theLog.printDebugInfo("Redirect: "+target); - res.getWriter().println("going " + target + ""); - } else { - // redirecting to default target - //theLog.printDebugInfo("--login: no target - redirecting to default"); - _sendStartPage(req, res.getWriter(),userEntity); - } - return; - } // if login succesful - } // if login - - if (moduleName!=null && moduleName.equals("logout")) { - theLog.printDebugInfo("--logout"); - session.invalidate(); - _sendLoginPage(req,res.getWriter()); - return; - } - - // Check if authed! - EntityUsers userEntity = (EntityUsers)session.getAttribute("login.uid"); - if (userEntity == null) { - // redirect to loginpage - String redirectString = req.getRequestURI(); - if (req.getQueryString()!=null) redirectString += "?" + req.getQueryString(); - theLog.printDebugInfo("STORING: " + redirectString); - session.setAttribute("login.target", redirectString); - _sendLoginPage(req,res.getWriter()); - return; - } - - // Bei blossem Serveltaufruf redirect auf Standardstarttemplate - if (moduleName == null || moduleName.equals("")) { - _sendStartPage(req, res.getWriter(),userEntity); - return; - } - - //From now on normal Dispatching... - try { - try { + theLog.printInfo("--login: successful! setting uid: " + userEntity.getId()); + session.setAttribute("login.uid", userEntity); + theLog.printDebugInfo("--login: trying to retrieve login.target"); + String target = (String)session.getAttribute("login.target"); + + if (target != null) { + theLog.printDebugInfo("Redirect: "+target); + int serverPort = req.getServerPort(); + String redirect = ""; + String redirectString =""; + + + if(serverPort==80){ + redirect=res.encodeURL(http + "://" + req.getServerName() + target); + redirectString = "going Mir"; + } else { + redirect=res.encodeURL(http + "://" + req.getServerName() + ":" +req.getServerPort() + target); + redirectString = "going Mir"; + } + res.getWriter().println(redirectString); + + + //res.sendRedirect(redirect); + + } else { + // redirecting to default target + theLog.printDebugInfo("--login: no target - redirecting to default"); + _sendStartPage(res,req,res.getWriter(),userEntity); + } + return; + } // if login succesful + } // if login + + if (moduleName!=null && moduleName.equals("logout")) { + theLog.printDebugInfo("--logout"); + session.invalidate(); + _sendLoginPage(res,req,res.getWriter()); + return; + } + + // Check if authed! + EntityUsers userEntity = (EntityUsers)session.getAttribute("login.uid"); + if (userEntity == null) { + // redirect to loginpage + String redirectString = req.getRequestURI(); + String queryString = req.getQueryString(); + if (queryString!=null && !queryString.equals("")) { + redirectString += "?" + req.getQueryString(); + theLog.printDebugInfo("STORING: " + redirectString); + session.setAttribute("login.target", redirectString); + } + _sendLoginPage(res,req,res.getWriter()); + return; + } + + // If no module is specified goto standard startpage + if (moduleName == null || moduleName.equals("")) { + theLog.printDebugInfo("no module: redirect to standardpage"); + _sendStartPage(res,req, res.getWriter(),userEntity); + return; + } + + //From now on regular dispatching... + try { + try { + theServletModule = Class.forName("mircoders.servlet.ServletModule" + moduleName); + } catch (ClassNotFoundException e) { + // searching servletmodule in mir.servlet-classes theServletModule = Class.forName("mir.servlet.ServletModule" + moduleName); - } catch (ClassNotFoundException e) { - // searching Servlet webdb.servlet-classes - theServletModule = Class.forName("webdb.servlet.ServletModule" + moduleName); - } - //Instanciate the ServletModule - Method m = theServletModule.getMethod("getInstance",null); - smod = (ServletModule)m.invoke(null,null); - ServletModuleDispatch.dispatch(smod,req,res); - } - catch (NoSuchMethodException e) { handleError( res.getWriter(), "ServletModule" + moduleName + " getInstance() nicht gefunden."); } - catch (InvocationTargetException e) { handleError( res.getWriter(), "ServletModule" + moduleName + " target nicht gefunden."); } - catch (ClassNotFoundException e) { handleError( res.getWriter(), "ServletModule" + moduleName + " nicht gefunden."); } - catch (IllegalArgumentException e) { handleError( res.getWriter(), "ServletModule" + moduleName + " nicht gefunden."); } - catch (ServletModuleException e){ handleError(res.getWriter(), "ServletException in Module ServletModule" + moduleName + " -- " + e.toString()); } - catch (IllegalAccessException e){ - handleError(res.getWriter(), "Kein Zugriff auf Klasse ServletModule" + moduleName + " -- " + e.toString()); } - - // timing... - sessionConnectTime = new java.util.Date().getTime() - startTime; - theLog.printInfo("EXECTIME (" + moduleName + "): " + sessionConnectTime + " ms"); - } - - private void handleError(PrintWriter out, String errorString) { - try { - theLog.printError(errorString); - SimpleHash modelRoot = new SimpleHash(); - modelRoot.put("errorstring", new SimpleScalar(errorString)); - modelRoot.put("date", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar()))); - HTMLTemplateProcessor.process(Configuration.getProperty("Mir.ErrorTemplate"),modelRoot,out); - out.close(); - } - catch (Exception e) { - System.err.println("Fehler in ErrorTemplate"); - } - } - - /** - * evaluate login for user / password - */ - protected EntityUsers allowedUser(String user, String password) { - try { - if (usersModule == null) usersModule = new ModuleUsers(DatabaseUsers.getInstance()); - return usersModule.getUserForLogin(user, password); - } - catch(Exception e) { theLog.printDebugInfo(e.toString()); return null; } - } - - // Redirect-methods - private void _sendLoginPage(HttpServletRequest req, PrintWriter out) { + } + //Instantiate the ServletModule + Method m = theServletModule.getMethod("getInstance",null); + smod = (ServletModule)m.invoke(null,null); + ServletModuleDispatch.dispatch(smod,req,res); + } + catch (NoSuchMethodException e) { handleError( res,res.getWriter(), "ServletModule" + moduleName + " getInstance() not found."); } + catch (InvocationTargetException e) { handleError( res,res.getWriter(), "ServletModule" + moduleName + " target not found."); } + catch (ClassNotFoundException e) { handleError(res, res.getWriter(), "ServletModule" + moduleName + " not found."); } + catch (IllegalArgumentException e) { handleError( res,res.getWriter(), "ServletModule" + moduleName + " not found."); } + catch (ServletModuleUserException e) { + handleUserError(res,res.getWriter(), e.getMsg()); + } + catch (ServletModuleException e){ handleError(res,res.getWriter(), "ServletException in Module ServletModule" + moduleName + " -- " + e.toString()); } + catch (IllegalAccessException e){ + handleError(res,res.getWriter(), "No access to class ServletModule" + moduleName + " -- " + e.toString()); } + + // timing... + sessionConnectTime = new java.util.Date().getTime() - startTime; + theLog.printInfo("EXECTIME (" + moduleName + "): " + sessionConnectTime + " ms"); + } + + private void handleError(HttpServletResponse res, PrintWriter out, String errorString) { + try { + theLog.printError(errorString); + SimpleHash modelRoot = new SimpleHash(); + modelRoot.put("errorstring", new SimpleScalar(errorString)); + modelRoot.put("date", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar()))); + HTMLTemplateProcessor.process(res,MirConfig.getProp("Mir.ErrorTemplate"),modelRoot,out); + out.close(); + } + catch (Exception e) { + System.err.println("Error in ErrorTemplate"); + } + } + + private void handleUserError(HttpServletResponse res,PrintWriter out, String errorString) { + + try { + theLog.printError(errorString); + SimpleHash modelRoot = new SimpleHash(); + modelRoot.put("errorstring", new SimpleScalar(errorString)); + modelRoot.put("date", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar()))); + HTMLTemplateProcessor.process(res,MirConfig.getProp("Mir.UserErrorTemplate"),modelRoot,out); + out.close(); + } + catch (Exception e) { + System.err.println("Fehler in UserErrorTemplate"); + } + + } + /** + * evaluate login for user / password + */ + protected EntityUsers allowedUser(String user, String password) { + try { + if (usersModule == null) usersModule = new ModuleUsers(DatabaseUsers.getInstance()); + return usersModule.getUserForLogin(user, password); + } catch(Exception e) { + theLog.printDebugInfo(e.toString()); + e.printStackTrace(); + return null; + } + } + + // Redirect-methods + private void _sendLoginPage(HttpServletResponse res,HttpServletRequest req, PrintWriter out) { String loginTemplate = "login.template"; - try { + String sessionUrl=res.encodeURL(""); + //session = req.getSession(true); + try { theLog.printDebugInfo("login: "+lang); - if(lang==null){ - lang=getAcceptLanguage(req); - } - HTMLTemplateProcessor.process(lang+"/"+loginTemplate, new SimpleHash(), out); - } catch(HTMLParseException e) { - handleError( out, "fehler in logintemplate."); - } - } - - private void _sendStartPage(HttpServletRequest req,PrintWriter out, EntityUsers userEntity) { - String startTemplate = "start_admin.template"; - try { - // merge with logged in user and messages - SimpleHash mergeData = new SimpleHash(); - mergeData.put("login_user", HTMLTemplateProcessor.makeSimpleHash(userEntity)); - if (messageModule == null) messageModule = new ModuleMessage(DatabaseMessages.getInstance()); - mergeData.put("messages", HTMLTemplateProcessor.makeSimpleList(messageModule.getByWhereClause(null, "webdb_create desc",0,10))); - HTMLTemplateProcessor.process(getLanguage(req)+"/"+startTemplate, mergeData,out); - } - catch(Exception e) { - handleError( out, "error while trying to send startpage. " + e.toString()); - } - } - - public String getServletInfo(){ return "Mir 1.0 rev02 multilanguage"; } + if(lang==null){ + lang=getAcceptLanguage(req); + } + SimpleHash mergeData = new SimpleHash(); + mergeData.put("session",sessionUrl); + HTMLTemplateProcessor.process(res,lang+"/"+loginTemplate, mergeData, out); + } catch(HTMLParseException e) { + handleError(res, out, "Error in logintemplate."); + } + } + + private void _sendStartPage(HttpServletResponse res, HttpServletRequest req,PrintWriter out, EntityUsers userEntity) { + String startTemplate = "start_admin.template"; + String sessionUrl=res.encodeURL(""); + try { + // merge with logged in user and messages + SimpleHash mergeData = new SimpleHash(); + mergeData.put("session",sessionUrl); + mergeData.put("login_user", userEntity); + if (messageModule == null) messageModule = new ModuleMessage(DatabaseMessages.getInstance()); + mergeData.put("messages", HTMLTemplateProcessor.makeSimpleList(messageModule.getByWhereClause(null, "webdb_create desc",0,10))); + HTMLTemplateProcessor.process(res,getLanguage(req,session)+"/"+startTemplate, mergeData,out); + } + catch(Exception e) { + handleError( res,out, "error while trying to send startpage. " + e.toString()); + } + } + + public String getServletInfo(){ return "Mir 1.0 rev02 multilanguage"; } }