From 60c5f8323d03258fa0df89aa72665fc53869953f Mon Sep 17 00:00:00 2001
From: elvinvina <vina9196@gmail.com>
Date: Wed, 30 Nov 2016 13:32:12 +0700
Subject: [PATCH] new token dan validasi token sesuai skenario

---
 IdentityService/src/com/KEM/ws/IdentityS.java | 93 +++++++++++++++++--
 .../src/com/KEM/ws/registerUser.java          | 91 ++++++++++++++++--
 KEMProject/WebContent/login.jsp               |  5 +
 KEMProject/WebContent/register.jsp            |  5 +
 KEMProject/src/backend/javaclass/Login.java   |  9 +-
 .../src/backend/javaclass/register.java       | 10 +-
 6 files changed, 192 insertions(+), 21 deletions(-)

diff --git a/IdentityService/src/com/KEM/ws/IdentityS.java b/IdentityService/src/com/KEM/ws/IdentityS.java
index ae93a9c..943d841 100644
--- a/IdentityService/src/com/KEM/ws/IdentityS.java
+++ b/IdentityService/src/com/KEM/ws/IdentityS.java
@@ -71,15 +71,90 @@ public class IdentityS extends HttpServlet {
 	         int Id = rs2.getInt("Id_User");
 	         
 	         generateToken gt = new generateToken();
-	         String token = gt.generateAccessToken();
-	         sql3 = "INSERT INTO authTokenUser(userId, token, created, expires) VALUES ("+Id+",\""+token+"\",CURRENT_TIMESTAMP, DATE_ADD(NOW(), INTERVAL 600 SECOND))";
-	         stmt.executeUpdate(sql3);
-	         
-	         rs2.close();
-	         stmt.close();
-	         conn.close();
-	         out.println(token);
-	         out.println(Id);
+             String token = gt.generateAccessToken();
+             String browser=request.getParameter("browser");
+             String ipAdr=request.getParameter("ip");
+             sql3 = "SELECT COUNT(*) as counter FROM authTokenUser";
+             rs3 = stmt.executeQuery(sql3);
+             rs3.next();
+             boolean sama = false;
+             int t = 0;
+             int i = 0;
+             String[] auth = new String[rs3.getInt("counter")];
+             if (rs3.getInt("counter") >= 1) {
+                 rs3.close();
+                 sql3 = "SELECT * FROM authTokenUser";
+                 rs3 = stmt.executeQuery(sql3);
+                 System.out.println("tokennyaaaaa : " + token);
+                 while (rs3.next()) {
+                     auth[i] = rs3.getString("token");
+                     i++;
+                 }
+                 rs3.close();
+                 t=0;
+                 System.out.println("substring : " + auth[t].substring(0, 40));
+                 while (t<i && !sama) {
+                     if (token.equals(auth[t].substring(0, 40))) {
+                         sama = true;
+                     }
+                     t++;
+                 }
+                 if (sama==false) {
+                     System.out.println("ini token berbedaaaaaaaa");
+                     token = token+"_"+browser+"_"+ipAdr;
+                     sql3 = "INSERT INTO authTokenUser(userId, token, created, expires) VALUES ("+Id+",\""+token+"\",CURRENT_TIMESTAMP, DATE_ADD(NOW(), INTERVAL 600 SECOND))";
+                     stmt.executeUpdate(sql3);
+                     rs2.close();
+                     stmt.close();
+                     conn.close();
+                     out.println(token);
+                     out.println(Id);
+                 }
+                 else {
+                     System.out.println("ini tokeeen samaaaaa");
+                     t=0;
+                     sama = false;
+                     token = token + "_" + browser + "_" + ipAdr;
+                     while (t<i && !sama) {
+                         if (token.equals(auth[t])) {
+                             sama = true;
+                         }
+                         t++;
+                     }
+                     if (sama==true) {
+                         
+                         System.out.println("iniii samaaa semuaaaaaaaaaaa");
+                         sql3 = "INSERT INTO authTokenUser(userId, token, created, expires) VALUES ("+Id+",\""+token+"\",CURRENT_TIMESTAMP, DATE_ADD(NOW(), INTERVAL 600 SECOND))";
+                         stmt.executeUpdate(sql3);
+                         
+                         rs2.close();
+                         stmt.close();
+                         conn.close();
+                         out.println(token);
+                         out.println(Id);
+                     }
+                     else {
+                         System.out.println("ini ada yaang bedaaaaaa");
+                         rs2.close();
+                         stmt.close();
+                         conn.close();
+                         out.println("invalid");
+                     }
+                 }
+                     
+             }
+             else {
+                 token = token+"_"+browser+ "_"+ipAdr;
+                 
+                 sql3 = "INSERT INTO authTokenUser(userId, token, created, expires) VALUES ("+Id+",\""+token+"\",CURRENT_TIMESTAMP, DATE_ADD(NOW(), INTERVAL 600 SECOND))";
+                 stmt.executeUpdate(sql3);
+                 
+                 rs2.close();
+                 stmt.close();
+                 conn.close();
+                 out.println(token);
+                 out.println(Id);
+             }
          }else{
         	// Clean-up environment
 	         rs.close();
diff --git a/IdentityService/src/com/KEM/ws/registerUser.java b/IdentityService/src/com/KEM/ws/registerUser.java
index 2dfecdd..ad63a42 100644
--- a/IdentityService/src/com/KEM/ws/registerUser.java
+++ b/IdentityService/src/com/KEM/ws/registerUser.java
@@ -86,16 +86,91 @@ public class registerUser extends HttpServlet {
 		         
 		         generateToken gt = new generateToken();
 		         String token = gt.generateAccessToken();
-		         sqlToken = "INSERT INTO authTokenUser(userId, token, created, expires) VALUES ("+Id+",\""+token+"\",CURRENT_TIMESTAMP, DATE_ADD(NOW(), INTERVAL 600 SECOND))";
-		         stmt.executeUpdate(sqlToken);
+		         String browser=request.getParameter("browser");
+		         String ipAdr=request.getParameter("ip");
 		         
-		         rs.close();
-		         stmt.close();
-		         conn.close();
+		         sql3 = "SELECT COUNT(*) as counter FROM authTokenUser";
+		         rs3 = stmt.executeQuery(sql3);
+		         rs3.next();
+	        	 boolean sama = false;
+	        	 int t = 0;
+	        	 int i = 0;
+	        	 String[] auth = new String[rs3.getInt("counter")];
+		         
+	        	 if (rs3.getInt("counter")>=1) {
+	        		 rs3.close();
+		        	 sql3 = "SELECT * FROM authTokenUser";
+		        	 rs3 = stmt.executeQuery(sql3);
+		        	 System.out.println("tokennyaaaaa : " + token);
+		        	 while (rs3.next()) {
+		        		 auth[i] = rs3.getString("token");
+		        		 i++;
+		        	 }
+		        	 rs3.close();
+		        	 t=0;
+		        	 System.out.println("substring : " + auth[t].substring(0, 40));
+		        	 while (t<i && !sama) {
+		        		 if (token.equals(auth[t].substring(0, 40))) {
+		        			 sama = true;
+		        		 }
+		        		 t++;
+		        	 }
+		        	 if (sama==false) {
+		        		 token = token+"_"+browser+"_"+ipAdr;
+		        		 sql3 = "INSERT INTO authTokenUser(userId, token, created, expires) VALUES ("+Id+",\""+token+"\",CURRENT_TIMESTAMP, DATE_ADD(NOW(), INTERVAL 600 SECOND))";
+				         stmt.executeUpdate(sql3);
+				         
+				         rs.close();
+				         stmt.close();
+				         conn.close();
 
-		         out.println(token);
-		         out.println(Id);
-        	 }
+				         out.println(token);
+				         out.println(Id);
+		        	 }
+		        	 else {
+		        		 t=0;
+		        		 sama = false;
+		        		 token = token + "_" + browser + "_" + ipAdr;
+		        		 while (t<i && !sama) {
+		        			 if (token.equals(auth[t])) {
+		        				 sama = true;
+		        			 }
+		        			 t++;
+		        		 }
+		        		 if (sama==true) {
+		        			 sql3 = "INSERT INTO authTokenUser(userId, token, created, expires) VALUES ("+Id+",\""+token+"\",CURRENT_TIMESTAMP, DATE_ADD(NOW(), INTERVAL 600 SECOND))";
+		    		         stmt.executeUpdate(sql3);
+		    		         
+		    		         rs.close();
+					         stmt.close();
+					         conn.close();
+
+					         out.println(token);
+					         out.println(Id);
+		        		 }
+		        		 else {
+		        			 System.out.println("ini ada yaang bedaaaaaa");
+		        			 rs.close();
+		        			 rsEmail.close();
+		        			 stmt.close();
+		        			 conn.close();
+		        			 out.println("invalid");
+		        		 }
+		        	 }
+	        	 }
+	        	 else {
+	        		 token = token+"_"+browser+ "_"+ipAdr;
+			         
+			         sqlToken = "INSERT INTO authTokenUser(userId, token, created, expires) VALUES ("+Id+",\""+token+"\",CURRENT_TIMESTAMP, DATE_ADD(NOW(), INTERVAL 15 SECOND))";
+			         stmt.executeUpdate(sqlToken);
+			         
+			         rs.close();
+			         stmt.close();
+			         conn.close();
+
+			         out.println(token);
+			         out.println(Id);
+	        	 }
         	 else {
         		// Clean-up environment
 		         rsEmail.close();
diff --git a/KEMProject/WebContent/login.jsp b/KEMProject/WebContent/login.jsp
index dd2b1c1..b45fc8e 100644
--- a/KEMProject/WebContent/login.jsp
+++ b/KEMProject/WebContent/login.jsp
@@ -1,4 +1,5 @@
 <%session.invalidate();%>
+<%@ page import="java.net.InetAddress" %>
 <!DOCTYPE html>
 <html>
 	<head>
@@ -26,6 +27,10 @@
 		      		<div class="warning" id="warnpass"></div>
 
 		      		<div class="warning"></div>
+		      		<%InetAddress ip;
+		    		ip = InetAddress.getLocalHost(); %>
+		      		<input type="hidden" name="browser" value="<%=request.getHeader("User-Agent")%>" />
+		      		<input type="hidden" name="ip" value="<%=ip.getHostAddress()%>" />
 				</div>
 				<div class="buttonplace">
 	      			<button type="submit">LOGIN</button></br>
diff --git a/KEMProject/WebContent/register.jsp b/KEMProject/WebContent/register.jsp
index a329492..b3837c4 100644
--- a/KEMProject/WebContent/register.jsp
+++ b/KEMProject/WebContent/register.jsp
@@ -1,3 +1,4 @@
+<%@ page import="java.net.InetAddress" %>
 <!DOCTYPE html>
 <html>
 	<head>
@@ -45,6 +46,10 @@
 					<label>Phone Number</label><br>
 					<input type="text" name = "telp"><br>
 					<div class="warning" id="warntelp"></div><br>
+					<%InetAddress ip;
+		    		ip = InetAddress.getLocalHost(); %>
+		      		<input type="hidden" name="browser" value="<%=request.getHeader("User-Agent")%>" />
+		      		<input type="hidden" name="ip" value="<%=ip.getHostAddress()%>" />
 				</div>
 
 				<div class="buttonplace">
diff --git a/KEMProject/src/backend/javaclass/Login.java b/KEMProject/src/backend/javaclass/Login.java
index 9eb9315..466837c 100644
--- a/KEMProject/src/backend/javaclass/Login.java
+++ b/KEMProject/src/backend/javaclass/Login.java
@@ -16,10 +16,14 @@ public class Login extends HttpServlet {
 		
 		String un=request.getParameter("username");
 		String pw=request.getParameter("password");
+		String browser=request.getParameter("browser");
+        String ipAdr=request.getParameter("ip");
 		
 		Map<String,Object> params = new LinkedHashMap<>();
         params.put("username", un);
         params.put("password", pw);
+        params.put("browser", browser);
+        params.put("ip", ipAdr);
 
         StringBuilder postData = new StringBuilder();
         String res="";
@@ -56,8 +60,9 @@ public class Login extends HttpServlet {
 			response.sendRedirect("login.jsp");
 		}
 		else{
-			token = res.substring(0, 40);
-	        String userId = res.substring(40);
+			int lengres= res.length();
+			token = res.substring(0, lengres-1);
+	        String userId = res.substring(lengres-1);
 	        //tes session
 	        HttpSession session = request.getSession();
 	        session.setAttribute("token", token);
diff --git a/KEMProject/src/backend/javaclass/register.java b/KEMProject/src/backend/javaclass/register.java
index ee0981d..117ed82 100644
--- a/KEMProject/src/backend/javaclass/register.java
+++ b/KEMProject/src/backend/javaclass/register.java
@@ -27,6 +27,8 @@ public class register extends HttpServlet {
 		String address=request.getParameter("address");
 		String postcode=request.getParameter("postcode");
 		String phone=request.getParameter("telp");
+		String browser=request.getParameter("browser");
+        String ipAdr=request.getParameter("ip");
 		
 		Map<String,Object> params = new LinkedHashMap<>();
 		params.put("fullname", fullname);
@@ -36,6 +38,9 @@ public class register extends HttpServlet {
         params.put("address", address);
         params.put("postcode", postcode);
         params.put("telp", phone);
+        params.put("browser", browser);
+        params.put("ip", ipAdr);
+
 
         StringBuilder postData = new StringBuilder();
         String res= new String("");
@@ -69,8 +74,9 @@ public class register extends HttpServlet {
 			response.sendRedirect("register.jsp");
 		}
 		else{
-			 String token = res.substring(0, 40);
-	        String userId = res.substring(40);
+			int lengres= res.length();
+			String token = res.substring(0, lengres-1);
+	        String userId = res.substring(lengres-1);
 	        
 	        HttpSession session = request.getSession();
 	        session.setAttribute("token", token);
-- 
GitLab