From f06dbd84ad8bda96eda3f8fe15e27acaef4f21ca Mon Sep 17 00:00:00 2001 From: Kshitij <160704796+kshitij-ka@users.noreply.github.com> Date: Thu, 3 Jul 2025 14:24:04 +0530 Subject: [PATCH] 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. --- .../controller/AuthController.java | 16 ++++++++++++++-- .../backend/skycrateBackend/entity/User.java | 2 +- .../services/AuthenticationService.java | 18 +++++++++++++++++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/skycrate/backend/skycrateBackend/controller/AuthController.java b/src/main/java/com/skycrate/backend/skycrateBackend/controller/AuthController.java index 33e0306..6f11ada 100644 --- a/src/main/java/com/skycrate/backend/skycrateBackend/controller/AuthController.java +++ b/src/main/java/com/skycrate/backend/skycrateBackend/controller/AuthController.java @@ -2,15 +2,17 @@ package com.skycrate.backend.skycrateBackend.controller; import com.skycrate.backend.skycrateBackend.dto.LoginRequest; 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.TokenRefreshResponse; import com.skycrate.backend.skycrateBackend.entity.RefreshToken; import com.skycrate.backend.skycrateBackend.entity.User; import com.skycrate.backend.skycrateBackend.repository.UserRepository; 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.RefreshTokenService; import com.skycrate.backend.skycrateBackend.services.RateLimiterService; +import com.skycrate.backend.skycrateBackend.services.RefreshTokenService; import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.AuthenticationManager; @@ -27,6 +29,7 @@ public class AuthController { private final RefreshTokenService refreshTokenService; private final TokenBlacklistService tokenBlacklistService; private final RateLimiterService rateLimiterService; + private final AuthenticationService authenticationService; public AuthController( AuthenticationManager authManager, @@ -34,7 +37,8 @@ public class AuthController { UserRepository userRepository, RefreshTokenService refreshTokenService, TokenBlacklistService tokenBlacklistService, - RateLimiterService rateLimiterService + RateLimiterService rateLimiterService, + AuthenticationService authenticationService ) { this.authManager = authManager; this.jwtService = jwtService; @@ -42,6 +46,14 @@ public class AuthController { this.refreshTokenService = refreshTokenService; this.tokenBlacklistService = tokenBlacklistService; 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") diff --git a/src/main/java/com/skycrate/backend/skycrateBackend/entity/User.java b/src/main/java/com/skycrate/backend/skycrateBackend/entity/User.java index 7138eaa..78fc9ef 100644 --- a/src/main/java/com/skycrate/backend/skycrateBackend/entity/User.java +++ b/src/main/java/com/skycrate/backend/skycrateBackend/entity/User.java @@ -56,7 +56,7 @@ public class User implements UserDetails { @Override 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 diff --git a/src/main/java/com/skycrate/backend/skycrateBackend/services/AuthenticationService.java b/src/main/java/com/skycrate/backend/skycrateBackend/services/AuthenticationService.java index 7cea86d..2f49b40 100644 --- a/src/main/java/com/skycrate/backend/skycrateBackend/services/AuthenticationService.java +++ b/src/main/java/com/skycrate/backend/skycrateBackend/services/AuthenticationService.java @@ -1,10 +1,13 @@ 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.RegisterUserDto; import com.skycrate.backend.skycrateBackend.entity.User; import com.skycrate.backend.skycrateBackend.repository.UserRepository; 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.UsernamePasswordAuthenticationToken; import org.springframework.security.crypto.password.PasswordEncoder; @@ -45,7 +48,20 @@ public class AuthenticationService { .privateKey(keyPair.getPrivate().getEncoded()) .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) {