Package org.fenixedu.academic.ui.struts.action.publico.alumni

Source Code of org.fenixedu.academic.ui.struts.action.publico.alumni.AlumniPublicAccessDA

/**
* Copyright © 2002 Instituto Superior Técnico
*
* This file is part of FenixEdu Academic.
*
* FenixEdu Academic is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* FenixEdu Academic 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with FenixEdu Academic.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.fenixedu.academic.ui.struts.action.publico.alumni;

import java.util.UUID;

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

import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.fenixedu.academic.domain.Alumni;
import org.fenixedu.academic.domain.AlumniRequestType;
import org.fenixedu.academic.domain.Installation;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.dto.alumni.AlumniErrorSendingMailBean;
import org.fenixedu.academic.dto.alumni.AlumniIdentityCheckRequestBean;
import org.fenixedu.academic.dto.alumni.publicAccess.AlumniLinkRequestBean;
import org.fenixedu.academic.dto.alumni.publicAccess.AlumniPasswordBean;
import org.fenixedu.academic.dto.alumni.publicAccess.AlumniPublicAccessBean;
import org.fenixedu.academic.service.services.alumni.RegisterAlumniData;
import org.fenixedu.academic.service.services.commons.alumni.AlumniNotificationService;
import org.fenixedu.academic.service.services.exceptions.FenixServiceException;
import org.fenixedu.academic.ui.struts.action.base.FenixDispatchAction;
import org.fenixedu.academic.ui.struts.action.publico.KaptchaAction;
import org.fenixedu.academic.ui.struts.action.publico.PublicApplication;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.bennu.core.i18n.BundleUtil;
import org.fenixedu.bennu.struts.annotations.Forward;
import org.fenixedu.bennu.struts.annotations.Forwards;
import org.fenixedu.bennu.struts.annotations.Mapping;
import org.fenixedu.bennu.struts.portal.EntryPoint;
import org.fenixedu.bennu.struts.portal.StrutsFunctionality;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import pt.ist.fenixWebFramework.renderers.utils.RenderUtils;
import pt.utl.ist.fenix.tools.util.EMail;

@StrutsFunctionality(app = PublicApplication.class, path = "alumni", titleKey = "label.alumni.main.title")
@Mapping(module = "publico", path = "/alumni")
@Forwards({
        @Forward(name = "alumniPublicAccessInner", path = "/publico/alumni/alumniPublicAccessInner.jsp"),
        @Forward(name = "alumniCreatePasswordRequest", path = "/publico/alumni/alumniCreatePasswordRequest.jsp"),
        @Forward(name = "alumniPublicAccessInformationInquiry", path = "/publico/alumni/alumniPublicAccessInformationInquiry.jsp"),
        @Forward(name = "alumniPublicAccessIdentityCheck", path = "/publico/alumni/alumniPublicAccessIdentityCheck.jsp"),
        @Forward(name = "alumniPublicAccess", path = "/publico/alumni/alumniPublicAccess.jsp"),
        @Forward(name = "alumniErrorSendMail", path = "/publico/alumni/alumniPublicAccessErrorSendMail.jsp"),
        @Forward(name = "alumniRegistrationResult", path = "/publico/alumni/alumniRegistrationResult.jsp"),
        @Forward(name = "alumniPasswordRequired", path = "/publico/alumni/alumniPasswordRequired.jsp"),
        @Forward(name = "alumniPublicAccessMessage", path = "/publico/alumni/alumniPublicAccessMessage.jsp"),
        @Forward(name = "alumniPublicAccessRegistrationEmail", path = "/publico/alumni/alumniPublicAccessRegistrationEmail.jsp") })
public class AlumniPublicAccessDA extends FenixDispatchAction {

    private static final Logger logger = LoggerFactory.getLogger(AlumniPublicAccessDA.class);

    @EntryPoint
    public ActionForward initFenixPublicAccess(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        request.getSession(true);

        if (getFromRequest(request, "showForm") != null) {
            request.setAttribute("showForm", "true");
            request.setAttribute("alumniBean", getFromRequest(request, "alumniBean"));
        } else {
            request.setAttribute("showForm", "false");
            request.setAttribute("alumniBean", new AlumniLinkRequestBean());
        }
        return mapping.findForward("alumniPublicAccess");
    }

    public ActionForward requestIdentityCheck(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        request.setAttribute("alumniBean", new AlumniIdentityCheckRequestBean(AlumniRequestType.STUDENT_NUMBER_RECOVERY));
        return mapping.findForward("alumniPublicAccessIdentityCheck");
    }

    public ActionForward processRequestIdentityCheckError(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) throws Exception {

        request.setAttribute("alumniBean", getFromRequest(request, "alumniBean"));
        return mapping.findForward("alumniPublicAccessIdentityCheck");
    }

    public ActionForward processRequestIdentityCheck(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        if (!validateCaptcha(mapping, request)) {
            return requestIdentityCheck(mapping, actionForm, request, response);
        }

        try {
            RegisterAlumniData.run((AlumniIdentityCheckRequestBean) getObjectFromViewState("alumniBean"));
        } catch (DomainException e) {
            addActionMessage(request, e.getKey(), e.getArgs());
            return processRequestIdentityCheckError(mapping, actionForm, request, response);
        }

        request.setAttribute("alumniPublicAccessTitle", "identity.check.request.successful.creation.title");
        request.setAttribute("alumniPublicAccessMessage", "identity.check.request.successful.creation.message");
        return mapping.findForward("alumniPublicAccessMessage");
    }

    private boolean validateCaptcha(ActionMapping mapping, HttpServletRequest request) {
        final String captchaResponse = request.getParameter("j_captcha_response");

        try {
            if (!KaptchaAction.validateResponse(request.getSession(), captchaResponse)) {
                addActionMessage("error", request, "captcha.wrong.word");
                return false;
            }
            return true;
        } catch (Exception e) { // may be thrown if the id is not valid
            request.setAttribute("captcha.unknown.error", "captcha.unknown.error");
            request.setAttribute("showForm", "true");
            request.setAttribute("alumniBean", getObjectFromViewState("alumniBean"));
            return false;
        }
    }

    // 1st validation: captcha validation
    public ActionForward validateFenixAcessData(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        final AlumniLinkRequestBean alumniBean = (AlumniLinkRequestBean) getObjectFromViewState("alumniBean");

        if (!alumniBean.getPrivacyPolicy().booleanValue()) {
            request.setAttribute("showForm", "true");
            request.setAttribute("privacyPolicyPublicAccessMessage", "privacy.policy.acceptance");
            request.setAttribute("alumniBean", alumniBean);
            return mapping.findForward("alumniPublicAccess");
        }

        if (!validateCaptcha(mapping, request)) {
            return mapping.findForward("alumniPublicAccess");
        }

        try {
            final Alumni alumni =
                    RegisterAlumniData.run(alumniBean.getStudentNumber(), alumniBean.getDocumentIdNumber().trim(),
                            alumniBean.getEmail());
            String url = AlumniNotificationService.getRegisterConclusionURL(alumni);
            request.setAttribute("alumniEmailSuccessMessage", "http" + url.split("http")[1]);
            request.setAttribute("alumni", alumni);

        } catch (DomainException e) {
            if ("error.no.registrations".equals(e.getKey())) {
                request.setAttribute("showReportError", "true");
                String alumniEmail = Installation.getInstance().getInstituitionalEmailAddress("alumni");
                request.setAttribute("errorMessage", getResources(request).getMessage(e.getKey(), e.getArgs(), alumniEmail));
            } else if ("error.no.concluded.registrations".equals(e.getKey()) || "error.person.no.student".equals(e.getKey())) {
                request.setAttribute("showReportError", "true");
                request.setAttribute("errorMessage", getResources(request).getMessage(e.getKey(), e.getArgs()));
            }
            addActionMessage(request, e.getKey(), e.getArgs());
            request.setAttribute("showForm", "true");
            request.setAttribute("alumniBean", alumniBean);
            return mapping.findForward("alumniPublicAccess");
        }
        return mapping.findForward("alumniPublicAccessRegistrationEmail");
    }

    public ActionForward prepareSendEmailReportingError(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        AlumniErrorSendingMailBean mailSendingBean = new AlumniErrorSendingMailBean();
        mailSendingBean.setDocumentIdNumber(request.getParameter("documentIdNumber"));
        mailSendingBean.setStudentNumber(Integer.valueOf(request.getParameter("studentNumber")));
        mailSendingBean.setContactEmail(request.getParameter("email"));
        mailSendingBean.setErrorMessage(request.getParameter("errorMessage"));

        request.setAttribute("alumniErrorSendMail", mailSendingBean);
        return mapping.findForward("alumniErrorSendMail");
    }

    public ActionForward sendEmailReportingError(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        final AlumniErrorSendingMailBean alumniBean = getRenderedObject();
        StringBuilder mailBody = new StringBuilder();
        mailBody.append(BundleUtil.getString(Bundle.ALUMNI, "message.alumni.mail.body.header"));
        mailBody.append("'").append(BundleUtil.getString(Bundle.ALUMNI, alumniBean.getErrorMessage())).append("'\n\n");

        String[] mailArgs = new String[8];
        mailArgs[0] = alumniBean.getFullName();
        mailArgs[1] = alumniBean.getStudentNumber().toString();
        mailArgs[2] = alumniBean.getContactEmail();
        mailArgs[3] = alumniBean.getDocumentIdNumber();
        mailArgs[4] = alumniBean.getDateOfBirthYearMonthDay().toString();
        mailArgs[5] = alumniBean.getSocialSecurityNumber();
        mailArgs[6] = alumniBean.getNameOfFather();
        mailArgs[7] = alumniBean.getNameOfMother();

        String messageBody =
                RenderUtils.getFormatedResourceString("ALUMNI_RESOURCES", "message.alumni.mail.person.data", mailArgs);
        mailBody.append(messageBody);
        mailBody.append("\n\n").append(BundleUtil.getString(Bundle.ALUMNI, "message.alumni.mail.body.footer"));
        EMail email = null;
        try {
            if (!request.getServerName().equals("localhost")) {
                email = new EMail("mail.adm", "erro@dot.ist.utl.pt");
                String aluminiEmailAddress = Installation.getInstance().getInstituitionalEmailAddress("alumni");
                email.send(aluminiEmailAddress, "Erro Registo Alumni", mailBody.toString());
            }
        } catch (Throwable t) {
            logger.error(t.getMessage(), t);
            throw new Error(t);
        }

        request.setAttribute("alumniPublicAccessTitle", "title.report.error");
        request.setAttribute("alumniPublicAccessMessage", "message.public.error.mail.success");
        return mapping.findForward("alumniPublicAccessMessage");
    }

    public ActionForward innerFenixPublicAccessValidation(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) throws Exception {

        String alumniId = BundleUtil.getString(Bundle.ALUMNI, "alumni.public.registration.first.argument");
        String urlToken = BundleUtil.getString(Bundle.ALUMNI, "alumni.public.registration.second.argument");
        final Alumni alumni = getDomainObject(request, alumniId);

        if (StringUtils.isEmpty(alumniId) || StringUtils.isEmpty(urlToken) || alumni == null) {
            request.setAttribute("alumniPublicAccessTitle", "registration.error.old.request.link.title");
            request.setAttribute("alumniPublicAccessMessage", "error.alumni.wrong.arguments");
            return mapping.findForward("alumniPublicAccessMessage");
        }

        if (alumni.isRegistered() && !alumni.isRecoveringPassword()) {
            request.setAttribute("alumniPublicAccessTitle", "registration.error.old.request.link.title");
            request.setAttribute("alumniPublicAccessMessage", "error.alumni.already.registered");
            return mapping.findForward("alumniPublicAccessMessage");
        }

        if (!alumni.getUrlRequestToken().equals(UUID.fromString(request.getParameter(urlToken)))) {
            request.setAttribute("alumniPublicAccessTitle", "registration.error.old.request.link.title");
            request.setAttribute("alumniPublicAccessMessage", "registration.error.old.request.link.message");
            return mapping.findForward("alumniPublicAccessMessage");
        }

        request.setAttribute("alumniBean", new AlumniLinkRequestBean(alumni));
        request.setAttribute("alumniId", getFromRequest(request, alumniId));
        request.setAttribute("urlToken", request.getParameter(urlToken));
        return mapping.findForward("alumniPublicAccessInner");
    }

    public ActionForward registrationConclusion(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        final Alumni alumni = ((AlumniLinkRequestBean) getObjectFromViewState("alumniBean")).getAlumni();
        RenderUtils.invalidateViewState();

        alumni.validateEmailFromRegistrationProcess();

        if (alumni.hasPastLogin()) {
            try {
                RegisterAlumniData.run(alumni, Boolean.TRUE);
                request.setAttribute("loginAlias", alumni.getLoginUsername());
                request.setAttribute("registrationResult", "true");
            } catch (FenixServiceException e) {
                request.setAttribute("registrationResult", "false");
            }

            request.setAttribute("passwordAccessBean", new AlumniPasswordBean(alumni));
            request.setAttribute("alumni", alumni);
            return mapping.findForward("alumniRegistrationResult");

        } else {
            request.setAttribute("passwordAccessBean", new AlumniPasswordBean(alumni, AlumniRequestType.PASSWORD_REQUEST));
            if (alumni.hasAnyPendingIdentityRequests()) {
                request.setAttribute("pendingRequests", "true");
            }
            return mapping.findForward("alumniCreatePasswordRequest");
        }
    }

    public ActionForward createPasswordRequestInvalid(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        request.setAttribute("publicAccessBean", getObjectFromViewState("publicAccessBean"));
        return mapping.findForward("alumniCreatePasswordRequest");
    }

    public ActionForward createPasswordRequest(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        AlumniPasswordBean alumniBean = (AlumniPasswordBean) getObjectFromViewState("passwordAccessBean");

        try {
            RegisterAlumniData.run(alumniBean);
            request.setAttribute("loginAlias", alumniBean.getAlumni().getLoginUsername());
            request.setAttribute("registrationResult", "true");
        } catch (DomainException e) {
            addActionMessage("error", request, e.getKey());
            request.setAttribute("registrationResult", "false");
            return mapping.findForward("alumniCreatePasswordRequest");
        }

        request.setAttribute("publicAccessBean", new AlumniPublicAccessBean(alumniBean.getAlumni()));
        request.setAttribute("alumni", alumniBean.getAlumni());
        return mapping.findForward("alumniPasswordRequired");
    }
}
TOP

Related Classes of org.fenixedu.academic.ui.struts.action.publico.alumni.AlumniPublicAccessDA

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.