57 lines
2.0 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|