@@ -0,0 +1,56 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user