Files
OpenIsle/src/main/java/com/openisle/controller/AuthController.java
2025-06-30 20:19:28 +08:00

92 lines
2.8 KiB
Java

package com.openisle.controller;
import com.openisle.model.User;
import com.openisle.service.EmailService;
import com.openisle.service.JwtService;
import com.openisle.service.UserService;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import java.util.Optional;
/*
curl -X POST http://localhost:8080/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "test_user1",
"email": "1216414009@qq.com",
"password": "password"
}'
curl -X POST http://localhost:8080/api/auth/verify \
-H "Content-Type: application/json" \
-d '{
"username": "test_user1",
"code": "451247"
}'
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "test_user1",
"password": "password"
}'
*/
@RestController
@RequestMapping("/api/auth")
@RequiredArgsConstructor
public class AuthController {
private final UserService userService;
private final JwtService jwtService;
private final EmailService emailService;
@PostMapping("/register")
public ResponseEntity<?> register(@RequestBody RegisterRequest req) {
User user = userService.register(req.getUsername(), req.getEmail(), req.getPassword());
emailService.sendEmail(user.getEmail(), "Verification Code", "Your verification code is " + user.getVerificationCode());
return ResponseEntity.ok(Map.of("message", "Verification code sent"));
}
@PostMapping("/verify")
public ResponseEntity<?> verify(@RequestBody VerifyRequest req) {
boolean ok = userService.verifyCode(req.getUsername(), req.getCode());
if (ok) {
return ResponseEntity.ok(Map.of("message", "Verified"));
}
return ResponseEntity.badRequest().body(Map.of("error", "Invalid verification code"));
}
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginRequest req) {
Optional<User> user = userService.authenticate(req.getUsername(), req.getPassword());
if (user.isPresent()) {
return ResponseEntity.ok(Map.of("token", jwtService.generateToken(user.get().getUsername())));
} else {
return ResponseEntity.badRequest().body(Map.of("error", "Invalid credentials or user not verified"));
}
}
@Data
private static class RegisterRequest {
private String username;
private String email;
private String password;
}
@Data
private static class LoginRequest {
private String username;
private String password;
}
@Data
private static class VerifyRequest {
private String username;
private String code;
}
}