Subversion Repositories general

Rev

Rev 950 | Rev 961 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package ak.hostadmiral.core.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.Globals;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionError;

import ak.backpath.BackPath;

import ak.hostadmiral.core.CoreResources;
import ak.hostadmiral.core.model.User;
import ak.hostadmiral.core.model.UserManager;

public final class LoginAction
        extends Action
{
        public ActionForward execute(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response)
                throws Exception
        {
                DynaActionForm theForm = (DynaActionForm)form;

                User user = UserManager.getInstance().loginUser(
                        (String)theForm.get("login"), (String)theForm.get("password"), request.getRemoteAddr());

                if(user == null) {
                        Thread.sleep(1000); // FIXME: make this delay configurable

                        ActionErrors errors = new ActionErrors();
                        errors.add(ActionMessages.GLOBAL_MESSAGE,
                                new ActionError(CoreResources.LOGIN_FAILED));
                        saveErrors(request, errors);
                        return mapping.getInputForward();
                }
            else {
                request.getSession().setAttribute("user", user);
                request.getSession().setAttribute(Globals.LOCALE_KEY, user.getLocale());

                String origin = BackPath.findBackPath(request).getBackwardUrl();
                if(origin == null || origin.length() <= 0) {
                                return mapping.findForward("default");
                        }
                        else {
                                response.sendRedirect(origin);
                                return null;
                        }
                }
        }
}