com.rr.generic.ui.controller.mainController.java Source code

Java tutorial

Introduction

Here is the source code for com.rr.generic.ui.controller.mainController.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rr.generic.ui.controller;

import com.registryKit.program.program;
import com.registryKit.program.programManager;
import com.registryKit.user.User;
import com.registryKit.messenger.emailManager;
import com.registryKit.messenger.emailMessage;
import com.registryKit.user.userManager;
import java.math.BigInteger;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.view.RedirectView;

/**
 *
 * @author chadmccue
 */
@Controller
public class mainController {

    @Value("${programId}")
    private Integer programId;

    @Autowired
    private userManager usermanager;

    @Autowired
    private emailManager emailManager;

    @Autowired
    private programManager programmanager;

    /**
     * The '/login' request will serve up the login page.
     *
     * @param request
     * @param response
     * @return   the login page view
     * @throws Exception
     */
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public ModelAndView login() throws Exception {

        program programDetails = programmanager.getProgramById(programId);

        ModelAndView mav = new ModelAndView();
        mav.setViewName("/login");
        mav.addObject("programName", programDetails.getProgramName());

        return mav;

    }

    /**
     * The '/loginfailed' request will serve up the login page displaying the login failed error message
     *
     * @param request
     * @param response
     * @return   the error object and the login page view
     * @throws Exception
     */
    @RequestMapping(value = "/loginfailed", method = RequestMethod.GET)
    public ModelAndView loginerror(HttpServletRequest request, HttpServletResponse response) throws Exception {

        program programDetails = programmanager.getProgramById(programId);

        ModelAndView mav = new ModelAndView();
        mav.setViewName("/login");
        mav.addObject("programName", programDetails.getProgramName());
        mav.addObject("error", "true");
        return mav;

    }

    /**
     * The '/logout' request will handle a user logging out of the system. The request will handle front-end users or administrators logging out.
     *
     * @param request
     * @param response
     * @return   the login page view
     * @throws Exception
     */
    @RequestMapping(value = "/logout", method = RequestMethod.GET)
    public ModelAndView logout(HttpServletRequest request, HttpServletResponse response) throws Exception {

        program programDetails = programmanager.getProgramById(programId);

        ModelAndView mav = new ModelAndView();
        mav.setViewName("/login");
        mav.addObject("programName", programDetails.getProgramName());

        return mav;
    }

    /**
     * The '/' request will be the default request of the translator. The request will serve up the home page of the translator.
     *
     * @param request
     * @param response
     * @return   the home page view
     * @throws Exception
     */
    @RequestMapping(value = "/", method = { RequestMethod.GET, RequestMethod.HEAD })
    public ModelAndView welcome(HttpServletRequest request, HttpServletResponse response,
            RedirectAttributes redirectAttr, HttpSession session) throws Exception {

        ModelAndView mav = new ModelAndView(new RedirectView("/login"));
        return mav;

    }

    /**
     * The '/home' request will serve up the home page.
     *
     * @param request
     * @param response
     * @return   the login page view
     * @throws Exception
     */
    @RequestMapping(value = "/home", method = RequestMethod.GET)
    public ModelAndView home() throws Exception {

        ModelAndView mav = new ModelAndView();
        mav.setViewName("/home");

        return mav;

    }

    /**
     * The '/forgotPassword.do' POST request will be used to find the account information for the user and send an email.
     *
     *
     */
    @RequestMapping(value = "/forgotPassword.do", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public @ResponseBody Integer findPassword(@RequestParam String identifier) throws Exception {

        Integer userId = usermanager.getUserByIdentifier(identifier);

        if (userId == null) {
            return 0;
        } else {

            return userId;
        }

    }

    /**
     * The '/sendPassword.do' POST request will be used to send the reset email to the user.
     *
     * @param userId The id of the return user.
     */
    @RequestMapping(value = "/sendPassword.do", method = RequestMethod.POST)
    public void sendPassword(@RequestParam Integer userId, HttpServletRequest request) throws Exception {

        String randomCode = generateRandomCode();

        User userDetails = usermanager.getUserById(userId);
        userDetails.setresetCode(randomCode);

        usermanager.updateUser(userDetails);

        program programDetails = programmanager.getProgramById(programId);

        /* Sent Reset Email */
        emailMessage messageDetails = new emailMessage();

        messageDetails.settoEmailAddress(userDetails.getEmail());
        messageDetails.setmessageSubject(programDetails.getProgramName() + " Reset Password");

        String resetURL = request.getRequestURL().toString().replace("sendPassword.do", "resetPassword?b=");

        StringBuilder sb = new StringBuilder();

        sb.append("Dear ").append(userDetails.getFirstName()).append(",<br />");
        sb.append("You have recently asked to reset your ").append(programDetails.getProgramName())
                .append(" password.<br /><br />");
        sb.append("<a href='").append(resetURL).append(randomCode)
                .append("'>Click here to reset your password.</a>");

        messageDetails.setmessageBody(sb.toString());
        messageDetails.setfromEmailAddress(programDetails.getEmailAddress());

        emailManager.sendEmail(messageDetails);

    }

    /**
     * The '/resetPassword' GET request will be used to display the reset password form
     *
     *
     * @return   The forget password form page
     *
     *
     */
    @RequestMapping(value = "/resetPassword", method = RequestMethod.GET)
    public ModelAndView resetPassword(@RequestParam(value = "b", required = false) String resetCode,
            HttpSession session) throws Exception {

        ModelAndView mav = new ModelAndView();
        mav.setViewName("/resetPassword");
        mav.addObject("resetCode", resetCode);

        return mav;
    }

    /**
     * The '/resetPassword' POST request will be used to display update the users password
     *
     * @param resetCode The code that was set to reset a user for.
     * @param newPassword The password to update the user to
     *
     */
    @RequestMapping(value = "/resetPassword", method = RequestMethod.POST)
    public ModelAndView resetPassword(@RequestParam String resetCode, @RequestParam String newPassword,
            HttpSession session, RedirectAttributes redirectAttr) throws Exception {

        User userDetails = usermanager.getUserByResetCode(resetCode);

        if (userDetails == null) {
            redirectAttr.addFlashAttribute("msg", "notfound");

            ModelAndView mav = new ModelAndView(new RedirectView("/login"));
            return mav;
        } else {
            userDetails.setresetCode(null);
            userDetails.setPassword(newPassword);
            userDetails = usermanager.encryptPW(userDetails);

            usermanager.updateUser(userDetails);

            redirectAttr.addFlashAttribute("msg", "updated");

            ModelAndView mav = new ModelAndView(new RedirectView("/login"));
            return mav;
        }

    }

    /**
     * The 'generateRandomCode' function will be used to generate a random access code to reset a users password. The function will call itself until it gets a unique code.
     *
     * @return This function returns a randomcode as a string
     */
    public String generateRandomCode() {

        Random random = new Random();
        String randomCode = new BigInteger(130, random).toString(32);

        /* Check to make sure there is not reset code already generated */
        User usedCode = usermanager.getUserByResetCode(randomCode);

        if (usedCode == null) {
            return randomCode;
        } else {

            return generateRandomCode();

        }

    }

}