88import com .thughari .jobtrackerpro .dto .UserProfileResponse ;
99import com .thughari .jobtrackerpro .service .AuthService ;
1010import jakarta .servlet .http .HttpServletResponse ;
11+ import lombok .extern .slf4j .Slf4j ;
12+
13+ import java .util .Map ;
14+
1115import org .springframework .beans .factory .annotation .Value ;
1216import org .springframework .http .MediaType ;
1317import org .springframework .http .ResponseCookie ;
1620import org .springframework .web .bind .annotation .*;
1721import org .springframework .web .multipart .MultipartFile ;
1822
23+ @ Slf4j
1924@ RestController
2025@ RequestMapping ("/api/auth" )
2126public class AuthController {
@@ -36,43 +41,43 @@ public AuthController(AuthService authService) {
3641 }
3742
3843 @ PostMapping ("/signup" )
39- public ResponseEntity <?> registerUser (@ RequestBody AuthRequest request , HttpServletResponse response ) {
40- try {
41- AuthTokens tokens = authService . registerUser ( request );
42- attachRefreshCookie ( response , tokens . refreshToken ());
43- return ResponseEntity . ok ( new AuthResponse ( tokens . accessToken ()));
44- } catch ( IllegalArgumentException e ) {
45- return ResponseEntity . badRequest (). body ( e . getMessage ());
46- }
47- }
48-
49- @ PostMapping ( "/login" )
50- public ResponseEntity <?> loginUser ( @ RequestBody AuthRequest request , HttpServletResponse response ) {
51- try {
52- AuthTokens tokens = authService . loginUser ( request );
53- attachRefreshCookie ( response , tokens . refreshToken () );
54- return ResponseEntity . ok ( new AuthResponse ( tokens .accessToken () ));
55- } catch ( IllegalArgumentException e ) {
56- return ResponseEntity . badRequest (). body ( e . getMessage ());
57- }
58- }
59-
60- @ PostMapping ( "/refresh" )
61- public ResponseEntity <?> refreshToken ( @ CookieValue ( name = "refresh_token " , required = false ) String refreshToken ,
62- HttpServletResponse response ) {
63- if ( refreshToken == null || refreshToken . isBlank ()) {
64- return ResponseEntity . status ( 401 ). body ( "Missing refresh token" );
65- }
66-
67- try {
68- AuthTokens tokens = authService . refreshAccessToken ( refreshToken );
69- attachRefreshCookie ( response , tokens . refreshToken () );
70- return ResponseEntity . ok ( new AuthResponse ( tokens . accessToken ()));
71- } catch ( IllegalArgumentException e ) {
72- clearRefreshCookie ( response );
73- return ResponseEntity . status ( 401 ). body ( "Invalid refresh token" );
74- }
75- }
44+ public ResponseEntity <?> registerUser (@ RequestBody AuthRequest request ) {
45+ authService . registerUser ( request );
46+ return ResponseEntity . ok ( Map . of ( "message" , "Registration successful. Please check your email to verify your account." ) );
47+ }
48+
49+ @ PostMapping ( "/login" )
50+ public ResponseEntity <?> loginUser ( @ RequestBody AuthRequest request , HttpServletResponse response ) {
51+ AuthTokens tokens = authService . loginUser ( request );
52+ attachRefreshCookie ( response , tokens . refreshToken ());
53+ return ResponseEntity . ok ( new AuthResponse ( tokens . accessToken ()));
54+ }
55+
56+ @ GetMapping ( "/verify-email" )
57+ public ResponseEntity <?> verifyEmail ( @ RequestParam String token , HttpServletResponse response ) {
58+ AuthTokens tokens = authService . verifyUser ( token );
59+ attachRefreshCookie ( response , tokens .refreshToken ( ));
60+ return ResponseEntity . ok ( new AuthResponse ( tokens . accessToken ()));
61+ }
62+
63+ @ PostMapping ( "/resend-verification" )
64+ public ResponseEntity <?> resendVerification ( @ RequestParam String email ) {
65+ authService . resendVerificationEmail ( email );
66+ return ResponseEntity . ok ( Map . of ( "message " , "A new verification link has been sent." ));
67+ }
68+
69+
70+ @ PostMapping ( "/refresh" )
71+ public ResponseEntity <?> refreshToken ( @ CookieValue ( name = "refresh_token" , required = false ) String refreshToken ,
72+ HttpServletResponse response ) {
73+ if ( refreshToken == null || refreshToken . isBlank ()) {
74+ return ResponseEntity . status ( 401 ). body ( "Missing refresh token" );
75+ }
76+
77+ AuthTokens tokens = authService . refreshAccessToken ( refreshToken );
78+ attachRefreshCookie ( response , tokens . refreshToken () );
79+ return ResponseEntity . ok ( new AuthResponse ( tokens . accessToken ()));
80+ }
7681
7782 @ PostMapping ("/logout" )
7883 public ResponseEntity <?> logout (HttpServletResponse response ) {
@@ -97,43 +102,29 @@ public ResponseEntity<?> updateProfile(
97102 }
98103
99104 @ PutMapping ("/password" )
100- public ResponseEntity <?> changePassword (@ RequestBody ChangePasswordRequest request ) {
101- try {
102- String email = getAuthenticatedEmail ();
103- authService .changePassword (email , request );
104- return ResponseEntity .ok ().body ("Password set successfully." );
105- } catch (IllegalArgumentException e ) {
106- return ResponseEntity .badRequest ().body (e .getMessage ());
107- }
108- }
105+ public ResponseEntity <?> changePassword (@ RequestBody ChangePasswordRequest request ) {
106+ authService .changePassword (getAuthenticatedEmail (), request );
107+ return ResponseEntity .ok ().body (Map .of ("message" , "Password set successfully." ));
108+ }
109109
110110 @ PostMapping ("/forgot-password" )
111111 public ResponseEntity <?> forgotPassword (@ RequestParam String email ) {
112- try {
113- authService .forgotPassword (email );
114- return ResponseEntity .ok ("If that email exists, a reset link has been sent." );
115- } catch (Exception e ) {
116- return ResponseEntity .ok ("If that email exists, a reset link has been sent." );
117- }
112+ authService .forgotPassword (email );
113+ return ResponseEntity .ok ("If that email exists, a reset link has been sent." );
118114 }
119115
120116 @ PostMapping ("/reset-password" )
121- public ResponseEntity <?> resetPassword (@ RequestBody ResetPasswordRequest request ) {
122- try {
123- authService .resetPassword (request .getToken (), request .getNewPassword ());
124- return ResponseEntity .ok ("Password reset successfully. Please login." );
125- } catch (Exception e ) {
126- return ResponseEntity .badRequest ().body (e .getMessage ());
127- }
128- }
117+ public ResponseEntity <?> resetPassword (@ RequestBody ResetPasswordRequest request ) {
118+ authService .resetPassword (request .getToken (), request .getNewPassword ());
119+ return ResponseEntity .ok (Map .of ("message" , "Password reset successfully." ));
120+ }
129121
130122 private String getAuthenticatedEmail () {
131123 return ((String ) SecurityContextHolder .getContext ().getAuthentication ().getPrincipal ()).toLowerCase ();
132124 }
133125
134126 private void attachRefreshCookie (HttpServletResponse response , String refreshToken ) {
135127 response .addHeader ("Set-Cookie" , buildRefreshCookie (refreshToken , "/" , refreshExpirationMs / 1000 ).toString ());
136- // Clear legacy cookie written by older builds to prevent duplicate refresh_token cookies.
137128 response .addHeader ("Set-Cookie" , buildRefreshCookie ("" , "/api/auth" , 0 ).toString ());
138129 }
139130
0 commit comments