Search in sources :

Example 1 with GateKeeper

use of teammates.logic.api.GateKeeper in project teammates by TEAMMATES.

the class ControllerServlet method doPost.

@Override
// used as fallback
@SuppressWarnings("PMD.AvoidCatchingThrowable")
public final void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    UserType userType = new GateKeeper().getCurrentUser();
    String url = HttpRequestHelper.getRequestedUrl(req);
    Map<String, String[]> params = HttpRequestHelper.getParameterMap(req);
    try {
        /* We are using the Template Method Design Pattern here.
             * This method contains the high level logic of the request processing.
             * Concrete details of the processing steps are to be implemented by child
             * classes, based on request-specific needs.
             */
        long startTime = System.currentTimeMillis();
        log.info("Request received : [" + req.getMethod() + "] " + req.getRequestURL().toString() + ":" + HttpRequestHelper.printRequestParameters(req));
        log.info("User agent : " + req.getHeader("User-Agent"));
        Action c = new ActionFactory().getAction(req);
        if (c.isValidUser()) {
            ActionResult actionResult = c.executeAndPostProcess();
            actionResult.writeSessionTokenToCookieIfRequired(req, resp);
            actionResult.send(req, resp);
        } else {
            resp.sendRedirect(c.getAuthenticationRedirectUrl());
        }
        long timeTaken = System.currentTimeMillis() - startTime;
        // This is the log message that is used to generate the 'activity log' for the admin.
        log.info(c.getLogMessage() + "|||" + timeTaken);
    } catch (PageNotFoundException e) {
        log.warning(new LogMessageGenerator().generateActionFailureLogMessage(url, params, e, userType));
        cleanUpStatusMessageInSession(req);
        resp.sendRedirect(appendParamsToErrorPageUrl(Const.ViewURIs.ACTION_NOT_FOUND_PAGE, params, url));
    } catch (EntityNotFoundException e) {
        log.warning(new LogMessageGenerator().generateActionFailureLogMessage(url, params, e, userType));
        cleanUpStatusMessageInSession(req);
        resp.sendRedirect(appendParamsToErrorPageUrl(Const.ViewURIs.ENTITY_NOT_FOUND_PAGE, params, url));
    } catch (FeedbackSessionNotVisibleException e) {
        log.warning(new LogMessageGenerator().generateActionFailureLogMessage(url, params, e, userType));
        cleanUpStatusMessageInSession(req);
        req.getSession().setAttribute(Const.ParamsNames.FEEDBACK_SESSION_NOT_VISIBLE, e.getStartTimeString());
        resp.sendRedirect(appendParamsToErrorPageUrl(Const.ViewURIs.FEEDBACK_SESSION_NOT_VISIBLE, params, url));
    } catch (InvalidOriginException e) {
        log.warning(new LogMessageGenerator().generateActionFailureLogMessage(url, params, e, userType));
        cleanUpStatusMessageInSession(req);
        resp.sendRedirect(appendParamsToErrorPageUrl(Const.ViewURIs.INVALID_ORIGIN, params, url));
    } catch (UnauthorizedAccessException e) {
        log.warning(new LogMessageGenerator().generateActionFailureLogMessage(url, params, e, userType));
        cleanUpStatusMessageInSession(req);
        resp.sendRedirect(appendParamsToErrorPageUrl(Const.ViewURIs.UNAUTHORIZED, params, url));
    } catch (DeadlineExceededException | DatastoreTimeoutException e) {
        /*This exception may not be caught because GAE kills
              the request soon after throwing it. In that case, the error
              message in the log will be emailed to the admin by a separate
              cron job.*/
        cleanUpStatusMessageInSession(req);
        log.severe("Deadline exceeded exception caught by ControllerServlet : " + TeammatesException.toStringWithStackTrace(e));
        resp.sendRedirect(appendParamsToErrorPageUrl(Const.ViewURIs.DEADLINE_EXCEEDED_ERROR_PAGE, params, url));
    } catch (InvalidPostParametersException e) {
        String requestUrl = req.getRequestURL().toString();
        log.info(e.getMessage());
        cleanUpStatusMessageInSession(req);
        List<StatusMessage> statusMessagesToUser = new ArrayList<>();
        statusMessagesToUser.add(new StatusMessage(Const.StatusMessages.NULL_POST_PARAMETER_MESSAGE, StatusMessageColor.WARNING));
        req.getSession().setAttribute(Const.ParamsNames.STATUS_MESSAGES_LIST, statusMessagesToUser);
        if (requestUrl.contains("/instructor")) {
            resp.sendRedirect(Const.ActionURIs.INSTRUCTOR_HOME_PAGE);
        } else if (requestUrl.contains("/student")) {
            resp.sendRedirect(Const.ActionURIs.STUDENT_HOME_PAGE);
        } else if (requestUrl.contains("/admin")) {
            resp.sendRedirect(Const.ActionURIs.ADMIN_HOME_PAGE);
        } else {
            cleanUpStatusMessageInSession(req);
            resp.sendRedirect(appendParamsToErrorPageUrl(Const.ViewURIs.ERROR_PAGE, params, url));
        }
    } catch (Throwable t) {
        /* Log only stack trace to prevent delay in termination of request
             * which can result in GAE shutting down the instance.
             * Note that severe logs are sent by email automatically in the cron job auto/compileLogs.
             */
        log.severe("Unexpected exception caught by ControllerServlet : " + TeammatesException.toStringWithStackTrace(t));
        cleanUpStatusMessageInSession(req);
        resp.sendRedirect(appendParamsToErrorPageUrl(Const.ViewURIs.ERROR_PAGE, params, url));
    }
}
Also used : InvalidPostParametersException(teammates.common.exception.InvalidPostParametersException) LogMessageGenerator(teammates.common.util.LogMessageGenerator) DeadlineExceededException(com.google.apphosting.api.DeadlineExceededException) EntityNotFoundException(teammates.common.exception.EntityNotFoundException) DatastoreTimeoutException(com.google.appengine.api.datastore.DatastoreTimeoutException) StatusMessage(teammates.common.util.StatusMessage) PageNotFoundException(teammates.common.exception.PageNotFoundException) FeedbackSessionNotVisibleException(teammates.common.exception.FeedbackSessionNotVisibleException) InvalidOriginException(teammates.common.exception.InvalidOriginException) UnauthorizedAccessException(teammates.common.exception.UnauthorizedAccessException) GateKeeper(teammates.logic.api.GateKeeper) ArrayList(java.util.ArrayList) List(java.util.List) UserType(teammates.common.datatransfer.UserType)

Example 2 with GateKeeper

use of teammates.logic.api.GateKeeper in project teammates by TEAMMATES.

the class LoginServlet method doPost.

@Override
public final void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    GateKeeper gateKeeper = new GateKeeper();
    UserType user = gateKeeper.getCurrentUser();
    boolean isInstructor = req.getParameter(Const.ParamsNames.LOGIN_INSTRUCTOR) != null;
    boolean isStudent = req.getParameter(Const.ParamsNames.LOGIN_STUDENT) != null;
    boolean isAdmin = req.getParameter(Const.ParamsNames.LOGIN_ADMIN) != null;
    if (isInstructor) {
        if (isMasqueradeMode(user)) {
            resp.sendRedirect(Const.ActionURIs.INSTRUCTOR_HOME_PAGE);
        } else {
            resp.sendRedirect(gateKeeper.getLoginUrl(Const.ActionURIs.INSTRUCTOR_HOME_PAGE));
        }
    } else if (isStudent) {
        if (isMasqueradeMode(user)) {
            resp.sendRedirect(Const.ActionURIs.STUDENT_HOME_PAGE);
        } else {
            resp.sendRedirect(gateKeeper.getLoginUrl(Const.ActionURIs.STUDENT_HOME_PAGE));
        }
    } else if (isAdmin) {
        // TODO: do we need this branch?
        if (isMasqueradeMode(user)) {
            resp.sendRedirect(Const.ActionURIs.ADMIN_HOME_PAGE);
        } else {
            resp.sendRedirect(gateKeeper.getLoginUrl(Const.ActionURIs.ADMIN_HOME_PAGE));
        }
    } else {
        resp.sendRedirect(Const.ViewURIs.ERROR_PAGE);
    }
}
Also used : GateKeeper(teammates.logic.api.GateKeeper) UserType(teammates.common.datatransfer.UserType)

Example 3 with GateKeeper

use of teammates.logic.api.GateKeeper in project teammates by TEAMMATES.

the class GaeSimulation method loginAsStudent.

/**
 * Logs in the user to the GAE simulation environment as a student
 * (without admin rights or instructor rights).
 */
public void loginAsStudent(String userId) {
    loginUser(userId);
    GateKeeper gateKeeper = new GateKeeper();
    assertTrue(gateKeeper.getCurrentUser().isStudent);
    assertFalse(gateKeeper.getCurrentUser().isInstructor);
    assertFalse(gateKeeper.getCurrentUser().isAdmin);
}
Also used : GateKeeper(teammates.logic.api.GateKeeper)

Example 4 with GateKeeper

use of teammates.logic.api.GateKeeper in project teammates by TEAMMATES.

the class GaeSimulation method loginAsInstructor.

/**
 * Logs in the user to the GAE simulation environment as an instructor
 * (without admin rights).
 */
public void loginAsInstructor(String userId) {
    loginUser(userId);
    GateKeeper gateKeeper = new GateKeeper();
    assertTrue(gateKeeper.getCurrentUser().isInstructor);
    assertFalse(gateKeeper.getCurrentUser().isAdmin);
}
Also used : GateKeeper(teammates.logic.api.GateKeeper)

Example 5 with GateKeeper

use of teammates.logic.api.GateKeeper in project teammates by TEAMMATES.

the class Action method initialiseAttributes.

@SuppressWarnings("unchecked")
protected void initialiseAttributes(HttpServletRequest req) {
    request = req;
    requestUrl = HttpRequestHelper.getRequestedUrl(request);
    logic = new Logic();
    gateKeeper = new GateKeeper();
    setTaskQueuer(new TaskQueuer());
    setEmailSender(new EmailSender());
    requestParameters = request.getParameterMap();
    session = request.getSession();
    sessionToken = CryptoHelper.computeSessionToken(session.getId());
    parseAndInitializeRegkeyFromRequest();
    // Set error status forwarded from the previous action
    isError = getRequestParamAsBoolean(Const.ParamsNames.ERROR);
}
Also used : TaskQueuer(teammates.logic.api.TaskQueuer) GateKeeper(teammates.logic.api.GateKeeper) EmailSender(teammates.logic.api.EmailSender) Logic(teammates.logic.api.Logic)

Aggregations

GateKeeper (teammates.logic.api.GateKeeper)7 UserType (teammates.common.datatransfer.UserType)3 IOException (java.io.IOException)2 LogMessageGenerator (teammates.common.util.LogMessageGenerator)2 BlobKey (com.google.appengine.api.blobstore.BlobKey)1 BlobstoreService (com.google.appengine.api.blobstore.BlobstoreService)1 DatastoreTimeoutException (com.google.appengine.api.datastore.DatastoreTimeoutException)1 DeadlineExceededException (com.google.apphosting.api.DeadlineExceededException)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Map (java.util.Map)1 EntityNotFoundException (teammates.common.exception.EntityNotFoundException)1 FeedbackSessionNotVisibleException (teammates.common.exception.FeedbackSessionNotVisibleException)1 InvalidOriginException (teammates.common.exception.InvalidOriginException)1 InvalidPostParametersException (teammates.common.exception.InvalidPostParametersException)1 PageNotFoundException (teammates.common.exception.PageNotFoundException)1 TeammatesException (teammates.common.exception.TeammatesException)1 UnauthorizedAccessException (teammates.common.exception.UnauthorizedAccessException)1 StatusMessage (teammates.common.util.StatusMessage)1 EmailSender (teammates.logic.api.EmailSender)1