package com.fsck.k9.mail.oauth;
import java.util.List;
import android.app.Activity;
import com.fsck.k9.mail.AuthenticationFailedException;
public interface OAuth2TokenProvider {
/**
* A default timeout value to use when fetching tokens.
*/
int OAUTH2_TIMEOUT = 30000;
/**
* @return Accounts suitable for OAuth 2.0 token provision.
*/
List<String> getAccounts();
/**
* Request API authorization. This is a foreground action that may produce a dialog to interact with.
*
* @param username
* Username
* @param activity
* The responsible activity
* @param callback
* A callback to process the asynchronous response
*/
void authorizeApi(String username, Activity activity, OAuth2TokenProviderAuthCallback callback);
/**
* Fetch a token. No guarantees are provided for validity.
*/
String getToken(String username, long timeoutMillis) throws AuthenticationFailedException;
/**
* Invalidate the token for this username.
*
* <p>
* Note that the token should always be invalidated on credential failure. However invalidating a token every
* single time is not recommended.
* <p>
* Invalidating a token and then failure with a new token should be treated as a permanent failure.
*/
void invalidateToken(String username);
/**
* Provides an asynchronous response to an
* {@link OAuth2TokenProvider#authorizeApi(String, Activity, OAuth2TokenProviderAuthCallback)} request.
*/
interface OAuth2TokenProviderAuthCallback {
void success();
void failure(AuthorizationException e);
}
}