Files
board-mate/api/src/main/java/be/naaturel/boardmateapi/services/ClientService.java
Laurent f7630b6754 Revert "????????"
This reverts commit bc1e598987.
2025-12-28 22:10:13 +01:00

57 lines
2.0 KiB
Java

package be.naaturel.boardmateapi.services;
import be.naaturel.boardmateapi.common.exceptions.ServiceException;
import be.naaturel.boardmateapi.common.models.Client;
import be.naaturel.boardmateapi.repository.ClientRepo;
import be.naaturel.boardmateapi.repository.dtos.ClientDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.UUID;
import static java.util.UUID.randomUUID;
@Service
public class ClientService {
private final ClientRepo repo;
private final PasswordEncoder passwordEncoder;
@Autowired
public ClientService(ClientRepo repo, PasswordEncoder passwordEncoder){
this.repo = repo;
this.passwordEncoder = passwordEncoder;
}
public Client authenticate(String username, String key) throws ServiceException {
try {
ClientDto dto = repo.findByServiceUsername(username)
.orElseThrow(() -> new RuntimeException("Invalid username"));
if (passwordEncoder.matches(key, dto.getServiceKey())) {
return new Client(dto.getClientId(), dto.getName(), dto.getServiceUsername(), dto.getServiceKey());
} else {
throw new RuntimeException("Invalid username or password");
}
} catch (Exception e){
throw new ServiceException("Authentication failed", e);
}
}
public String create(String name, String username, String key) throws ServiceException {
try{
ClientDto dto = new ClientDto();
dto.setClientId(randomUUID().toString());
dto.setName(name);
dto.setServiceUsername(username);
String encodedKey = passwordEncoder.encode(key);
dto.setServiceKey(encodedKey);
ClientDto result = repo.save(dto);
return result.getClientId();
} catch (Exception e){
throw new ServiceException("Unable to create client", e);
}
}
}