package com.netifera.platform.net.services.auth;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
import com.netifera.platform.net.services.credentials.Credential;
public abstract class CredentialsVerifier {
protected Iterator<Credential> credentials;
private final Queue<Credential> retryCredentials = new LinkedList<Credential>();
protected AuthenticationListener listener;
protected boolean hasNextCredential() {
return credentials.hasNext() || !retryCredentials.isEmpty();
}
protected Credential nextCredentialOrNull() {
synchronized(credentials) {
synchronized(retryCredentials) {
Credential retry = retryCredentials.poll();
if (retry != null) return retry;
}
if (credentials.hasNext()) return credentials.next();
}
return null;
}
public void retryCredential(Credential credential) {
synchronized(retryCredentials) {
retryCredentials.add(credential);
}
}
public abstract void tryCredentials(Iterator<Credential> credentials, AuthenticationListener listener) throws IOException, InterruptedException;
}