package com.heaerie.server.auth201.Auth201Server.controller;
import com.heaerie.server.auth201.Auth201Server.dto.ClientRegistrationRequest;
import com.heaerie.server.auth201.Auth201Server.dto.ClientRegistrationResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.UUID;
@Controller
@RequestMapping("/oauth")
public class ClientRegistrationController {
private final PasswordEncoder passwordEncoder;
public ClientRegistrationController(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
@GetMapping("/register")
public String showRegistrationForm() {
return "register-client";
}
@PostMapping("/register")
@ResponseBody
public ResponseEntity<ClientRegistrationResponse> registerClient(@RequestBody ClientRegistrationRequest request) {
// Generate client ID
String clientId = generateClientId(request.getClientName());
// Generate client secret for confidential clients
String clientSecret = null;
if ("confidential".equals(request.getClientType())) {
clientSecret = generateClientSecret();
}
ClientRegistrationResponse response = new ClientRegistrationResponse();
response.setClientId(clientId);
response.setClientSecret(clientSecret);
response.setClientType(request.getClientType());
response.setMessage("Client registered successfully");
return ResponseEntity.ok(response);
}
private String generateClientId(String clientName) {
// Create a client ID based on the name and a UUID
String sanitized = clientName.toLowerCase()
.replaceAll("[^a-z0-9-]", "-")
.replaceAll("-+", "-")
.replaceAll("^-|-$", "");
String shortUuid = UUID.randomUUID().toString().substring(0, 8);
return sanitized + "-" + shortUuid;
}
private String generateClientSecret() {
// Generate a secure random secret
return UUID.randomUUID().toString().replace("-", "") +
UUID.randomUUID().toString().replace("-", "");
}
}