diff --git a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java index 16e714536be7ec8a818b4c351cde89da791ce06a..f6fb157f2391b6e0ecdaf7c7f02b5ea9b208bafc 100644 --- a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java +++ b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java @@ -134,4 +134,20 @@ public class UserController { return response; } + + @GetMapping("/profile") + public ResponseModel getProfile( + @CookieValue(value = "userId", required = false) String userId, + @CookieValue(value = "token", required = false) String token) { + ResponseModel response = new ResponseModel(); + + if (userId == null || token == null || !userService.checkLoginSession(userId, token)) { + response.setMessage("Login session expired or invalid"); + response.setStatus(HttpStatus.FORBIDDEN); + return response; + } + + response = userService.getProfile(userId); + return response; + } } diff --git a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/UserService.java b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/UserService.java index fe034308284e63c191b5606441185ae3d1f9219a..50032ddb4efc8eced728087bffa8caf98b7e658c 100644 --- a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/UserService.java +++ b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/UserService.java @@ -2,6 +2,7 @@ package vt.CS5934.SwitchRoom.services; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import net.bytebuddy.implementation.bytecode.Throw; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -15,7 +16,9 @@ import vt.CS5934.SwitchRoom.repositories.UserRepository; import javax.transaction.Transactional; import java.security.NoSuchAlgorithmException; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; @Service public class UserService { @@ -90,7 +93,7 @@ public class UserService { UserModel existUser = userRepository.findByUserId(Integer.parseInt(userId)); if (existUser == null) { - logger.error("checkLoginSession: FORBIDDEN (user not found)"); + logger.warn("checkLoginSession: FORBIDDEN (user not found)"); return false; } ObjectMapper mapper = new ObjectMapper(); @@ -113,4 +116,26 @@ public class UserService { } } + public ResponseModel getProfile(String userId) { + ResponseModel response = new ResponseModel(); + UserModel existUser = userRepository.findByUserId(Integer.parseInt(userId)); + + if (existUser == null) { + logger.warn("getProfile: FORBIDDEN (user not found)"); + response.setMessage("user not found"); + response.setStatus(HttpStatus.FORBIDDEN); + return response; + } + + Map<String, String> profile = new LinkedHashMap<>(); + profile.put("username", existUser.getUsername()); + profile.put("email", existUser.getEmail()); + profile.put("firstName", existUser.getFirstname()); + profile.put("lastName", existUser.getLastname()); + + response.setData(profile); + response.setStatus(HttpStatus.OK); + + return response; + } } diff --git a/FrontendFolder/switch-room/src/components/ProfilePage.vue b/FrontendFolder/switch-room/src/components/ProfilePage.vue index cc4fc1d91c0bb0d00b1c70d66aba573a86005c88..7bfbf2f5f45b6847637446a4a45a5e5ddbe8ce26 100644 --- a/FrontendFolder/switch-room/src/components/ProfilePage.vue +++ b/FrontendFolder/switch-room/src/components/ProfilePage.vue @@ -8,21 +8,25 @@ <div class="row clearfix"> <div class=""> <div class="form"> - <label for="user-oldPassword" style="padding-top: 13px"> - Username - </label> + <div class="profile-label"> + <div> Username</div> + <div>{{profile.username}} </div> + </div> <div class="form-border"></div> - <label for="user-newPassword" style="padding-top: 13px"> - Email - </label> + <div class="profile-label"> + <div> Email</div> + <div>{{profile.email}} </div> + </div> <div class="form-border"></div> - <label for="user-newPassword" style="padding-top: 13px"> - First Name - </label> + <div class="profile-label"> + <div> First Name</div> + <div>{{profile.firstName}} </div> + </div> <div class="form-border"></div> - <label for="user-newPassword" style="padding-top: 13px"> - Last Name - </label> + <div class="profile-label"> + <div> Last Name</div> + <div>{{profile.lastName}} </div> + </div> <div class="form-border"></div> <button id="submit-btn" @click.prevent="onClickResetPassword" type="submit" value="Submit"> Reset Password @@ -35,16 +39,30 @@ </template> <script setup lang="ts"> -import { ref, reactive } from "vue"; -import * as UserService from "../services/UserService"; +import { ref, reactive, onMounted } from "vue"; import { useRouter } from "vue-router"; -import { User } from "@/type/types"; +import {getProfile} from "../services/UserService"; const router = useRouter(); -const userInformation = reactive({ - oldPassword: "", - newPassword: "" +const profile = reactive({ + username: "", + email: "", + firstName: "", + lastName: "", }); - +onMounted(async () => { + await getProfile() + .then((response) => { + if (response.status == "OK") { + const data = response.data + profile.username = data["username"] + profile.email = data["email"] + profile.firstName = data["firstName"] + profile.lastName = data["lastName"] + } else { + alert(response.message) + } + }) +}) const onClickResetPassword = () => { router.push("/resetpassword"); }; @@ -100,6 +118,13 @@ body { width: 100%; } +.profile-label { + padding-top: 13px; + display: flex; + flex-direction: row; + justify-content: space-between; +} + #submit-btn { background: #2ec06f; border: none; diff --git a/FrontendFolder/switch-room/src/services/UserService.ts b/FrontendFolder/switch-room/src/services/UserService.ts index 5e10fac974268bb5040e00a1e16cb2d28fdce59b..77fed4b449d1a2805195905150257e14c38d5664 100644 --- a/FrontendFolder/switch-room/src/services/UserService.ts +++ b/FrontendFolder/switch-room/src/services/UserService.ts @@ -19,5 +19,15 @@ function resetPassword(userData: any) { const urlPath = "/resetPassword"; return serverHttpService.Post(baseUrl + urlPath, JSON.parse(userData)); } +function getProfile() { + const urlPath = "/profile"; + return serverHttpService.Get(baseUrl + urlPath); +} -export { postUserDataToServer, loginUser, checkLoginSession, resetPassword }; +export { + postUserDataToServer, + loginUser, + checkLoginSession, + resetPassword, + getProfile +};