Skip to content

Commit

Permalink
add lab5, 6
Browse files Browse the repository at this point in the history
  • Loading branch information
Darkie20 committed May 20, 2024
1 parent f5956b7 commit 07fa214
Show file tree
Hide file tree
Showing 90 changed files with 6,501 additions and 25 deletions.
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@
*.rar
*.tar.gz
*.docx
*.doc
*.doc
*.ppt
*.pptx
*.xls
*.xlsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,6 @@ public void majors(@PathVariable String selectedMajor, HttpServletResponse respo
@GetMapping("/majors={majorCode}/courses={courseCode}")
public void courses(@PathVariable String majorCode, @PathVariable String courseCode, HttpServletResponse response)
throws IOException {
System.out.println("Requested course: " + courseCode);
System.out.println("Requested major: " + majorCode);
Course course = programme.getMajorFromCode(majorCode).getCourseFromCode(courseCode);
StringBuilder htmlBuilder = new StringBuilder();
htmlBuilder.append("<div class='w-full h-full'>")
Expand All @@ -95,7 +93,11 @@ public String registerresul(HttpServletRequest request) {
.asList(request.getParameterValues("course"))
.stream()
.map(code -> {
return this.programme.getMajor(major).getCourseFromCode(code).getName();
return this
.programme
.getMajor(major)
.getCourseFromCode(code)
.getName();
})
.collect(Collectors.toList());

Expand Down
2 changes: 1 addition & 1 deletion Lab3/src/main/webapp/WEB-INF/views/GetInfo.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
<a href="${pageContext.request.contextPath}/personalinfo" class="block mt-4">
<button class="w-full bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
Back
</button>d:\Lecture\Web Application Development\Lab\Lab2\form\index.html d:\Lecture\Web Application Development\Lab\Lab2\form\detail.json
</button>
</a>
</div>
</div>
Expand Down
27 changes: 9 additions & 18 deletions Lab3/src/main/webapp/WEB-INF/views/RegisterForm.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -52,24 +52,15 @@ import="lab3.models.Course"%>
/>
</div>
<div class="flex items-center w-full p-[10px] rounded-[5px]">
<label for="gender" class="mb-2 mr-4">Gender:</label>
<div class="flex items-center justify-between w-full">
<input
type="radio"
id="male"
name="gender"
class="mr-1"
required
/>
<span class="font-[18px]">Male</span>
<input
type="radio"
id="female"
name="gender"
class="mr-1"
required
/>
<span class="font-[18px]">Female</span>
<div class="w-full flex justify-around">
<div>
<input type="radio" id="male" name="gender" value="false" required>
<label for="male">Male</label>
</div>
<div>
<input type="radio" id="female" name="gender" value="true" required>
<label for="female">Female</label>
</div>
</div>
</div>
<div class="flex flex-col w-full p-[10px] rounded-[5px]">
Expand Down
5 changes: 5 additions & 0 deletions Lab4/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@
</properties>

<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
Expand Down
162 changes: 160 additions & 2 deletions Lab4/src/main/java/lab4/controllers/HomeController.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,30 @@
package lab4.controllers;
import java.io.IOException;
import java.io.PrintWriter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;

import jakarta.servlet.http.HttpServletResponse;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.security.spec.KeySpec;
import java.util.Base64;

@Controller
public class HomeController {
private static final int KEY_LENGTH = 256;
private static final int ITERATION_COUNT = 65536;
private String secretKey = "MySecretKey";
private String salt = "MySalt";

@GetMapping("/")
public String home() {
return "WEB-INF/views/emailList.jsp";
Expand All @@ -24,5 +41,146 @@ public String getThreeParams(HttpServletRequest request) {
return "forward:/WEB-INF/views/emailResult.jsp";
}

@GetMapping("/index")
public String gettingCookies() {
return "WEB-INF/views/index.jsp";
}

@PostMapping("/cookies")
public String doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// print out cookies
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
Cookie c = cookies[i];
String name = c.getName();
String value = c.getValue();
out.println(name + " = " + value);
} // set a cookie
String name = request.getParameter("name");
if (name != null && name.length() > 0) {
String value = request.getParameter("value");
Cookie c = new Cookie(name, value);
response.addCookie(c);
}
return "forward:/WEB-INF/views/cookieResult.jsp";
}

@GetMapping("/repeatedvisitor")
public String visited() {
return "WEB-INF/views/RepeatedVisitor.jsp";
}

@GetMapping("/ShowSession")
public String showSession() {
return "WEB-INF/views/showSession.jsp";
}

@GetMapping("/signin")
public String login(HttpServletRequest request) throws Exception {
Cookie[] cookies = request.getCookies();
String username = "";
String password = "";
if (cookies != null) {
for (Cookie c : cookies) {
if ("username".equals(c.getName())) {
username = decrypt(c.getValue(), this.secretKey, this.salt);
} else if ("password".equals(c.getName())) {
password = decrypt(c.getValue(), this.secretKey, this.salt);
}
}
}
request.setAttribute("username", username);
request.setAttribute("password", password);
return "forward:/WEB-INF/views/SignIn.jsp";
}

@PostMapping("/signin")
public void login(HttpServletRequest request, HttpServletResponse response) throws Exception {
String username = request.getParameter("username");
String password = request.getParameter("password");
String remember = request.getParameter("remember");
if (remember != null) {
String u = encrypt(username, this.secretKey, this.salt);
String p = encrypt(password, this.secretKey, this.salt);
Cookie uCookie = new Cookie("username", u);
Cookie pCookie = new Cookie("password", p);
uCookie.setMaxAge(60 * 60 * 24 * 7);
pCookie.setMaxAge(60 * 60 * 24 * 7);
response.addCookie(uCookie);
response.addCookie(pCookie);
}

if ("admin".equals(username) && "admin".equals(password)) {
response.setContentType("text/html");
PrintWriter out = response.getWriter();

out.println("<html>");
out.println("<head><title>Login Successful</title></head>");
out.println("<body>");
out.println("<h1>Hello, " + username + "</h1>");
out.println("</body>");
out.println("</html>");
} else {
response.sendRedirect(request.getContextPath() + "/signin");
}
}

private static String encrypt(String strToEncrypt, String secretKey, String salt) {

try {

SecureRandom secureRandom = new SecureRandom();
byte[] iv = new byte[16];
secureRandom.nextBytes(iv);
IvParameterSpec ivspec = new IvParameterSpec(iv);

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), salt.getBytes(), ITERATION_COUNT, KEY_LENGTH);
SecretKey tmp = factory.generateSecret(spec);
SecretKeySpec secretKeySpec = new SecretKeySpec(tmp.getEncoded(), "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivspec);

byte[] cipherText = cipher.doFinal(strToEncrypt.getBytes("UTF-8"));
byte[] encryptedData = new byte[iv.length + cipherText.length];
System.arraycopy(iv, 0, encryptedData, 0, iv.length);
System.arraycopy(cipherText, 0, encryptedData, iv.length, cipherText.length);

return Base64.getEncoder().encodeToString(encryptedData);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

private static String decrypt(String strToDecrypt, String secretKey, String salt) {
try {
byte[] encryptedData = Base64.getDecoder().decode(strToDecrypt);
byte[] iv = new byte[16];
System.arraycopy(encryptedData, 0, iv, 0, iv.length);
IvParameterSpec ivspec = new IvParameterSpec(iv);

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), salt.getBytes(), ITERATION_COUNT, KEY_LENGTH);
SecretKey tmp = factory.generateSecret(spec);
SecretKeySpec secretKeySpec = new SecretKeySpec(tmp.getEncoded(), "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivspec);

byte[] cipherText = new byte[encryptedData.length - 16];
System.arraycopy(encryptedData, 16, cipherText, 0, cipherText.length);

byte[] decryptedText = cipher.doFinal(cipherText);
return new String(decryptedText, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

}
41 changes: 41 additions & 0 deletions Lab4/src/main/webapp/WEB-INF/views/RepeatedVisitor.jsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8" />
<title>Welcome aboard!</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>

<body class="flex flex-col justify-center items-center h-screen">
<%
int counter=0;
Cookie[] cookies=request.getCookies();
if (cookies !=null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("visitCount")) {
counter=Integer.parseInt(cookie.getValue());
break;
}
}
}
counter++;
Cookie cookie=new Cookie("visitCount", String.valueOf(counter));
response.addCookie(cookie);
%>
<h1 class="text-center font-bold text-5xl pt-5">
<%=counter==1?"⚓ Welcome aboard!":"⚓ Welcome back!" %>
</h1>
<div class="flex-grow flex justify-center items-center">
<div class="text-center">
<div class="text-[20rem]">⛵</div>
<p class="text-lg pt-5">
You have visited this website <%= counter+(counter==1?" time":" times")+"."%>
</p>
</div>
</div>
</body>

</html>
38 changes: 38 additions & 0 deletions Lab4/src/main/webapp/WEB-INF/views/SignIn.jsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Log in</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>

<body class="flex justify-center items-center h-screen">
<div class="w-full max-w-lg p-6 bg-white rounded-lg shadow-md">
<h2 class="text-2xl font-bold mb-4 text-black text-center">Log in</h2>
<form id="loginForm" action="" method="post" class="mt-4">
<div class="mb-4">
<label for="username" class="block font-bold">Username: </label>
<input type="text" id="username" name="username" required placeholder="username: admin" value="<%= request.getAttribute("username") %>"
class="w-full border border-gray-300 rounded-md py-2 px-3 focus:outline-none focus:border-green-500">
</div>
<div class="mb-4">
<label for="password" class="block font-bold">Password: </label>
<input type="password" id="password" name="password" required placeholder="password: admin"
value="<%= request.getAttribute("password") %>"
class="w-full border border-gray-300 rounded-md py-2 px-3 focus:outline-none focus:border-green-500">
</div>
<div>
<input type="checkbox" id="remember" name="remember" class="mr-2">
<label for="remember" class="text-sm">Remember me</label>
</div>
<div class="w-full flex justify-center">
<button type="submit"
class="bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 px-4 rounded-md transition-colors duration-300">
Log in
</button>
</div>
</form>
</div>
</body>
</html>
25 changes: 25 additions & 0 deletions Lab4/src/main/webapp/WEB-INF/views/Welcome.jsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Page</title>
</head>
<body>

<%
String name = request.getParameter("username");
if (name != null && !name.isEmpty()) {
%>
<h1>Hello, <%= name %></h1>
<%
} else {
%>
<h1>Hello, Stranger</h1>
<%
}
%>

</body>
</html>
Loading

0 comments on commit 07fa214

Please sign in to comment.