AdminVerificationController.java
package com.ctrlbuy.webshop.controller;
import com.ctrlbuy.webshop.security.entity.User;
import com.ctrlbuy.webshop.service.EmailService;
import com.ctrlbuy.webshop.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
@RestController
@RequestMapping("/admin")
public class AdminVerificationController {
@Autowired
private EmailService emailService;
@Autowired
private UserService userService;
@PostMapping("/resend-verification")
public ResponseEntity<?> resendVerification(@RequestBody Map<String, String> request) {
try {
String email = request.get("email");
// Debug logging
System.out.println("AdminVerification - Attempting to send to: " + email);
if (email == null || email.trim().isEmpty()) {
return ResponseEntity.badRequest().body("Email is required");
}
// Find user - handle Optional return type
Optional<User> userOptional = userService.findByEmail(email);
if (!userOptional.isPresent()) {
System.out.println("User not found for email: " + email);
return ResponseEntity.badRequest().body("User not found");
}
User user = userOptional.get();
System.out.println("User found: " + user.getEmail());
// Create verification token
String verificationToken = UUID.randomUUID().toString();
user.setVerificationToken(verificationToken);
user.setVerificationTokenExpiry(LocalDateTime.now().plusHours(24));
// Save user
userService.save(user);
System.out.println("Verification token created: " + verificationToken);
// Send verification email - pass User object, not email string
emailService.sendVerificationEmail(user, verificationToken);
System.out.println("Verification email sent successfully to: " + email);
// Create success response
Map<String, String> response = new HashMap<>();
response.put("message", "Verification link sent successfully");
response.put("email", email);
return ResponseEntity.ok(response);
} catch (Exception e) {
System.err.println("AdminVerification error: " + e.getMessage());
e.printStackTrace();
Map<String, String> errorResponse = new HashMap<>();
errorResponse.put("error", "Failed to send verification link");
errorResponse.put("details", e.getMessage());
return ResponseEntity.status(500).body(errorResponse);
}
}
// Debug endpoint for testing
@GetMapping("/test-verification/{email}")
public ResponseEntity<?> testVerification(@PathVariable String email) {
try {
System.out.println("Testing verification for: " + email);
Optional<User> userOptional = userService.findByEmail(email);
if (!userOptional.isPresent()) {
return ResponseEntity.badRequest().body("User not found: " + email);
}
User user = userOptional.get();
String testToken = "test-" + UUID.randomUUID().toString();
// Pass User object to EmailService
emailService.sendVerificationEmail(user, testToken);
return ResponseEntity.ok("Test verification email sent to: " + email);
} catch (Exception e) {
return ResponseEntity.status(500).body("Test failed: " + e.getMessage());
}
}
}