private Map<String, String> getAuthHeaders(AccessToken accessToken) { Map<String, String> headers = ImmutableMap.of(); if (accessToken != null) { headers = ImmutableMap.of(HttpHeaders.AUTHORIZATION, accessToken.getTokenType() + " " + accessToken.getValue()); } return headers; }
@Override public String get() { if (config.getAccessToken() != null) { return config.getAccessToken().getValue(); } return null; } };
@Override public AccessToken getAccessToken() throws IOException { if (!isAuthEnabled()) { return null; } if (accessToken == null || isTokenExpired()) { long requestTime = System.currentTimeMillis(); accessToken = fetchAccessToken(); expirationTime = requestTime + TimeUnit.SECONDS.toMillis(accessToken.getExpiresIn()) - SPARE_TIME_IN_MILLIS; LOG.debug("Received the access token successfully. Expiration date is {}.", new Date(expirationTime)); } return accessToken; }
/** * Executes fetch access token request. * * @param request the http request to fetch access token from the authentication server * @return {@link AccessToken} object containing the access token * @throws IOException IOException in case of a problem or the connection was aborted or if the access token is not * received successfully from the authentication server */ private AccessToken execute(HttpRequest request) throws IOException { HttpResponse response = HttpRequests.execute(request, getHttpRequestConfig()); LOG.debug("Got response {} - {} from {}", response.getResponseCode(), response.getResponseMessage(), pingURI); if (response.getResponseCode() != HttpURLConnection.HTTP_OK) { throw new HttpFailureException(response.getResponseMessage(), response.getResponseCode()); } Map<String, String> responseMap = ObjectResponse.fromJsonBody(response, ACCESS_TOKEN_RESPONSE_TYPE_TOKEN).getResponseObject(); String tokenValue = responseMap.get(ACCESS_TOKEN_KEY); String tokenType = responseMap.get(TOKEN_TYPE_KEY); String expiresInStr = responseMap.get(EXPIRES_IN_KEY); LOG.debug("Response map from auth server: {}", responseMap); if (StringUtils.isEmpty(tokenValue) || StringUtils.isEmpty(tokenType) || StringUtils.isEmpty(expiresInStr)) { throw new IOException("Unexpected response was received from the authentication server."); } return new AccessToken(tokenValue, Long.valueOf(expiresInStr), tokenType); }
@Override public Connection getQueryClient(NamespaceId namespace) throws Exception { Map<String, String> connParams = new HashMap<>(); connParams.put(ExploreConnectionParams.Info.NAMESPACE.getName(), namespace.getNamespace()); AccessToken accessToken = clientConfig.getAccessToken(); if (accessToken != null) { connParams.put(ExploreConnectionParams.Info.EXPLORE_AUTH_TOKEN.getName(), accessToken.getValue()); } connParams.put(ExploreConnectionParams.Info.SSL_ENABLED.getName(), Boolean.toString(clientConfig.getConnectionConfig().isSSLEnabled())); connParams.put(ExploreConnectionParams.Info.VERIFY_SSL_CERT.getName(), Boolean.toString(clientConfig.isVerifySSLCert())); ConnectionConfig connConfig = clientConfig.getConnectionConfig(); String url = String.format("%s%s:%d?%s", Constants.Explore.Jdbc.URL_PREFIX, connConfig.getHostname(), connConfig.getPort(), Joiner.on("&").withKeyValueSeparator("=").join(connParams)); return new ExploreDriver().connect(url, new Properties()); }