From 79af1260cf5a0e26facdf32ef4df4e82ea191a9b Mon Sep 17 00:00:00 2001 From: "Dr. Alwin Simon" <003alwin@gmail.com> Date: Mon, 11 Dec 2023 08:58:04 +0530 Subject: [PATCH 1/5] Updated Token Expiration time to 24 Hours. --- .../UserManagementJavaSpringBoot/Service/JwtService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Service/JwtService.java b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Service/JwtService.java index 0869b7d..f1ccf07 100644 --- a/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Service/JwtService.java +++ b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Service/JwtService.java @@ -65,7 +65,7 @@ public String generateJwtToken(Map additionalClaims, UserDetails .setClaims(additionalClaims) .setSubject(userDetails.getUsername()) .setIssuedAt(new Date(System.currentTimeMillis())) - .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 24)) + .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24)) // 24 hours .signWith(getJwtSigningKey(), SignatureAlgorithm.HS256) .compact(); From 1ceb115134ae175e65a59502d16a9b529e22ebec Mon Sep 17 00:00:00 2001 From: "Dr. Alwin Simon" <003alwin@gmail.com> Date: Mon, 11 Dec 2023 10:55:32 +0530 Subject: [PATCH 2/5] Added exception handling. --- .../Controller/UserController.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/UserController.java b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/UserController.java index 1afbf03..437736b 100644 --- a/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/UserController.java +++ b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/UserController.java @@ -3,6 +3,8 @@ import com.alwinsimon.UserManagementJavaSpringBoot.Model.User; import com.alwinsimon.UserManagementJavaSpringBoot.Service.UserService; import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -17,10 +19,13 @@ public class UserController { private final UserService userService; @GetMapping("/current-user") - public User getCurrentUser() { - - // API Endpoint to get the LoggedIn User Details using Token received in the Request Header. - return userService.currentUserDetails(); - + public ResponseEntity getCurrentUser() throws Exception { + try { + // API Endpoint to get the LoggedIn User Details using Token received in the Request Header. + User user = userService.currentUserDetails(); + return ResponseEntity.ok(user); + } catch (Exception e) { + throw new UsernameNotFoundException("User not found."); + } } } From e2d7547f0a70cd7740ad4f17cf99e14e4ff88d04 Mon Sep 17 00:00:00 2001 From: "Dr. Alwin Simon" <003alwin@gmail.com> Date: Mon, 11 Dec 2023 10:59:48 +0530 Subject: [PATCH 3/5] Standardized response. --- .../Controller/GeneralController.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/GeneralController.java b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/GeneralController.java index bed525f..b7f8c63 100644 --- a/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/GeneralController.java +++ b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/GeneralController.java @@ -1,5 +1,6 @@ package com.alwinsimon.UserManagementJavaSpringBoot.Controller; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -17,18 +18,19 @@ public class GeneralController { @GetMapping("/") - public Map getServerStatus() { - - // Get the current date and time in UTC + public ResponseEntity> getServerStatus() { ZonedDateTime currentDateTimeUtc = ZonedDateTime.now(ZoneOffset.UTC); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy, hh:mm:ss a"); String formattedDateTime = currentDateTimeUtc.format(formatter); - // Create a Map for the response - Map response = new HashMap<>(); - response.put("status", "SERVER and Systems are Up & Running."); - response.put("dateTime", formattedDateTime); + Map data = new HashMap<>(); + data.put("status", "SERVER and Systems are Up & Running."); + data.put("dateTime", formattedDateTime); + + Map response = new HashMap<>(); + response.put("data", data); - return response; + return ResponseEntity.ok(response); } + } From 03cd341139cf51645ee76a4b7ecf4e9a764b19ce Mon Sep 17 00:00:00 2001 From: "Dr. Alwin Simon" <003alwin@gmail.com> Date: Mon, 11 Dec 2023 11:03:14 +0530 Subject: [PATCH 4/5] Overrided a JPA method to delete user by ID. --- .../Repository/UserRepository.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Repository/UserRepository.java b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Repository/UserRepository.java index 96f3e4b..fc24d37 100644 --- a/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Repository/UserRepository.java +++ b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Repository/UserRepository.java @@ -8,4 +8,7 @@ public interface UserRepository extends JpaRepository { Optional findByEmail(String email); + @Override + void deleteById(Long id); + } From 791da9bc9e6ee1f13e39cab29744ae0cb20bba77 Mon Sep 17 00:00:00 2001 From: "Dr. Alwin Simon" <003alwin@gmail.com> Date: Mon, 11 Dec 2023 11:07:42 +0530 Subject: [PATCH 5/5] Added Admin controller and Service. --- .../Controller/AdminController.java | 39 ++++++++++++++++++ .../Service/AdminService.java | 40 +++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/AdminController.java create mode 100644 src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Service/AdminService.java diff --git a/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/AdminController.java b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/AdminController.java new file mode 100644 index 0000000..5bfbb1b --- /dev/null +++ b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Controller/AdminController.java @@ -0,0 +1,39 @@ +package com.alwinsimon.UserManagementJavaSpringBoot.Controller; + +import com.alwinsimon.UserManagementJavaSpringBoot.Model.User; +import com.alwinsimon.UserManagementJavaSpringBoot.Service.AdminService; +import com.alwinsimon.UserManagementJavaSpringBoot.Service.UserService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/v1/admin") +@RequiredArgsConstructor +@CrossOrigin("*") +public class AdminController { + + private final AdminService adminService; + @GetMapping("/get-users") + public ResponseEntity> getAllUsers() { + + // API Endpoint to get the LoggedIn User Details using Token received in the Request Header. + List users = adminService.getAllUsers(); + return ResponseEntity.ok(users); + + } + + @DeleteMapping("/delete-user/{email}") + public ResponseEntity deleteUser(@PathVariable("email")String email){ + try { + adminService.deleteUserByEmail(email); + return ResponseEntity.ok("User deleted."); + }catch (Exception e){ + return ResponseEntity.status(HttpStatus.NOT_FOUND).body("User deletion Failed."); + } + } +} diff --git a/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Service/AdminService.java b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Service/AdminService.java new file mode 100644 index 0000000..b7372cd --- /dev/null +++ b/src/main/java/com/alwinsimon/UserManagementJavaSpringBoot/Service/AdminService.java @@ -0,0 +1,40 @@ +package com.alwinsimon.UserManagementJavaSpringBoot.Service; + +import com.alwinsimon.UserManagementJavaSpringBoot.Model.User; +import com.alwinsimon.UserManagementJavaSpringBoot.Repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class AdminService { + + private final UserRepository userRepository; + + + public List getAllUsers() { + return userRepository.findAll(); + } + + public void deleteUserByEmail(String email) throws Exception { + + User userToDelete = userRepository.findByEmail(email) + .orElseThrow(() -> new UsernameNotFoundException("User not found.")); + + try { + + userRepository.deleteById(userToDelete.getId()); + + } catch (EmptyResultDataAccessException e) { + + throw new UsernameNotFoundException("User Deletion FAILED.", e); + + } + + } + +}