package io.fathom.cloud.openstack.client.identity; import io.fathom.cloud.openstack.client.RestClientException; import io.fathom.cloud.openstack.client.identity.model.V2AuthRequest; import io.fathom.cloud.openstack.client.identity.model.V2AuthResponse; import io.fathom.cloud.openstack.client.identity.model.V2AuthRequest.PasswordCredentials; import io.fathom.http.HttpClient; public class AuthTokenProvider implements TokenProvider { final OpenstackIdentityClient identityClient; final V2AuthRequest request; private V2AuthResponse response; public AuthTokenProvider(OpenstackIdentityClient identityClient, V2AuthRequest request) { super(); this.identityClient = identityClient; this.request = request; } @Override public void reset() { this.response = null; } public V2AuthResponse getResponse() throws RestClientException { if (this.response == null) { this.response = identityClient.doLogin(request); } return this.response; } @Override public String findEndpoint(String type) throws RestClientException { V2AuthResponse response = getResponse(); if (response.access != null && response.access.serviceCatalog != null) { for (V2AuthResponse.Service service : response.access.serviceCatalog) { if (!service.type.equals(type)) { continue; } for (V2AuthResponse.Endpoint endpoint : service.endpoints) { return endpoint.publicURL; } } } return null; } public static AuthTokenProvider build(OpenstackIdentityClient identityClient, String tenant, String username, String password) { V2AuthRequest request = new V2AuthRequest(); request.auth = new V2AuthRequest.V2AuthCredentials(); request.auth.tenantName = tenant; request.auth.passwordCredentials = new PasswordCredentials(); request.auth.passwordCredentials.username = username; request.auth.passwordCredentials.password = password; return new AuthTokenProvider(identityClient, request); } // public static AuthTokenProvider build(OpenstackIdentityClient // identityClient, Configuration config) { // String tenant = config.get("openstack.tenant"); // String username = config.get("openstack.username"); // String password = config.get("openstack.password"); // // return build(identityClient, tenant, username, password); // } @Override public String getToken() throws RestClientException { V2AuthResponse response = getResponse(); return response.access.token.id; } @Override public HttpClient getHttpClient() { return identityClient.getHttpClient(); } }