Created
September 8, 2015 22:40
-
-
Save veesa/904de55de663b9f82b09 to your computer and use it in GitHub Desktop.
Java Registration Servlet
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package controllers; | |
import java.io.IOException; | |
import java.io.PrintWriter; | |
import java.sql.Connection; | |
import java.sql.ResultSet; | |
import java.sql.SQLException; | |
import java.sql.Statement; | |
import java.text.ParseException; | |
import java.text.SimpleDateFormat; | |
import java.util.Date; | |
import java.util.logging.Level; | |
import java.util.logging.Logger; | |
import javax.servlet.ServletException; | |
import javax.servlet.annotation.WebServlet; | |
import javax.servlet.http.HttpServlet; | |
import javax.servlet.http.HttpServletRequest; | |
import javax.servlet.http.HttpServletResponse; | |
import javax.servlet.http.HttpSession; | |
import modules.Member; | |
@WebServlet(name = "RegistrationServlet", urlPatterns = {"/RegistrationServlet"}) | |
public class RegistrationServlet extends HttpServlet { | |
private boolean fieldsAreValid(HttpServletRequest request) { | |
boolean valid = true; | |
String titleFault = ""; | |
if (request.getParameter("title") == null || request.getParameter("title").trim().isEmpty()) { | |
titleFault = "* Title name is empty."; | |
valid = false; | |
} else if (!request.getParameter("title").matches("^[a-zA-Z]*$")) { | |
titleFault = "* Please choose a title"; | |
valid = false; | |
} | |
request.setAttribute("titleFault", titleFault); | |
String firstNameFault = ""; | |
if (request.getParameter("forename") == null || request.getParameter("forename").trim().isEmpty()) { | |
firstNameFault = "First name is empty."; | |
valid = false; | |
} else if (!request.getParameter("forename").matches("^[a-zA-Z]*$")) { | |
firstNameFault = "First name is invalid, must only contain letters e.g. Adam"; | |
valid = false; | |
} | |
request.setAttribute("firstNameFault", firstNameFault); | |
String lastNameFault = ""; | |
if (request.getParameter("surname") == null || request.getParameter("surname").trim().isEmpty()) { | |
lastNameFault = "Last name is empty."; | |
valid = false; | |
} else if (!request.getParameter("surname").matches("^[a-zA-Z]*$")) { | |
lastNameFault = "Last name is invalid, must only contain letters e.g. Gates"; | |
valid = false; | |
} | |
request.setAttribute("lastNameFault", lastNameFault); | |
String monthFault = ""; | |
if (request.getParameter("month") == null || request.getParameter("month").trim().isEmpty()) { | |
monthFault = "* Month is empty."; | |
valid = false; | |
} else if (!request.getParameter("month").matches("0[1-9]|1[0-2]")) { | |
monthFault = "* Invalid month"; | |
valid = false; | |
} | |
request.setAttribute("monthFault", monthFault); | |
//("/^01|02|03|04|05|06|07|08|09|10|11|12$/") | |
String dayFault = ""; | |
if (request.getParameter("day") == null || request.getParameter("day").trim().isEmpty()) { | |
dayFault = "* Day is empty."; | |
valid = false; | |
} else if (!request.getParameter("day").matches("[0-2]\\d|3[01]")) { | |
dayFault = "* Invalid day"; | |
valid = false; | |
} | |
request.setAttribute("dayFault", dayFault); | |
String yearFault = ""; | |
if (request.getParameter("year") == null || request.getParameter("year").trim().isEmpty()) { | |
yearFault = "* Year is empty."; | |
valid = false; | |
} else if (!request.getParameter("year").matches("(19|2[0-1])\\d{2}$")) { | |
yearFault = "* Invalid year"; | |
valid = false; | |
} | |
request.setAttribute("yearFault", yearFault); | |
String streetFault = ""; | |
if (request.getParameter("street") == null || request.getParameter("street").trim().isEmpty()) { | |
streetFault = "* Street is empty."; | |
valid = false; | |
} else if (!request.getParameter("street").matches("\\d{1,3}.?\\d{0,3}\\s[a-zA-Z]{2,30}\\s[a-zA-Z]{2,15}")) { | |
streetFault = "* Enter street name"; | |
valid = false; | |
} | |
request.setAttribute("streetFault", streetFault); | |
String cityFault = ""; | |
if (request.getParameter("city") == null || request.getParameter("city").trim().isEmpty()) { | |
cityFault = "* City is empty."; | |
valid = false; | |
} else if (!request.getParameter("city").matches("^[a-zA-Z]+(?:[\\s-][a-zA-Z]+)*$")) { | |
cityFault = "* Enter city"; | |
valid = false; | |
} | |
request.setAttribute("cityFault", cityFault); | |
String countyFault = ""; | |
if (request.getParameter("county") == null || request.getParameter("county").trim().isEmpty()) { | |
countyFault = "* County is empty."; | |
valid = false; | |
} else if (!request.getParameter("county").matches("^[a-zA-Z]+(?:[\\s-][a-zA-Z]+)*$")) { | |
countyFault = "* Enter county"; | |
valid = false; | |
} | |
request.setAttribute("countyFault", countyFault); | |
String postcodeFault = ""; | |
if (request.getParameter("postcode") == null || request.getParameter("postcode").trim().isEmpty()) { | |
postcodeFault = "* Postcode is empty."; | |
valid = false; | |
} else if (!request.getParameter("postcode").toUpperCase().matches("(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})")) { | |
postcodeFault = "* Postcode is invalid."; | |
valid = false; | |
} | |
request.setAttribute("postcodeFault", postcodeFault); | |
String emailFault = ""; | |
if (request.getParameter("email") == null || request.getParameter("email").trim().isEmpty()) { | |
emailFault = "* Email Address is empty."; | |
valid = false; | |
} else if (!request.getParameter("email").matches("^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z]){2,4}+$")) { | |
emailFault = "* Email Address is invalid."; | |
valid = false; | |
} | |
request.setAttribute("emailFault", emailFault); | |
String usernameFault = ""; | |
if (request.getParameter("username") == null || request.getParameter("username").trim().isEmpty()) { | |
usernameFault = "* Username is empty."; | |
valid = false; | |
} else { | |
if (!request.getParameter("username").matches("^[a-zA-Z0-9]{6,12}")) { | |
usernameFault = "\n* Username can only be alphanumeric and between 6-12 characters e.g.userName3"; | |
valid = false; | |
} else { | |
try { | |
DatabaseAccess ac = new DatabaseAccess(); | |
Connection c = ac.getConnection(); | |
Statement stmt = c.createStatement(); | |
String sqlCheck = "SELECT username FROM member WHERE username='" + request.getParameter("username").trim() + "';"; | |
ResultSet rs = stmt.executeQuery(sqlCheck); | |
//if there is an existing username | |
while (rs.next()) { | |
//this means there is a username match | |
usernameFault = "* This username is taken. Please choose another."; | |
valid = false; | |
} | |
c.close(); | |
} catch (ServletException | SQLException ex) { | |
Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, ex); | |
//Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, sqle); | |
} | |
} | |
} | |
request.setAttribute("usernameFault", usernameFault); | |
String passFault = ""; | |
String password1 = request.getParameter("password"); | |
if (password1 == null || password1.trim().isEmpty()) { | |
passFault = "* Password is empty."; | |
valid = false; | |
} else if (!password1.matches("^[a-zA-Z0-9]{6,12}$")) { | |
passFault = "* Password only only alphanumeric and between 6-12 characters e.g. passWord2"; | |
valid = false; | |
} | |
request.setAttribute("passFault", passFault); | |
String passConfFault = ""; | |
String password2 = request.getParameter("password2"); | |
if (password2 == null || password2.trim().isEmpty()) { | |
passConfFault = "* Password is empty."; | |
valid = false; | |
} else if (!password2.matches("^[a-zA-Z0-9]{6,12}$")) { | |
passConfFault = "* Password only only alphanumeric and between 6-12 characters e.g. passWord4"; | |
valid = false; | |
} | |
request.setAttribute("passConfFault", passConfFault); | |
String matchFault = ""; | |
if (password1 != null && password2 != null) { | |
if (!password2.equals(password1)) { | |
matchFault = "* Passwords do not match."; | |
valid = false; | |
} | |
} | |
request.setAttribute("matchFault", matchFault); | |
String roleFault = ""; | |
if (request.getParameter("role") == null || request.getParameter("role").trim().isEmpty()) { | |
roleFault = "* Role is empty."; | |
valid = false; | |
} else if (!request.getParameter("role").matches("^[a-zA-Z]*$")) { | |
roleFault = "* Role isInsurer"; | |
valid = false; | |
} | |
request.setAttribute("roleFault", roleFault); | |
String privacyFault = ""; | |
if (request.getParameter("privacy") == null || request.getParameter("privacy").trim().isEmpty()) { | |
privacyFault = "* Privacy is empty."; | |
valid = false; | |
} else if (!request.getParameter("role").matches("^[a-zA-Z]*$")) { | |
privacyFault = "* Privacy isPublic"; | |
valid = false; | |
} | |
request.setAttribute("privacyFault", privacyFault); | |
return valid; | |
} | |
protected void processRequest(HttpServletRequest request, HttpServletResponse response) | |
throws ServletException, IOException, SQLException, ParseException { | |
response.setContentType("text/html;charset=UTF-8"); | |
PrintWriter out = response.getWriter(); | |
try { | |
String title = request.getParameter("title").trim(); | |
String forename = request.getParameter("forename").trim(); | |
String surname = request.getParameter("surname").trim(); | |
String monthStr = request.getParameter("month").trim(); | |
String dayStr = request.getParameter("day").trim(); | |
String yearStr = request.getParameter("year").trim(); | |
int month = Integer.valueOf(monthStr); | |
int day = Integer.valueOf(dayStr); | |
int year = Integer.valueOf(yearStr); | |
Date dob = new Date(year, month, day); | |
String street = request.getParameter("street").trim(); | |
String city = request.getParameter("city").trim(); | |
String county = request.getParameter("county").trim(); | |
String postcode = request.getParameter("postcode").trim(); | |
String email = request.getParameter("email").trim(); | |
String password = request.getParameter("password"); | |
String password2 = request.getParameter("password2"); | |
String username = request.getParameter("username").trim(); | |
String pw_hash = BCrypt.hashpw(request.getParameter("password"), BCrypt.gensalt()); | |
String isInsurerStr = request.getParameter("role").trim(); | |
String isPublicStr = request.getParameter("privacy").trim(); | |
boolean isInsurer, isPublic; | |
if (fieldsAreValid(request)) { | |
ResultSet uNameCheck = testAccess.runSelectQuery("SELECT title"+title+"forname" + forname+"surname" | |
+surname+"street" + street+ "city" + city +"county" +county + "dob" + dob +"postcode"+postcode+"email"+ | |
email+"password"+password+"username"+ username + " FROM member WHERE username='" + username + "';", testConn); | |
out.println(uNameCheck); | |
// Send it on to a different View | |
request.getRequestDispatcher("Register").forward(request, response); | |
testConn.close(); | |
Member activeMember = new Member(); | |
//checks it is not a duplicate username | |
//ResultSet uNameCheck = ac.runSelectQuery("SELECT * FROM member WHERE username='" + username + "';", c); | |
//if username exit go back to sign up page | |
// while (uNameCheck.next()) { | |
// request.getRequestDispatcher("registration.jsp").forward(request, response); | |
// } | |
//else add new user to database table "owner" | |
if (isInsurerStr.equals("true")) { | |
isInsurer = true; | |
} else { | |
isInsurer = false; | |
} | |
if (isPublicStr.equals("true")) { | |
isPublic = true; | |
} else { | |
isPublic = false; | |
} | |
activeMember = new Member(title, surname, forename, username, pw_hash, dob, street, city, county, postcode, email, isInsurer, isPublic);//creates owner object | |
if (isInsurer) { | |
activeMember.CreateInsurer(); | |
} else { | |
activeMember.CreateInsured(); | |
} | |
HttpSession session = request.getSession(); | |
session.setAttribute("activeMember", activeMember); | |
request.setAttribute("activeMember", activeMember); | |
//send to Confirmation view | |
if (isInsurer) { | |
request.getRequestDispatcher("add_plan.jsp").forward(request, response); | |
} else { | |
request.getRequestDispatcher("add_policy.jsp").forward(request, response); | |
} | |
} else { | |
request.setAttribute("title", title); | |
request.setAttribute("forename", forename); | |
request.setAttribute("surname", surname); | |
request.setAttribute("month", month); | |
request.setAttribute("day", day); | |
request.setAttribute("year", year); | |
request.setAttribute("street", street); | |
request.setAttribute("city", city); | |
request.setAttribute("county", county); | |
request.setAttribute("postcode", postcode); | |
request.setAttribute("email", email); | |
request.setAttribute("username", username); | |
request.setAttribute("role", isInsurerStr); | |
request.setAttribute("privacy", isPublicStr); | |
request.getRequestDispatcher("registration.jsp").forward(request, response); | |
} | |
} finally { | |
out.close(); | |
} | |
} | |
@Override | |
protected void doGet(HttpServletRequest request, HttpServletResponse response) | |
throws ServletException, IOException { | |
try { | |
try { | |
processRequest(request, response); | |
} catch (ParseException ex) { | |
Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, ex); | |
} | |
} catch (SQLException ex) { | |
Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, ex); | |
} | |
} | |
@Override | |
protected void doPost(HttpServletRequest request, HttpServletResponse response) | |
throws ServletException, IOException { | |
try { | |
try { | |
processRequest(request, response); | |
} catch (ParseException ex) { | |
Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, ex); | |
} | |
} catch (SQLException ex) { | |
Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, ex); | |
} | |
} | |
/** | |
* Returns a short description of the servlet. | |
* | |
* @return a String containing servlet description | |
*/ | |
@Override | |
public String getServletInfo() { | |
return "Short description"; | |
}// </editor-fold> | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment