diff --git a/Authentication.java b/Authentication.java new file mode 100644 index 000000000..4263e3494 --- /dev/null +++ b/Authentication.java @@ -0,0 +1,40 @@ +import static org.junit.Assert.*; +import org.junit.Before; +import org.junit.Test; + +public class Authentication { + + private UserService userService; + + @Before + public void setup() { + userService = new UserService(); + userService.register("alice", "Secret123"); + } + + @Test + public void testSuccessfulAuthentication() { + assertTrue(userService.authenticate("alice", "Secret123")); + } + + @Test + public void testAuthenticationWithInvalidUsername() { + assertFalse(userService.authenticate("bob", "Secret123")); + } + + @Test + public void testAuthenticationWithWrongPassword() { + assertFalse(userService.authenticate("alice", "WrongPass")); + } + + @Test + public void testAuthenticationWithEmptyFields() { + assertFalse(userService.authenticate("", "")); + } + + @Test + public void testAuthenticationAfterRegistration() { + userService.register("newuser", "NewPass456"); + assertTrue(userService.authenticate("newuser", "NewPass456")); + } +} diff --git a/Junit_code_for_cmsc_355.mp4 b/Junit_code_for_cmsc_355.mp4 new file mode 100644 index 000000000..e78c78d73 Binary files /dev/null and b/Junit_code_for_cmsc_355.mp4 differ diff --git a/Login_Test_Cases.xlsx b/Login_Test_Cases.xlsx new file mode 100644 index 000000000..3e1460c21 Binary files /dev/null and b/Login_Test_Cases.xlsx differ diff --git a/README.md b/README.md index b2588bc51..d271c27d8 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ My groupmembers are: +- Hunter +- Griffin Ramsey +- Naimul Naim - XXXX - XXXX -- XXXX -- XXXX - ------------------ Fill in some information about your project under this ------------------ diff --git a/Sprint 2/PreDev4Recording.zip b/Sprint 2/PreDev4Recording.zip new file mode 100644 index 000000000..bc43aea89 Binary files /dev/null and b/Sprint 2/PreDev4Recording.zip differ diff --git a/Sprint 2/Test Case manual - Sheet1.pdf b/Sprint 2/Test Case manual - Sheet1.pdf new file mode 100644 index 000000000..21b52764e Binary files /dev/null and b/Sprint 2/Test Case manual - Sheet1.pdf differ diff --git a/Sprint 2/medication-monitor.zip b/Sprint 2/medication-monitor.zip new file mode 100644 index 000000000..45786964a Binary files /dev/null and b/Sprint 2/medication-monitor.zip differ diff --git a/Sprint 3/Test Case manual - Sheet1.pdf b/Sprint 3/Test Case manual - Sheet1.pdf new file mode 100644 index 000000000..34156b1f7 Binary files /dev/null and b/Sprint 3/Test Case manual - Sheet1.pdf differ diff --git a/Sprint 3/TestCasesPlaceholder.txt b/Sprint 3/TestCasesPlaceholder.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/Sprint 3/UML Class Diagrams.png b/Sprint 3/UML Class Diagrams.png new file mode 100644 index 000000000..a44d141ca Binary files /dev/null and b/Sprint 3/UML Class Diagrams.png differ diff --git a/Sprint 3/UMLDiagrams.txt b/Sprint 3/UMLDiagrams.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/Sprint 3/codePlaceHolder.txt b/Sprint 3/codePlaceHolder.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/Sprint 3/pom.xml b/Sprint 3/pom.xml new file mode 100644 index 000000000..74a4fa884 --- /dev/null +++ b/Sprint 3/pom.xml @@ -0,0 +1,69 @@ + + 4.0.0 + com.medmon + medication-monitor + 1.0-SNAPSHOT + war + + + 21 + 21 + UTF-8 + + + + + jakarta.servlet + jakarta.servlet-api + 5.0.0 + provided + + + com.google.code.gson + gson + 2.10.1 + + + + + + + org.eclipse.jetty + jetty-maven-plugin + 11.0.15 + + + / + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 3.1.0 + + + validate + + run + + + + + + + + + + + + + + + + + + diff --git a/Sprint 3/src/main/java/monitoring/Account.java b/Sprint 3/src/main/java/monitoring/Account.java new file mode 100644 index 000000000..6b194eab7 --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/Account.java @@ -0,0 +1,50 @@ +package monitoring; + +public class Account { + private String firstName; + private String lastName; + private String username; + private String email; + private String dob; + private String password; + private String userType; + + public Account(String firstName, String lastName, String username, String email, String dob, String password, String userType) { + this.firstName = firstName; + this.lastName = lastName; + this.username = username; + this.email = email; + this.dob = dob; + this.password = password; + this.userType = userType; + } + + public String getUsername() { + return username; + } + + public String getEmail() { + return email; + } + + public String getDob() { + return dob; + } + + public String getFullName() { + return firstName + " " + lastName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String newPass){ + this.password = newPass; + return; + } + + public String getUserType() { + return userType; + } +} diff --git a/Sprint 3/src/main/java/monitoring/Entry.java b/Sprint 3/src/main/java/monitoring/Entry.java new file mode 100644 index 000000000..06f9f222f --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/Entry.java @@ -0,0 +1,29 @@ +package monitoring; + +public class Entry { + private String username; + private String date; + private int carbs; + private int glucose; + private double insulinUnits; + + public String getUsername() { + return username; + } + + public String getDate() { + return date; + } + + public int getCarbs() { + return carbs; + } + + public int getGlucose() { + return glucose; + } + + public double getUnits() { + return insulinUnits; + } +} diff --git a/Sprint 3/src/main/java/monitoring/MealtimeEditor.java b/Sprint 3/src/main/java/monitoring/MealtimeEditor.java new file mode 100644 index 000000000..142ff7955 --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/MealtimeEditor.java @@ -0,0 +1,52 @@ +package monitoring; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.io.*; +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.Map; + +public class MealtimeEditor { + private static final String MEALTIME_FILE = "src/main/resources/mealtimes.json"; + private final Gson gson = new Gson(); + + // Loads the entire mealtime file as a Map>> + private Map>> loadMealtimes() { + try (Reader reader = new FileReader(MEALTIME_FILE)) { + Type type = new TypeToken>>>() {}.getType(); + Map>> mealtimes = gson.fromJson(reader, type); + return (mealtimes != null) ? mealtimes : new HashMap<>(); + } catch (IOException e) { + return new HashMap<>(); + } + } + + // Saves the full structure back to file + private void saveMealtimes(Map>> mealtimes) { + try (Writer writer = new FileWriter(MEALTIME_FILE)) { + gson.toJson(mealtimes, writer); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void updateMealtime(String username, String meal, String time, int carbToUnitRatio) { + Map>> mealtimes = loadMealtimes(); + mealtimes.putIfAbsent(username, new HashMap<>()); + Map> userMeals = mealtimes.get(username); + + Map mealData = new HashMap<>(); + mealData.put("time", time); + mealData.put("carbToUnitRatio", String.valueOf(carbToUnitRatio)); + userMeals.put(meal.toLowerCase(), mealData); + + saveMealtimes(mealtimes); + } + + public Map> getUserMeals(String username) { + Map>> mealtimes = loadMealtimes(); + return mealtimes.getOrDefault(username, new HashMap<>()); + } +} diff --git a/Sprint 3/src/main/java/monitoring/UserService.java b/Sprint 3/src/main/java/monitoring/UserService.java new file mode 100644 index 000000000..4283c5714 --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/UserService.java @@ -0,0 +1,159 @@ +package monitoring; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Reader; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +public class UserService { + private Map credentials = new HashMap<>(); + private Map userAccounts = new HashMap<>(); + private Map sessionStatus = new HashMap<>(); + private static final String FILE_PATH = "src/main/resources/accounts.json"; + private final Gson gson = new Gson(); + + public UserService() { + loadAccountsFromFile(); + } + + public boolean register(String username, String password, Account account) { + if (!credentials.containsKey(username)) { + credentials.put(username, password); + userAccounts.put(username, account); + sessionStatus.put(username, false); + saveAccountsToFile(); + return true; + } + return false; + } + + public void passwordUpdate(String username, String password){ + if(credentials.containsKey(username)){ + Account updated = userAccounts.get(username); + updated.setPassword(password); + credentials.remove(username); + userAccounts.remove(username); + sessionStatus.remove(username); + if(register(username, password, updated)){ + return; + } + } + return; + } + + public String getAccountData(String username, String data){ + Account user = userAccounts.get(username); + String accData = "error"; + if(data.equals("userType")){ + accData = user.getUserType(); + return accData; + } + if(data.equals("email")){ + accData = user.getEmail(); + return accData; + } + if(data.equals("birthday")){ + accData = user.getDob(); + return accData; + } + if(data.equals("name")){ + accData = user.getFullName(); + return accData; + } + return accData; + } + + public boolean login(String username, String password) { + return credentials.containsKey(username) && credentials.get(username).equals(password); + } + + public boolean isUserLoggedIn(String username) { + return sessionStatus.getOrDefault(username, false); + } + + public void logout(String username) { + sessionStatus.put(username, false); + } + + public String getAdherenceData(String username) { + if (isUserLoggedIn(username)) { + return "Adherence data for " + username; + } + return null; + } + + public String getRedirectPage(String username) { + if (isUserLoggedIn(username)) { + return "dashboard"; + } + return "login"; + } + + private void saveAccountsToFile() { + List accounts = new ArrayList<>(userAccounts.values()); + try (FileWriter writer = new FileWriter(FILE_PATH)) { + gson.toJson(accounts, writer); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void loadAccountsFromFile() { + File file = new File(FILE_PATH); + if (!file.exists()) return; + + try (Reader reader = new FileReader(file)) { + Type listType = new TypeToken>() {}.getType(); + List accounts = gson.fromJson(reader, listType); + if (accounts != null) { + for (Account account : accounts) { + String username = account.getUsername(); + credentials.put(username, account.getPassword()); + userAccounts.put(username, account); + sessionStatus.put(username, false); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + + private List loadAccounts() { + List accounts = new ArrayList<>(); + File file = new File("src/main/resources/accounts.json"); + + if (!file.exists()) { + return accounts; // return empty list if file doesn't exist + } + + try (Reader reader = new FileReader(file)) { + Gson gson = new Gson(); + Type accountListType = new TypeToken>() {}.getType(); + accounts = gson.fromJson(reader, accountListType); + } catch (IOException e) { + e.printStackTrace(); + } + + return accounts; + } + + public boolean authenticate(String username, String password) { + List accounts = loadAccounts(); + for (Account acc : accounts) { + if (acc.getUsername().equalsIgnoreCase(username) && acc.getPassword().equals(password)) { + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/Sprint 3/src/main/java/monitoring/servlet/AdminDataServlet.java b/Sprint 3/src/main/java/monitoring/servlet/AdminDataServlet.java new file mode 100644 index 000000000..ec2e43760 --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/servlet/AdminDataServlet.java @@ -0,0 +1,46 @@ +package monitoring.servlet; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import monitoring.Entry; + +import java.io.*; +import java.lang.reflect.Type; +import java.util.*; + +public class AdminDataServlet extends HttpServlet { + + private static final String ENTRIES_FILE = "src/main/resources/entries.json"; + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String username = (String) request.getSession().getAttribute("username"); + System.out.println("AdminDataServlet: " + username); + + if (username == null) { + request.getSession().invalidate(); + response.sendRedirect("login.jsp"); + return; + } + + List allEntries = loadEntries(); + request.setAttribute("entries", allEntries); + request.getRequestDispatcher("adminData.jsp").forward(request, response); + } + + private List loadEntries() { + try (Reader reader = new FileReader(ENTRIES_FILE)) { + Type listType = new TypeToken>() {}.getType(); + List entries = new Gson().fromJson(reader, listType); + return entries != null ? entries : new ArrayList<>(); + } catch (IOException e) { + e.printStackTrace(); + return new ArrayList<>(); + } + } +} diff --git a/Sprint 3/src/main/java/monitoring/servlet/DashboardServlet.java b/Sprint 3/src/main/java/monitoring/servlet/DashboardServlet.java new file mode 100644 index 000000000..18477fce7 --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/servlet/DashboardServlet.java @@ -0,0 +1,21 @@ +package monitoring.servlet; + +import jakarta.servlet.*; +import jakarta.servlet.http.*; +import java.io.IOException; + +public class DashboardServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + HttpSession session = request.getSession(false); + System.out.println("ping"); + if (session == null || session.getAttribute("username") == null) { + request.getSession().invalidate(); + response.sendRedirect("login.jsp"); + return; + } + + request.getRequestDispatcher("dashboard.jsp").forward(request, response); + } +} \ No newline at end of file diff --git a/Sprint 3/src/main/java/monitoring/servlet/EditMealtimeServlet.java b/Sprint 3/src/main/java/monitoring/servlet/EditMealtimeServlet.java new file mode 100644 index 000000000..4658377d9 --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/servlet/EditMealtimeServlet.java @@ -0,0 +1,90 @@ +package monitoring.servlet; + +import jakarta.servlet.*; +import jakarta.servlet.http.*; +import java.io.*; +import java.util.*; +import com.google.gson.*; +import com.google.gson.reflect.TypeToken; + +public class EditMealtimeServlet extends HttpServlet { + private final File file = new File("src/main/resources/mealtimes.json"); + private final Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + System.out.println("EditMealtimeServlet GET method reached."); + HttpSession session = request.getSession(false); + System.out.println("Session: " + session); + System.out.println("Username from session: " + (session != null ? session.getAttribute("username") : "null")); + if (session == null || session.getAttribute("username") == null) { + System.out.println("EditMealtimeServlet GET: Redirecting because session is " + session + " and username is " + (session != null ? session.getAttribute("username") : "null")); + response.sendRedirect("login.jsp"); + return; + } + + + String username = (String) session.getAttribute("username"); + + Map>> allData = loadMealtimes(); + Map> userMeals = allData.getOrDefault(username, new HashMap<>()); + request.setAttribute("mealtimes", userMeals); + + request.getRequestDispatcher("editMealtime.jsp").forward(request, response); + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + System.out.println("EditMealtimeServlet POST method reached."); + HttpSession session = request.getSession(false); + if (session == null || session.getAttribute("username") == null) { + System.out.println("EditMealtimeServlet GET: Redirecting because session is " + session + " and username is " + (session != null ? session.getAttribute("username") : "null")); + response.sendRedirect("login.jsp"); + return; + } + + String username = (String) session.getAttribute("username"); + + Map>> allData = loadMealtimes(); + Map> userMeals = new HashMap<>(); + + String ratioStr = request.getParameter("carbToUnitRatio"); + int ratio = 0; + try { + ratio = Integer.parseInt(ratioStr); + } catch (NumberFormatException ignored) {} + + for (String meal : Arrays.asList("breakfast", "lunch", "dinner")) { + String time = request.getParameter(meal + "Time"); + + Map mealData = new HashMap<>(); + mealData.put("time", time); + mealData.put("carbToUnitRatio", ratio); + userMeals.put(meal, mealData); + } + + allData.put(username, userMeals); + saveMealtimes(allData); + + response.sendRedirect("dashboard.jsp"); + } + + private Map>> loadMealtimes() { + if (!file.exists()) return new HashMap<>(); + + try (Reader reader = new FileReader(file)) { + return gson.fromJson(reader, new TypeToken>>>(){}.getType()); + } catch (IOException e) { + e.printStackTrace(); + return new HashMap<>(); + } + } + + private void saveMealtimes(Map>> data) { + try (Writer writer = new FileWriter(file)) { + gson.toJson(data, writer); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/Sprint 3/src/main/java/monitoring/servlet/ForgotPasswordServlet.java b/Sprint 3/src/main/java/monitoring/servlet/ForgotPasswordServlet.java new file mode 100644 index 000000000..e26eca617 --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/servlet/ForgotPasswordServlet.java @@ -0,0 +1,26 @@ +package monitoring.servlet; + +import jakarta.servlet.*; +import jakarta.servlet.http.*; +import java.io.IOException; +import monitoring.UserService; + +public class ForgotPasswordServlet extends HttpServlet { + private final UserService userService = new UserService(); + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + // Get new password from form + HttpSession sesh = request.getSession(false); + String password = request.getParameter("password"); + if(sesh!=null){ + userService.passwordUpdate((String) sesh.getAttribute("username"), password); + } + + request.getRequestDispatcher("forgotPassword.jsp").forward(request, response); + } + + + +} diff --git a/Sprint 3/src/main/java/monitoring/servlet/InputDataServlet.java b/Sprint 3/src/main/java/monitoring/servlet/InputDataServlet.java new file mode 100644 index 000000000..9f0d038d4 --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/servlet/InputDataServlet.java @@ -0,0 +1,66 @@ +package monitoring.servlet; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.*; + +import java.io.*; +import java.util.*; +import com.google.gson.reflect.TypeToken; +import com.google.gson.Gson; + +public class InputDataServlet extends HttpServlet { + + private static final String FILE_PATH = "src/main/resources/entries.json"; + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + HttpSession session = request.getSession(false); + if (session == null || session.getAttribute("username") == null) { + response.sendRedirect("login.jsp"); + return; + } + + // Forward to inputData.jsp + request.getRequestDispatcher("inputData.jsp").forward(request, response); + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + HttpSession session = request.getSession(false); + String username = (session != null) ? (String) session.getAttribute("username") : null; + + String date = request.getParameter("date"); + String glucose = request.getParameter("glucose"); + String carbs = request.getParameter("carbs"); + String units = request.getParameter("units"); + + Map newEntry = new HashMap<>(); + newEntry.put("username", username); + newEntry.put("date", date); + newEntry.put("glucose", glucose); + newEntry.put("carbs", carbs); + newEntry.put("units", units); + + Gson gson = new Gson(); + List> allEntries = new ArrayList<>(); + + File file = new File(FILE_PATH); + if (file.exists()) { + try (Reader reader = new FileReader(file)) { + allEntries = gson.fromJson(reader, new TypeToken>>() {}.getType()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + allEntries.add(newEntry); + + try (Writer writer = new FileWriter(FILE_PATH)) { + gson.toJson(allEntries, writer); + } + + response.sendRedirect("dashboard.jsp"); + } +} diff --git a/Sprint 3/src/main/java/monitoring/servlet/LoginServlet.java b/Sprint 3/src/main/java/monitoring/servlet/LoginServlet.java new file mode 100644 index 000000000..21dc39fb9 --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/servlet/LoginServlet.java @@ -0,0 +1,38 @@ +package monitoring.servlet; + +import jakarta.servlet.*; +import jakarta.servlet.http.*; +import java.io.IOException; +import monitoring.UserService; + +public class LoginServlet extends HttpServlet { + private final UserService userService = new UserService(); + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + // Get login credentials from form + String username = request.getParameter("username"); + String password = request.getParameter("password"); + String admin = "admin"; + + // Check against stored accounts + boolean success = userService.authenticate(username, password); + if (success) { + request.getSession().setAttribute("username", username); + request.getSession().setAttribute("userType", userService.getAccountData(username, "userType")); + if (admin.equals((String) request.getSession().getAttribute("userType"))) { + response.sendRedirect("adminData"); + } else { + response.sendRedirect("dashboard.jsp"); + } + + } else { + request.setAttribute("error", "Invalid username or password."); + request.getRequestDispatcher("login.jsp").forward(request, response); + } + } + + + +} diff --git a/Sprint 3/src/main/java/monitoring/servlet/RegisterServlet.java b/Sprint 3/src/main/java/monitoring/servlet/RegisterServlet.java new file mode 100644 index 000000000..afd9d658d --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/servlet/RegisterServlet.java @@ -0,0 +1,43 @@ +package monitoring.servlet; + +import java.io.IOException; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import monitoring.Account; +import monitoring.UserService; + +public class RegisterServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + String firstName = request.getParameter("firstName"); + String lastName = request.getParameter("lastName"); + String username = request.getParameter("username"); + String email = request.getParameter("email"); + String dob = request.getParameter("dob"); + String password = request.getParameter("password"); + String confirmPassword = request.getParameter("confirmPassword"); + + // Confirm passwords match + if (!password.equals(confirmPassword)) { + request.setAttribute("error", "Passwords do not match."); + request.getRequestDispatcher("register.jsp").forward(request, response); + return; + } + + // Continue to create and store the account + Account account = new Account(firstName, lastName, username, email, dob, password, "user"); + UserService service = new UserService(); + boolean success = service.register(username, password, account); + + if (success) { + response.sendRedirect("login.jsp"); + } else { + request.setAttribute("error", "Username already exists."); + request.getRequestDispatcher("register.jsp").forward(request, response); + } + } +} diff --git a/Sprint 3/src/main/java/monitoring/servlet/ViewDataServlet.java b/Sprint 3/src/main/java/monitoring/servlet/ViewDataServlet.java new file mode 100644 index 000000000..a973a2921 --- /dev/null +++ b/Sprint 3/src/main/java/monitoring/servlet/ViewDataServlet.java @@ -0,0 +1,50 @@ +package monitoring.servlet; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import monitoring.Entry; + +import java.io.*; +import java.lang.reflect.Type; +import java.util.*; +import java.util.stream.Collectors; + +public class ViewDataServlet extends HttpServlet { + + private static final String ENTRIES_FILE = "src/main/resources/entries.json"; + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String username = (String) request.getSession().getAttribute("username"); + System.out.println("ViewDataServlet - Username from session: " + username); + + if (username == null) { + request.getSession().invalidate(); + response.sendRedirect("login.jsp"); + return; + } + + List allEntries = loadEntries(); + List userEntries = allEntries.stream() + .filter(e -> e.getUsername() != null && e.getUsername().equals(username)) + .collect(Collectors.toList()); + request.setAttribute("entries", userEntries); + request.getRequestDispatcher("viewData.jsp").forward(request, response); + } + + private List loadEntries() { + try (Reader reader = new FileReader(ENTRIES_FILE)) { + Type listType = new TypeToken>() {}.getType(); + List entries = new Gson().fromJson(reader, listType); + return entries != null ? entries : new ArrayList<>(); + } catch (IOException e) { + e.printStackTrace(); + return new ArrayList<>(); + } + } +} diff --git a/Sprint 3/src/main/resources/accounts.json b/Sprint 3/src/main/resources/accounts.json new file mode 100644 index 000000000..4dde3c07c --- /dev/null +++ b/Sprint 3/src/main/resources/accounts.json @@ -0,0 +1 @@ +[{"firstName":"test","lastName":"one","username":"testone","email":"testone@example.com","dob":"03/15/2002","password":"test123!","userType":"user"},{"firstName":"astro","lastName":"astro","username":"astro","email":"hunterjmp@gmail.com","dob":"10/05/2003","password":"astro123","userType":"user"},{"firstName":"test","lastName":"test","username":"test","email":"test@example.com","dob":"03/15/2002","password":"test123!","userType":"user"},{"firstName":"admin","lastName":"admin","username":"admin","email":"admin@admin.admin","dob":"12/31/1969","password":"admin","userType":"admin"},{"firstName":"test","lastName":"two","username":"testtwo","email":"testtwo@example.com","dob":"10/05/2003","password":"test123!","userType":"user"}] \ No newline at end of file diff --git a/Sprint 3/src/main/resources/entries.json b/Sprint 3/src/main/resources/entries.json new file mode 100644 index 000000000..f41a17e93 --- /dev/null +++ b/Sprint 3/src/main/resources/entries.json @@ -0,0 +1 @@ +[{"date":"04/22/2025","glucose":"4","carbs":"4","units":"4","username":"testone"},{"date":"04/22/2025","glucose":"17","carbs":"14","units":"11","username":"testone"},{"date":"04/22/2025","glucose":"8","carbs":"17","units":"26","username":"testtwo"},{"date":"04/24/2025","glucose":"8","carbs":"15","units":"15","username":"test"}] \ No newline at end of file diff --git a/Sprint 3/src/main/resources/mealtimes.json b/Sprint 3/src/main/resources/mealtimes.json new file mode 100644 index 000000000..dd3884b69 --- /dev/null +++ b/Sprint 3/src/main/resources/mealtimes.json @@ -0,0 +1,44 @@ +{ + "testone": { + "lunch": { + "carbToUnitRatio": 0.0, + "time": "12:15 PM" + }, + "breakfast": { + "carbToUnitRatio": 0.0, + "time": "7:30 AM" + }, + "dinner": { + "carbToUnitRatio": 0.0, + "time": "7:00 PM" + } + }, + "testtwo": { + "lunch": { + "carbToUnitRatio": 0.0, + "time": "12:15 PM" + }, + "breakfast": { + "carbToUnitRatio": 0.0, + "time": "8:15 AM" + }, + "dinner": { + "carbToUnitRatio": 0.0, + "time": "7:00 PM" + } + }, + "test": { + "lunch": { + "carbToUnitRatio": 0, + "time": "12:00 PM" + }, + "breakfast": { + "carbToUnitRatio": 0, + "time": "8:00 AM" + }, + "dinner": { + "carbToUnitRatio": 0, + "time": "6:00 PM" + } + } +} \ No newline at end of file diff --git a/Sprint 3/src/main/webapp/WEB-INF/web.xml b/Sprint 3/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 000000000..2f5d6ffaa --- /dev/null +++ b/Sprint 3/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,79 @@ + + + + LoginServlet + monitoring.servlet.LoginServlet + + + LoginServlet + /login + + + + ForgotPasswordServlet + monitoring.servlet.ForgotPasswordServlet + + + ForgotPasswordServlet + /forgotPassword + + + + RegisterServlet + monitoring.servlet.RegisterServlet + + + RegisterServlet + /register + + + + DashboardServlet + monitoring.servlet.DashboardServlet + + + DashboardServlet + /dashboard + + + + AdminDataServlet + monitoring.servlet.AdminDataServlet + + + AdminDataServlet + /adminData + + + + ViewDataServlet + monitoring.servlet.ViewDataServlet + + + ViewDataServlet + /viewData + + + + EditMealtimeServlet + monitoring.servlet.EditMealtimeServlet + + + EditMealtimeServlet + /editMealtime + + + + InputDataServlet + monitoring.servlet.InputDataServlet + + + InputDataServlet + /inputData + + + diff --git a/Sprint 3/src/main/webapp/adminData.jsp b/Sprint 3/src/main/webapp/adminData.jsp new file mode 100644 index 000000000..c6571171a --- /dev/null +++ b/Sprint 3/src/main/webapp/adminData.jsp @@ -0,0 +1,118 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ page import="java.util.List" %> +<%@ page import="monitoring.Entry" %> +<%@ page import="jakarta.servlet.http.HttpSession" %> +<% + HttpSession currentSession = request.getSession(false); + String username = (currentSession != null) ? (String) currentSession.getAttribute("username") : null; + List entries = (List) request.getAttribute("entries"); + + if (username == null) { + currentSession.invalidate(); + response.sendRedirect("login.jsp"); + return; + } +%> + + + + GlucoTracker - View Data + + + + GlucoTracker - Your Health Data + + + + Username + Date + Carbs (g) + Glucose (mg/dL) + Insulin Units + + <% + if (entries != null && !entries.isEmpty()) { + for (Entry entry : entries) { + %> + + <%= entry.getUsername() %> + <%= entry.getDate() %> + <%= entry.getCarbs() %> + <%= entry.getGlucose() %> + <%= entry.getUnits() %> + + <% + } + } else { + %> + + No data available. + + <% } %> + + + + Log Out + + + + + diff --git a/Sprint 3/src/main/webapp/dashboard.jsp b/Sprint 3/src/main/webapp/dashboard.jsp new file mode 100644 index 000000000..5193543b3 --- /dev/null +++ b/Sprint 3/src/main/webapp/dashboard.jsp @@ -0,0 +1,77 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + GlucoTracker - User Dashboard + + + + Welcome to Your GlucoTracker Dashboard + + + + View Health Data + + + Edit Mealtimes & Carb Ratio + + + Input Carb & Glucose Levels + + + Change Password + + + Logout + + + + + + diff --git a/Sprint 3/src/main/webapp/editMealtime.jsp b/Sprint 3/src/main/webapp/editMealtime.jsp new file mode 100644 index 000000000..f8114e7b6 --- /dev/null +++ b/Sprint 3/src/main/webapp/editMealtime.jsp @@ -0,0 +1,105 @@ +<%@ page import="java.util.Map" %> +<%@ page import="jakarta.servlet.http.HttpSession" %> +<% + HttpSession currentSession = request.getSession(false); + if (currentSession == null || currentSession.getAttribute("username") == null) { + response.sendRedirect("login.jsp"); + return; + } + + Map> mealtimes = (Map>) request.getAttribute("mealtimes"); +%> + + + + GlucoTracker - Edit Mealtimes + + + +GlucoTracker - Edit Mealtimes + + + <% + String[] meals = {"breakfast", "lunch", "dinner"}; + for (String meal : meals) { + Map mealData = mealtimes != null ? mealtimes.get(meal) : null; + String time = mealData != null ? (String) mealData.get("time") : ""; + %> + <%= meal.substring(0, 1).toUpperCase() + meal.substring(1) %> Time: + + <% } %> + + Carb-to-Unit Ratio: + <% + String ratio = ""; + if (mealtimes != null && mealtimes.containsKey("breakfast")) { + Object r = mealtimes.get("breakfast").get("carbToUnitRatio"); + ratio = r != null ? String.valueOf(r) : ""; + } + %> + + + + + +← Back to Dashboard + + + + diff --git a/Sprint 3/src/main/webapp/forgotPassword.jsp b/Sprint 3/src/main/webapp/forgotPassword.jsp new file mode 100644 index 000000000..1d9979bce --- /dev/null +++ b/Sprint 3/src/main/webapp/forgotPassword.jsp @@ -0,0 +1,85 @@ +<%@ page import="java.util.Map" %> +<%@ page import="jakarta.servlet.http.HttpSession" %> +<% + HttpSession currentSession = request.getSession(false); + if (currentSession == null || currentSession.getAttribute("username") == null) { + response.sendRedirect("login.jsp"); + return; + } + + Map> mealtimes = (Map>) request.getAttribute("mealtimes"); +%> + + + + GlucoTracker - Edit Mealtimes + + + +GlucoTracker - Edit Password + + + Password: + + +← Back to Dashboard + + + + diff --git a/Sprint 3/src/main/webapp/inputData.jsp b/Sprint 3/src/main/webapp/inputData.jsp new file mode 100644 index 000000000..72c19c15b --- /dev/null +++ b/Sprint 3/src/main/webapp/inputData.jsp @@ -0,0 +1,83 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Input Carb & Glucose Data + + + + + GlucoTracker Data Input + Input Daily Data + + Date (MM/DD/YYYY): + + + Glucose Level: + + + Carbs Consumed: + + + Insulin Units Taken: + + + + + + Back to Dashboard + + diff --git a/Sprint 3/src/main/webapp/login.jsp b/Sprint 3/src/main/webapp/login.jsp new file mode 100644 index 000000000..cacba5ca6 --- /dev/null +++ b/Sprint 3/src/main/webapp/login.jsp @@ -0,0 +1,73 @@ + +GlucoTracker - Login + + + + + +Login + + Username: + Password: + + +Create an account + + + + + \ No newline at end of file diff --git a/Sprint 3/src/main/webapp/register.jsp b/Sprint 3/src/main/webapp/register.jsp new file mode 100644 index 000000000..508fa2dea --- /dev/null +++ b/Sprint 3/src/main/webapp/register.jsp @@ -0,0 +1,80 @@ + +GlucoTracker - Register + + + +Create Account +<% String error = (String) request.getAttribute("error"); + if (error != null) { %> + <%= error %> +<% } %> + + First Name: + Last Name: + Username: + Email: + DOB: + Password: + Confirm Password: + + +Already have an account? Login + + + + + \ No newline at end of file diff --git a/Sprint 3/src/main/webapp/viewData.jsp b/Sprint 3/src/main/webapp/viewData.jsp new file mode 100644 index 000000000..1a45e5bbd --- /dev/null +++ b/Sprint 3/src/main/webapp/viewData.jsp @@ -0,0 +1,118 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ page import="java.util.List" %> +<%@ page import="monitoring.Entry" %> +<%@ page import="jakarta.servlet.http.HttpSession" %> +<% + HttpSession currentSession = request.getSession(false); + String username = (currentSession != null) ? (String) currentSession.getAttribute("username") : null; + List entries = (List) request.getAttribute("entries"); + + if (username == null) { + currentSession.invalidate(); + response.sendRedirect("login.jsp"); + return; + } +%> + + + + GlucoTracker - View Data + + + + GlucoTracker - Your Health Data + + + + Date + Carbs (g) + Glucose (mg/dL) + Insulin Units + + <% + if (entries != null && !entries.isEmpty()) { + for (Entry entry : entries) { + if (username.equals(entry.getUsername())) { + %> + + <%= entry.getDate() %> + <%= entry.getCarbs() %> + <%= entry.getGlucose() %> + <%= entry.getUnits() %> + + <% + } + } + } else { + %> + + No data available. + + <% } %> + + + + Back to Dashboard + + + + + diff --git a/Sprint 3/target/antrun/build-main.xml b/Sprint 3/target/antrun/build-main.xml new file mode 100644 index 000000000..246f5f3fd --- /dev/null +++ b/Sprint 3/target/antrun/build-main.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Sprint 3/target/classes/accounts.json b/Sprint 3/target/classes/accounts.json new file mode 100644 index 000000000..4dde3c07c --- /dev/null +++ b/Sprint 3/target/classes/accounts.json @@ -0,0 +1 @@ +[{"firstName":"test","lastName":"one","username":"testone","email":"testone@example.com","dob":"03/15/2002","password":"test123!","userType":"user"},{"firstName":"astro","lastName":"astro","username":"astro","email":"hunterjmp@gmail.com","dob":"10/05/2003","password":"astro123","userType":"user"},{"firstName":"test","lastName":"test","username":"test","email":"test@example.com","dob":"03/15/2002","password":"test123!","userType":"user"},{"firstName":"admin","lastName":"admin","username":"admin","email":"admin@admin.admin","dob":"12/31/1969","password":"admin","userType":"admin"},{"firstName":"test","lastName":"two","username":"testtwo","email":"testtwo@example.com","dob":"10/05/2003","password":"test123!","userType":"user"}] \ No newline at end of file diff --git a/Sprint 3/target/classes/entries.json b/Sprint 3/target/classes/entries.json new file mode 100644 index 000000000..f41a17e93 --- /dev/null +++ b/Sprint 3/target/classes/entries.json @@ -0,0 +1 @@ +[{"date":"04/22/2025","glucose":"4","carbs":"4","units":"4","username":"testone"},{"date":"04/22/2025","glucose":"17","carbs":"14","units":"11","username":"testone"},{"date":"04/22/2025","glucose":"8","carbs":"17","units":"26","username":"testtwo"},{"date":"04/24/2025","glucose":"8","carbs":"15","units":"15","username":"test"}] \ No newline at end of file diff --git a/Sprint 3/target/classes/mealtimes.json b/Sprint 3/target/classes/mealtimes.json new file mode 100644 index 000000000..dd3884b69 --- /dev/null +++ b/Sprint 3/target/classes/mealtimes.json @@ -0,0 +1,44 @@ +{ + "testone": { + "lunch": { + "carbToUnitRatio": 0.0, + "time": "12:15 PM" + }, + "breakfast": { + "carbToUnitRatio": 0.0, + "time": "7:30 AM" + }, + "dinner": { + "carbToUnitRatio": 0.0, + "time": "7:00 PM" + } + }, + "testtwo": { + "lunch": { + "carbToUnitRatio": 0.0, + "time": "12:15 PM" + }, + "breakfast": { + "carbToUnitRatio": 0.0, + "time": "8:15 AM" + }, + "dinner": { + "carbToUnitRatio": 0.0, + "time": "7:00 PM" + } + }, + "test": { + "lunch": { + "carbToUnitRatio": 0, + "time": "12:00 PM" + }, + "breakfast": { + "carbToUnitRatio": 0, + "time": "8:00 AM" + }, + "dinner": { + "carbToUnitRatio": 0, + "time": "6:00 PM" + } + } +} \ No newline at end of file diff --git a/Sprint 3/target/classes/monitoring/Account.class b/Sprint 3/target/classes/monitoring/Account.class new file mode 100644 index 000000000..a2bfa39fb Binary files /dev/null and b/Sprint 3/target/classes/monitoring/Account.class differ diff --git a/Sprint 3/target/classes/monitoring/Entry.class b/Sprint 3/target/classes/monitoring/Entry.class new file mode 100644 index 000000000..72440e198 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/Entry.class differ diff --git a/Sprint 3/target/classes/monitoring/MealtimeEditor$1.class b/Sprint 3/target/classes/monitoring/MealtimeEditor$1.class new file mode 100644 index 000000000..3fd170a6e Binary files /dev/null and b/Sprint 3/target/classes/monitoring/MealtimeEditor$1.class differ diff --git a/Sprint 3/target/classes/monitoring/MealtimeEditor.class b/Sprint 3/target/classes/monitoring/MealtimeEditor.class new file mode 100644 index 000000000..0c4e92354 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/MealtimeEditor.class differ diff --git a/Sprint 3/target/classes/monitoring/UserService$1.class b/Sprint 3/target/classes/monitoring/UserService$1.class new file mode 100644 index 000000000..763eac4f7 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/UserService$1.class differ diff --git a/Sprint 3/target/classes/monitoring/UserService$2.class b/Sprint 3/target/classes/monitoring/UserService$2.class new file mode 100644 index 000000000..ef6d8be85 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/UserService$2.class differ diff --git a/Sprint 3/target/classes/monitoring/UserService.class b/Sprint 3/target/classes/monitoring/UserService.class new file mode 100644 index 000000000..86f5afcf9 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/UserService.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/AdminDataServlet$1.class b/Sprint 3/target/classes/monitoring/servlet/AdminDataServlet$1.class new file mode 100644 index 000000000..e8d2a42d8 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/AdminDataServlet$1.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/AdminDataServlet.class b/Sprint 3/target/classes/monitoring/servlet/AdminDataServlet.class new file mode 100644 index 000000000..2f2285f34 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/AdminDataServlet.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/DashboardServlet.class b/Sprint 3/target/classes/monitoring/servlet/DashboardServlet.class new file mode 100644 index 000000000..7e2310b26 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/DashboardServlet.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/EditMealtimeServlet$1.class b/Sprint 3/target/classes/monitoring/servlet/EditMealtimeServlet$1.class new file mode 100644 index 000000000..944053b88 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/EditMealtimeServlet$1.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/EditMealtimeServlet.class b/Sprint 3/target/classes/monitoring/servlet/EditMealtimeServlet.class new file mode 100644 index 000000000..a4e9a95a3 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/EditMealtimeServlet.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/ForgotPasswordServlet.class b/Sprint 3/target/classes/monitoring/servlet/ForgotPasswordServlet.class new file mode 100644 index 000000000..7ccf22d89 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/ForgotPasswordServlet.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/InputDataServlet$1.class b/Sprint 3/target/classes/monitoring/servlet/InputDataServlet$1.class new file mode 100644 index 000000000..746618ade Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/InputDataServlet$1.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/InputDataServlet.class b/Sprint 3/target/classes/monitoring/servlet/InputDataServlet.class new file mode 100644 index 000000000..1dc03639c Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/InputDataServlet.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/LoginServlet.class b/Sprint 3/target/classes/monitoring/servlet/LoginServlet.class new file mode 100644 index 000000000..238c6764b Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/LoginServlet.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/RegisterServlet.class b/Sprint 3/target/classes/monitoring/servlet/RegisterServlet.class new file mode 100644 index 000000000..61879e001 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/RegisterServlet.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/ViewDataServlet$1.class b/Sprint 3/target/classes/monitoring/servlet/ViewDataServlet$1.class new file mode 100644 index 000000000..6b25d9b53 Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/ViewDataServlet$1.class differ diff --git a/Sprint 3/target/classes/monitoring/servlet/ViewDataServlet.class b/Sprint 3/target/classes/monitoring/servlet/ViewDataServlet.class new file mode 100644 index 000000000..8c8fe204f Binary files /dev/null and b/Sprint 3/target/classes/monitoring/servlet/ViewDataServlet.class differ diff --git a/Sprint 3/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/Sprint 3/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 000000000..9f10ce451 --- /dev/null +++ b/Sprint 3/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,19 @@ +monitoring\servlet\EditMealtimeServlet$1.class +monitoring\UserService.class +monitoring\servlet\LoginServlet.class +monitoring\Account.class +monitoring\servlet\RegisterServlet.class +monitoring\servlet\ViewDataServlet.class +monitoring\servlet\AdminDataServlet$1.class +monitoring\servlet\AdminDataServlet.class +monitoring\servlet\DashboardServlet.class +monitoring\MealtimeEditor.class +monitoring\UserService$2.class +monitoring\MealtimeEditor$1.class +monitoring\servlet\EditMealtimeServlet.class +monitoring\UserService$1.class +monitoring\servlet\ViewDataServlet$1.class +monitoring\Entry.class +monitoring\servlet\InputDataServlet$1.class +monitoring\servlet\ForgotPasswordServlet.class +monitoring\servlet\InputDataServlet.class diff --git a/Sprint 3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/Sprint 3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 000000000..0d19ba7a3 --- /dev/null +++ b/Sprint 3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,12 @@ +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\Account.java +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\Entry.java +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\MealtimeEditor.java +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\servlet\AdminDataServlet.java +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\servlet\DashboardServlet.java +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\servlet\EditMealtimeServlet.java +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\servlet\ForgotPasswordServlet.java +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\servlet\InputDataServlet.java +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\servlet\LoginServlet.java +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\servlet\RegisterServlet.java +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\servlet\ViewDataServlet.java +C:\Users\hunter\Documents\AssignmentRepoDemo\Sprint 3\src\main\java\monitoring\UserService.java diff --git a/Sprint 3/videoPlaceholder.txt b/Sprint 3/videoPlaceholder.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/UserService.java b/UserService.java new file mode 100644 index 000000000..bcf7a16c9 --- /dev/null +++ b/UserService.java @@ -0,0 +1,42 @@ +import java.util.HashMap; +import java.util.Map; + +public class UserService { + + private Map userDatabase = new HashMap<>(); + private Map activeSessions = new HashMap<>(); + + public void register(String username, String password) { + userDatabase.put(username, password); + activeSessions.put(username, false); + } + + public boolean login(String username, String password) { + if (username == null || password == null || username.isEmpty() || password.isEmpty()) + return false; + if (!userDatabase.containsKey(username)) return false; + if (activeSessions.getOrDefault(username, false)) return false; + if (!userDatabase.get(username).equals(password)) return false; + activeSessions.put(username, true); + return true; + } + + public boolean isUserLoggedIn(String username) { + return activeSessions.getOrDefault(username, false); + } + + public String getAdherenceData(String username) { + if (isUserLoggedIn(username)) return "AdherenceData"; + return null; + } + + public String getRedirectPage(String username) { + return isUserLoggedIn(username) ? "dashboard" : "login"; + } + + public boolean authenticate(String username, String password) { + return username.equals("alice") && password.equals("Secret123"); + } + + + } \ No newline at end of file diff --git a/login.java b/login.java new file mode 100644 index 000000000..265b11c26 --- /dev/null +++ b/login.java @@ -0,0 +1,60 @@ +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; +import org.junit.validator.PublicClassValidator; + +public class login { + + private UserService userService; + + @Before + public void setup() { + userService = new UserService(); + userService.register("johndoe", "Password123"); + } + + @Test + public void testSuccessfulLogin() { + assertTrue(userService.login("johndoe", "Password123")); + } + + @Test + public void testLoginWithInvalidUsername() { + assertFalse(userService.login("notexist", "Password123")); + } + + @Test + public void testLoginWithIncorrectPassword() { + assertFalse(userService.login("johndoe", "WrongPassword")); + } + + @Test + public void testLoginWithEmptyFields() { + assertFalse(userService.login("", "")); + } + + @Test + public void testLoginAlreadyLoggedInSession() { + assertTrue(userService.login("johndoe", "Password123")); + assertTrue(userService.isUserLoggedIn("johndoe")); + assertFalse(userService.login("johndoe", "Password123")); + } + + @Test + public void testRetrieveAdherenceDataAfterLogin() { + assertTrue(userService.login("johndoe", "Password123")); + String data = userService.getAdherenceData("johndoe"); + assertNotNull(data); + } + + @Test + public void testLoginRedirectsToCorrectPage() { + assertTrue(userService.login("johndoe", "Password123")); + String page = userService.getRedirectPage("johndoe"); + assertEquals("dashboard", page); + } +} \ No newline at end of file
<%= error %>