@Override public AccessToken extractResult(AuthPostMethod method) throws IOException { //initial check for failure codes leading to authentication failures if (method.getStatusCode() == SC_BAD_REQUEST) { throw new SwiftAuthenticationFailedException( authenticationRequest.toString(), "POST", authUri, method); } if (authenticationRequest instanceof AuthenticationRequestV2) { return extractResultV2(method); } else { return extractResultV3(method); } }
/** * Setter of authentication and endpoint details. * Being synchronized guarantees that all three fields are set up together. * It is up to the reader to read all three fields in their own * synchronized block to be sure that they are all consistent. * * @param endpoint endpoint URI * @param objectLocation object location URI * @param authToken auth token */ private void setAuthDetails(URI endpoint, URI objectLocation, AccessToken authToken) { if (LOG.isDebugEnabled()) { LOG.debug(String.format("setAuth: endpoint=%s; objectURI=%s; token=%s", endpoint, objectLocation, authToken)); } synchronized (this) { endpointURI = endpoint; objectLocationURI = objectLocation; token = authToken; } }
/** * Authenticate to Openstack Keystone * As well as returning the access token, the member fields {@link #token}, * {@link #endpointURI} and {@link #objectLocationURI} are set up for re-use. * <p> * This method is re-entrant -if more than one thread attempts to authenticate * neither will block -but the field values with have those of the last caller. * * @return authenticated access token */ public AccessToken authenticate() throws IOException { final AuthenticationRequest authenticationRequest; if (useKeystoneAuthentication) { authenticationRequest = keystoneAuthRequest; } else { authenticationRequest = authRequest; } LOG.debug("started authentication"); return perform("authentication", authUri, new AuthenticationPost(authenticationRequest)); }
/** * Authenticate to Openstack Keystone * As well as returning the access token, the member fields {@link #token}, * {@link #endpointURI} and {@link #objectLocationURI} are set up for re-use. * <p/> * This method is re-entrant -if more than one thread attempts to authenticate * neither will block -but the field values with have those of the last caller. * <p/> * * @return authenticated access token */ public AccessToken authenticate() throws IOException { final AuthenticationRequest authenticationRequest; if (useKeystoneAuthentication) { authenticationRequest = keystoneAuthRequest; } else { authenticationRequest = authRequest; } LOG.debug("started authentication"); return perform("authentication", authUri, new AuthenticationPost(authenticationRequest)); }
/** * token for Swift communication */ private synchronized AccessToken getToken() { return token; }
public AccessToken getToken() { return token; }
public void setToken(AccessToken token) { this.token = token; }
/** * Set the auth key header of the method to the token ID supplied * * @param method method * @param accessToken access token * @throws SwiftInternalStateException if the client is not yet authenticated */ private void setAuthToken(HttpMethodBase method, AccessToken accessToken) throws SwiftInternalStateException { checkNotNull(accessToken,"Not authenticated"); method.addRequestHeader(HEADER_AUTH_KEY, accessToken.getId()); }