Skip to content
Original file line number Diff line number Diff line change
@@ -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<List<User>> getAllUsers() {

// API Endpoint to get the LoggedIn User Details using Token received in the Request Header.
List<User> users = adminService.getAllUsers();
return ResponseEntity.ok(users);

}

@DeleteMapping("/delete-user/{email}")
public ResponseEntity<String> 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.");
}
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -17,18 +18,19 @@
public class GeneralController {

@GetMapping("/")
public Map<String, String> getServerStatus() {

// Get the current date and time in UTC
public ResponseEntity<Map<String, Object>> 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<String, String> response = new HashMap<>();
response.put("status", "SERVER and Systems are Up & Running.");
response.put("dateTime", formattedDateTime);
Map<String, Object> data = new HashMap<>();
data.put("status", "SERVER and Systems are Up & Running.");
data.put("dateTime", formattedDateTime);

Map<String, Object> response = new HashMap<>();
response.put("data", data);

return response;
return ResponseEntity.ok(response);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<User> 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.");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,7 @@
public interface UserRepository extends JpaRepository <User, Long> {
Optional<User> findByEmail(String email);

@Override
void deleteById(Long id);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.alwinsimon.UserManagementJavaSpringBoot.Service;

import com.alwinsimon.UserManagementJavaSpringBoot.Model.User;
import java.util.List;

public interface AdminService {

List<User> getAllUsers();

void deleteUserByEmail(String email);

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,73 +3,11 @@
import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.AuthenticationRequest;
import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.AuthenticationResponse;
import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.RegisterRequest;
import com.alwinsimon.UserManagementJavaSpringBoot.Model.Role;
import com.alwinsimon.UserManagementJavaSpringBoot.Model.User;
import com.alwinsimon.UserManagementJavaSpringBoot.Repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class AuthenticationService {
public interface AuthenticationService {

private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final JwtService jwtService;
private final AuthenticationManager authenticationManager;
AuthenticationResponse register(RegisterRequest request);

public AuthenticationResponse register(RegisterRequest request) {
AuthenticationResponse authenticate(AuthenticationRequest request);

// Build a user using builder in user model.
var user = User.builder()
.name(request.getName())
.gender(request.getGender())
.email(request.getEmail())
.password(passwordEncoder.encode(request.getPassword()))
.role(Role.USER)
.build();

// Save User to DB using UserRepository
userRepository.save(user);

// Generate a JWT Token to return along with Response.
var jwtToken = jwtService.generateJwtToken(user);

return AuthenticationResponse.builder()
.token(jwtToken)
.build();

}

public AuthenticationResponse authenticate(AuthenticationRequest request) {

// Try Authenticating user with Authentication Manager
authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(
request.getEmail(),
request.getPassword()
)
);

/**
* If the authentication manager authenticated user without throwing any exception
* Find user and generate auth token
* Send auth token back to user.
*/

var user = userRepository.findByEmail(request.getEmail())
.orElseThrow(() -> new UsernameNotFoundException("User not found."));

// Generate a JWT Token to return along with Response.
var jwtToken = jwtService.generateJwtToken(user);

return AuthenticationResponse.builder()
.token(jwtToken)
.build();

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.alwinsimon.UserManagementJavaSpringBoot.Service.Implementation;

import com.alwinsimon.UserManagementJavaSpringBoot.Model.User;
import com.alwinsimon.UserManagementJavaSpringBoot.Repository.UserRepository;
import com.alwinsimon.UserManagementJavaSpringBoot.Service.AdminService;
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 AdminServiceImplementation implements AdminService {

private final UserRepository userRepository;


public List<User> getAllUsers() {

// Fetch and Returns All users from DB
return userRepository.findAll();

}

public void deleteUserByEmail(String email) {

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);

}

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.alwinsimon.UserManagementJavaSpringBoot.Service.Implementation;

import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.AuthenticationRequest;
import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.AuthenticationResponse;
import com.alwinsimon.UserManagementJavaSpringBoot.Config.Auth.RegisterRequest;
import com.alwinsimon.UserManagementJavaSpringBoot.Model.Role;
import com.alwinsimon.UserManagementJavaSpringBoot.Model.User;
import com.alwinsimon.UserManagementJavaSpringBoot.Repository.UserRepository;
import com.alwinsimon.UserManagementJavaSpringBoot.Service.AuthenticationService;
import lombok.RequiredArgsConstructor;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class AuthenticationServiceImplementation implements AuthenticationService {

private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final JwtServiceImplementation jwtService;
private final AuthenticationManager authenticationManager;

public AuthenticationResponse register(RegisterRequest request) {

// Build a user using builder in user model.
var user = User.builder()
.name(request.getName())
.gender(request.getGender())
.email(request.getEmail())
.password(passwordEncoder.encode(request.getPassword()))
.role(Role.USER)
.build();

// Save User to DB using UserRepository
userRepository.save(user);

// Generate a JWT Token to return along with Response.
var jwtToken = jwtService.generateJwtToken(user);

return AuthenticationResponse.builder()
.token(jwtToken)
.build();

}

public AuthenticationResponse authenticate(AuthenticationRequest request) {

// Try Authenticating user with Authentication Manager
authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(
request.getEmail(),
request.getPassword()
)
);

/**
* If the authentication manager authenticated user without throwing any exception
* Find user and generate auth token
* Send auth token back to user.
*/

var user = userRepository.findByEmail(request.getEmail())
.orElseThrow(() -> new UsernameNotFoundException("User not found."));

// Generate a JWT Token to return along with Response.
var jwtToken = jwtService.generateJwtToken(user);

return AuthenticationResponse.builder()
.token(jwtToken)
.build();

}
}
Loading