package de.otto.hmac.authentication;
import java.time.Clock;
public class AuthenticationService {
private final UserRepository userRepository;
private final Clock clock;
public AuthenticationService(final UserRepository userRepository) {
this(userRepository, Clock.systemUTC());
}
public AuthenticationService(final UserRepository userRepository, final Clock clock) {
this.userRepository = userRepository;
this.clock = clock;
}
public AuthenticationResult validate(WrappedRequest request) {
String sentSignature = RequestSigningUtil.getSignature(request);
String[] split = sentSignature.split(":");
String username = split[0];
String secretKey = userRepository.getKey(username);
if (secretKey == null) {
return AuthenticationResult.fail();
}
if (RequestSigningUtil.checkRequest(request, secretKey, clock)) {
return AuthenticationResult.success(username);
}
return AuthenticationResult.fail();
}
}