Add user registration endpoint and HDFS directory creation

- Implemented a new registration endpoint in AuthController to handle user sign-ups.
- Integrated AuthenticationService to save the user and create a corresponding HDFS directory for the user upon registration.
- Updated User entity to return the username instead of email in getUsername method.
This commit is contained in:
K
2025-07-03 14:24:04 +05:30
parent 0661b2540f
commit f06dbd84ad
3 changed files with 32 additions and 4 deletions
@@ -2,15 +2,17 @@ package com.skycrate.backend.skycrateBackend.controller;
import com.skycrate.backend.skycrateBackend.dto.LoginRequest; import com.skycrate.backend.skycrateBackend.dto.LoginRequest;
import com.skycrate.backend.skycrateBackend.dto.LoginResponse; import com.skycrate.backend.skycrateBackend.dto.LoginResponse;
import com.skycrate.backend.skycrateBackend.dto.RegisterUserDto;
import com.skycrate.backend.skycrateBackend.dto.TokenRefreshRequest; import com.skycrate.backend.skycrateBackend.dto.TokenRefreshRequest;
import com.skycrate.backend.skycrateBackend.dto.TokenRefreshResponse; import com.skycrate.backend.skycrateBackend.dto.TokenRefreshResponse;
import com.skycrate.backend.skycrateBackend.entity.RefreshToken; import com.skycrate.backend.skycrateBackend.entity.RefreshToken;
import com.skycrate.backend.skycrateBackend.entity.User; import com.skycrate.backend.skycrateBackend.entity.User;
import com.skycrate.backend.skycrateBackend.repository.UserRepository; import com.skycrate.backend.skycrateBackend.repository.UserRepository;
import com.skycrate.backend.skycrateBackend.security.TokenBlacklistService; import com.skycrate.backend.skycrateBackend.security.TokenBlacklistService;
import com.skycrate.backend.skycrateBackend.services.AuthenticationService;
import com.skycrate.backend.skycrateBackend.services.JwtService; import com.skycrate.backend.skycrateBackend.services.JwtService;
import com.skycrate.backend.skycrateBackend.services.RefreshTokenService;
import com.skycrate.backend.skycrateBackend.services.RateLimiterService; import com.skycrate.backend.skycrateBackend.services.RateLimiterService;
import com.skycrate.backend.skycrateBackend.services.RefreshTokenService;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationManager;
@@ -27,6 +29,7 @@ public class AuthController {
private final RefreshTokenService refreshTokenService; private final RefreshTokenService refreshTokenService;
private final TokenBlacklistService tokenBlacklistService; private final TokenBlacklistService tokenBlacklistService;
private final RateLimiterService rateLimiterService; private final RateLimiterService rateLimiterService;
private final AuthenticationService authenticationService;
public AuthController( public AuthController(
AuthenticationManager authManager, AuthenticationManager authManager,
@@ -34,7 +37,8 @@ public class AuthController {
UserRepository userRepository, UserRepository userRepository,
RefreshTokenService refreshTokenService, RefreshTokenService refreshTokenService,
TokenBlacklistService tokenBlacklistService, TokenBlacklistService tokenBlacklistService,
RateLimiterService rateLimiterService RateLimiterService rateLimiterService,
AuthenticationService authenticationService
) { ) {
this.authManager = authManager; this.authManager = authManager;
this.jwtService = jwtService; this.jwtService = jwtService;
@@ -42,6 +46,14 @@ public class AuthController {
this.refreshTokenService = refreshTokenService; this.refreshTokenService = refreshTokenService;
this.tokenBlacklistService = tokenBlacklistService; this.tokenBlacklistService = tokenBlacklistService;
this.rateLimiterService = rateLimiterService; this.rateLimiterService = rateLimiterService;
this.authenticationService = authenticationService;
}
// New Register Endpoint
@PostMapping("/register")
public ResponseEntity<?> register(@RequestBody RegisterUserDto request) {
User user = authenticationService.signUp(request);
return ResponseEntity.ok("User registered successfully with username: " + user.getUsername());
} }
@PostMapping("/login") @PostMapping("/login")
@@ -56,7 +56,7 @@ public class User implements UserDetails {
@Override @Override
public String getUsername() { public String getUsername() {
return email; // or return username if that's your login key return username; // or return username if that's your login key
} }
@Override @Override
@@ -1,10 +1,13 @@
package com.skycrate.backend.skycrateBackend.services; package com.skycrate.backend.skycrateBackend.services;
import com.skycrate.backend.skycrateBackend.config.HDFSConfig;
import com.skycrate.backend.skycrateBackend.dto.LoginUserDto; import com.skycrate.backend.skycrateBackend.dto.LoginUserDto;
import com.skycrate.backend.skycrateBackend.dto.RegisterUserDto; import com.skycrate.backend.skycrateBackend.dto.RegisterUserDto;
import com.skycrate.backend.skycrateBackend.entity.User; import com.skycrate.backend.skycrateBackend.entity.User;
import com.skycrate.backend.skycrateBackend.repository.UserRepository; import com.skycrate.backend.skycrateBackend.repository.UserRepository;
import com.skycrate.backend.skycrateBackend.utils.RSAKeyUtil; import com.skycrate.backend.skycrateBackend.utils.RSAKeyUtil;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
@@ -45,7 +48,20 @@ public class AuthenticationService {
.privateKey(keyPair.getPrivate().getEncoded()) .privateKey(keyPair.getPrivate().getEncoded())
.build(); .build();
return userRepository.save(user); User savedUser = userRepository.save(user);
// Create HDFS directory in root with username
try {
FileSystem fs = HDFSConfig.getHDFS();
String folderName = savedUser.getUsername();
Path userDir = new Path("/" + folderName);
if (!fs.exists(userDir)) {
fs.mkdirs(userDir);
}
} catch (Exception e) {
throw new RuntimeException("Failed to create HDFS directory for user: " + savedUser.getUsername(), e);
}
return savedUser;
} }
public User authenticate(LoginUserDto inputUser) { public User authenticate(LoginUserDto inputUser) {