Search in sources :

Example 1 with BasicAuthentication

use of com.google.api.client.http.BasicAuthentication in project cyberduck by iterate-ch.

the class SDSSession method connect.

@Override
protected SDSApiClient connect(final Proxy proxy, final HostKeyCallback key, final LoginCallback prompt, final CancelCallback cancel) throws BackgroundException {
    final HttpClientBuilder configuration = builder.build(proxy, this, prompt);
    if (preferences.getBoolean("sds.oauth.migrate.enable")) {
        if (host.getProtocol().isDeprecated()) {
            final Credentials credentials = host.getCredentials();
            if (!host.getCredentials().validate(host.getProtocol(), new LoginOptions(host.getProtocol()))) {
                log.warn(String.format("Skip migration with missing credentials for %s", host));
            } else {
                if (log.isDebugEnabled()) {
                    log.debug(String.format("Attempt migration to OAuth flow for %s", host));
                }
                try {
                    // Search for installed connection profile using OAuth authorization method
                    for (Protocol oauth : ProtocolFactory.get().find(new OAuthFinderPredicate(host.getProtocol().getIdentifier()))) {
                        // Run password flow to attempt to migrate to OAuth
                        final TokenResponse response = new PasswordTokenRequest(new ApacheHttpTransport(builder.build(proxy, this, prompt).build()), new GsonFactory(), new GenericUrl(Scheme.isURL(oauth.getOAuthTokenUrl()) ? oauth.getOAuthTokenUrl() : new HostUrlProvider().withUsername(false).withPath(true).get(oauth.getScheme(), host.getPort(), null, host.getHostname(), oauth.getOAuthTokenUrl())), host.getCredentials().getUsername(), host.getCredentials().getPassword()).setClientAuthentication(new BasicAuthentication(oauth.getOAuthClientId(), oauth.getOAuthClientSecret())).setRequestInitializer(new UserAgentHttpRequestInitializer(new PreferencesUseragentProvider())).execute();
                        final long expiryInMilliseconds = System.currentTimeMillis() + response.getExpiresInSeconds() * 1000;
                        credentials.setOauth(new OAuthTokens(response.getAccessToken(), response.getRefreshToken(), expiryInMilliseconds));
                        credentials.setSaved(true);
                        log.warn(String.format("Switch bookmark %s to protocol %s", host, oauth));
                        host.setProtocol(oauth);
                        break;
                    }
                } catch (IOException e) {
                    log.warn(String.format("Failure %s running password flow to migrate to OAuth", e));
                }
            }
        }
    }
    switch(SDSProtocol.Authorization.valueOf(host.getProtocol().getAuthorization())) {
        case oauth:
        case password:
            authorizationService = new OAuth2RequestInterceptor(builder.build(proxy, this, prompt).addInterceptorLast(new HttpRequestInterceptor() {

                @Override
                public void process(final HttpRequest request, final HttpContext context) {
                    if (request instanceof HttpRequestWrapper) {
                        final HttpRequestWrapper wrapper = (HttpRequestWrapper) request;
                        if (null != wrapper.getTarget()) {
                            if (StringUtils.equals(wrapper.getTarget().getHostName(), host.getHostname())) {
                                request.addHeader(HttpHeaders.AUTHORIZATION, String.format("Basic %s", Base64.encodeToString(String.format("%s:%s", host.getProtocol().getOAuthClientId(), host.getProtocol().getOAuthClientSecret()).getBytes(StandardCharsets.UTF_8), false)));
                            }
                        }
                    }
                }
            }).build(), host) {

                @Override
                public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
                    if (request instanceof HttpRequestWrapper) {
                        final HttpRequestWrapper wrapper = (HttpRequestWrapper) request;
                        if (null != wrapper.getTarget()) {
                            if (StringUtils.equals(wrapper.getTarget().getHostName(), host.getHostname())) {
                                super.process(request, context);
                            }
                        }
                    }
                }
            }.withRedirectUri(CYBERDUCK_REDIRECT_URI.equals(host.getProtocol().getOAuthRedirectUrl()) ? host.getProtocol().getOAuthRedirectUrl() : Scheme.isURL(host.getProtocol().getOAuthRedirectUrl()) ? host.getProtocol().getOAuthRedirectUrl() : new HostUrlProvider().withUsername(false).withPath(true).get(host.getProtocol().getScheme(), host.getPort(), null, host.getHostname(), host.getProtocol().getOAuthRedirectUrl()));
            try {
                authorizationService.withParameter("user_agent_info", Base64.encodeToString(InetAddress.getLocalHost().getHostName().getBytes(StandardCharsets.UTF_8), false));
            } catch (UnknownHostException e) {
                throw new DefaultIOExceptionMappingService().map(e);
            }
            configuration.setServiceUnavailableRetryStrategy(new OAuth2ErrorResponseInterceptor(host, authorizationService, prompt));
            configuration.addInterceptorLast(authorizationService);
            configuration.addInterceptorLast(new HttpRequestInterceptor() {

                @Override
                public void process(final HttpRequest request, final HttpContext context) {
                    request.removeHeaders(SDSSession.SDS_AUTH_TOKEN_HEADER);
                }
            });
            break;
        default:
            retryHandler = new SDSErrorResponseInterceptor(this, nodeid);
            configuration.setServiceUnavailableRetryStrategy(retryHandler);
            configuration.addInterceptorLast(retryHandler);
            break;
    }
    final CloseableHttpClient apache = configuration.build();
    final SDSApiClient client = new SDSApiClient(apache);
    client.setBasePath(new HostUrlProvider().withUsername(false).withPath(true).get(host.getProtocol().getScheme(), host.getPort(), null, host.getHostname(), host.getProtocol().getContext()));
    client.setHttpClient(ClientBuilder.newClient(new ClientConfig().register(new InputStreamProvider()).register(MultiPartFeature.class).register(new JSON()).register(JacksonFeature.class).connectorProvider(new HttpComponentsProvider(apache))));
    final int timeout = preferences.getInteger("connection.timeout.seconds") * 1000;
    client.setConnectTimeout(timeout);
    client.setReadTimeout(timeout);
    client.setUserAgent(new PreferencesUseragentProvider().get());
    return client;
}
Also used : UserAgentHttpRequestInitializer(ch.cyberduck.core.http.UserAgentHttpRequestInitializer) JSON(ch.cyberduck.core.sds.io.swagger.client.JSON) HttpClientBuilder(org.apache.http.impl.client.HttpClientBuilder) GenericUrl(com.google.api.client.http.GenericUrl) JacksonFeature(org.glassfish.jersey.jackson.JacksonFeature) OAuth2RequestInterceptor(ch.cyberduck.core.oauth.OAuth2RequestInterceptor) HttpRequestWrapper(org.apache.http.client.methods.HttpRequestWrapper) ClientConfig(org.glassfish.jersey.client.ClientConfig) HttpRequest(org.apache.http.HttpRequest) CloseableHttpClient(org.apache.http.impl.client.CloseableHttpClient) GsonFactory(com.google.api.client.json.gson.GsonFactory) UnknownHostException(java.net.UnknownHostException) InputStreamProvider(org.glassfish.jersey.message.internal.InputStreamProvider) HttpContext(org.apache.http.protocol.HttpContext) OAuth2ErrorResponseInterceptor(ch.cyberduck.core.oauth.OAuth2ErrorResponseInterceptor) IOException(java.io.IOException) TokenResponse(com.google.api.client.auth.oauth2.TokenResponse) MultiPartFeature(org.glassfish.jersey.media.multipart.MultiPartFeature) HttpRequestInterceptor(org.apache.http.HttpRequestInterceptor) BasicAuthentication(com.google.api.client.http.BasicAuthentication) PasswordTokenRequest(com.google.api.client.auth.oauth2.PasswordTokenRequest) ApacheHttpTransport(com.google.api.client.http.apache.v2.ApacheHttpTransport) HttpComponentsProvider(ch.cyberduck.core.jersey.HttpComponentsProvider)

Example 2 with BasicAuthentication

use of com.google.api.client.http.BasicAuthentication in project cyberduck by iterate-ch.

the class FreenetAuthenticatedUrlProvider method toUrl.

@Override
public DescriptiveUrl toUrl(final Host bookmark) {
    try {
        // Run password flow
        final TokenResponse response;
        try {
            final Host target = new Host(new DAVSSLProtocol(), "oauth.freenet.de");
            final X509TrustManager trust = new KeychainX509TrustManager(new DisabledCertificateTrustCallback(), new DefaultTrustManagerHostnameCallback(target), CertificateStoreFactory.get());
            final X509KeyManager key = new KeychainX509KeyManager(new DisabledCertificateIdentityCallback(), target, CertificateStoreFactory.get());
            final CloseableHttpClient client = new HttpConnectionPoolBuilder(target, new ThreadLocalHostnameDelegatingTrustManager(trust, target.getHostname()), key, ProxyFactory.get()).build(ProxyFactory.get().find(new ProxyHostUrlProvider().get(target)), new DisabledTranscriptListener(), new DisabledLoginCallback()).setUserAgent(new FreenetUserAgentProvider().get()).build();
            final String username = bookmark.getCredentials().getUsername();
            final String password;
            if (StringUtils.isBlank(bookmark.getCredentials().getPassword())) {
                password = PasswordStoreFactory.get().findLoginPassword(bookmark);
            } else {
                password = bookmark.getCredentials().getPassword();
            }
            response = new PasswordTokenRequest(new ApacheHttpTransport(client), new GsonFactory(), new GenericUrl("https://oauth.freenet.de/oauth/token"), username, password).setClientAuthentication(new BasicAuthentication("desktop_client", "6LIGIHuOSkznLomu5xw0EPPBJOXb2jLp")).setRequestInitializer(new UserAgentHttpRequestInitializer(new FreenetUserAgentProvider())).set("world", new HostPreferences(bookmark).getProperty("world")).set("webLogin", Boolean.TRUE).execute();
            final FreenetTemporaryLoginResponse login = this.getLoginSession(client, response.getAccessToken());
            return new DescriptiveUrl(URI.create(login.urls.login), DescriptiveUrl.Type.authenticated);
        } catch (IOException e) {
            throw new HttpExceptionMappingService().map(e);
        }
    } catch (BackgroundException e) {
        log.warn(String.format("Failure %s retrieving authenticated URL for %s", e, bookmark));
        return DescriptiveUrl.EMPTY;
    }
}
Also used : UserAgentHttpRequestInitializer(ch.cyberduck.core.http.UserAgentHttpRequestInitializer) KeychainX509KeyManager(ch.cyberduck.core.ssl.KeychainX509KeyManager) DisabledCertificateIdentityCallback(ch.cyberduck.core.DisabledCertificateIdentityCallback) ProxyHostUrlProvider(ch.cyberduck.core.proxy.ProxyHostUrlProvider) GenericUrl(com.google.api.client.http.GenericUrl) DAVSSLProtocol(ch.cyberduck.core.dav.DAVSSLProtocol) KeychainX509TrustManager(ch.cyberduck.core.ssl.KeychainX509TrustManager) HttpExceptionMappingService(ch.cyberduck.core.http.HttpExceptionMappingService) HttpConnectionPoolBuilder(ch.cyberduck.core.http.HttpConnectionPoolBuilder) KeychainX509KeyManager(ch.cyberduck.core.ssl.KeychainX509KeyManager) X509KeyManager(ch.cyberduck.core.ssl.X509KeyManager) DisabledCertificateTrustCallback(ch.cyberduck.core.DisabledCertificateTrustCallback) CloseableHttpClient(org.apache.http.impl.client.CloseableHttpClient) GsonFactory(com.google.api.client.json.gson.GsonFactory) Host(ch.cyberduck.core.Host) IOException(java.io.IOException) DisabledTranscriptListener(ch.cyberduck.core.DisabledTranscriptListener) HostPreferences(ch.cyberduck.core.preferences.HostPreferences) DescriptiveUrl(ch.cyberduck.core.DescriptiveUrl) TokenResponse(com.google.api.client.auth.oauth2.TokenResponse) X509TrustManager(ch.cyberduck.core.ssl.X509TrustManager) KeychainX509TrustManager(ch.cyberduck.core.ssl.KeychainX509TrustManager) DisabledLoginCallback(ch.cyberduck.core.DisabledLoginCallback) ThreadLocalHostnameDelegatingTrustManager(ch.cyberduck.core.ssl.ThreadLocalHostnameDelegatingTrustManager) DefaultTrustManagerHostnameCallback(ch.cyberduck.core.ssl.DefaultTrustManagerHostnameCallback) BasicAuthentication(com.google.api.client.http.BasicAuthentication) PasswordTokenRequest(com.google.api.client.auth.oauth2.PasswordTokenRequest) ApacheHttpTransport(com.google.api.client.http.apache.v2.ApacheHttpTransport) BackgroundException(ch.cyberduck.core.exception.BackgroundException)

Example 3 with BasicAuthentication

use of com.google.api.client.http.BasicAuthentication in project urlaubsverwaltung by synyx.

the class GoogleCalendarSyncProvider method createCredentialWithRefreshToken.

private Credential createCredentialWithRefreshToken(HttpTransport transport, JsonFactory jsonFactory, TokenResponse tokenResponse) {
    String clientId = settingsService.getSettings().getCalendarSettings().getGoogleCalendarSettings().getClientId();
    String clientSecret = settingsService.getSettings().getCalendarSettings().getGoogleCalendarSettings().getClientSecret();
    return new Credential.Builder(BearerToken.authorizationHeaderAccessMethod()).setTransport(transport).setJsonFactory(jsonFactory).setTokenServerUrl(new GenericUrl(GOOGLEAPIS_OAUTH2_V4_TOKEN)).setClientAuthentication(new BasicAuthentication(clientId, clientSecret)).build().setFromTokenResponse(tokenResponse);
}
Also used : BasicAuthentication(com.google.api.client.http.BasicAuthentication) GenericUrl(com.google.api.client.http.GenericUrl)

Example 4 with BasicAuthentication

use of com.google.api.client.http.BasicAuthentication in project google-oauth-java-client by googleapis.

the class CredentialTest method subtestConstructor_expired.

private HttpRequest subtestConstructor_expired(Credential.AccessMethod method, final CheckAuth checkAuth) throws Exception {
    final Credential credential = new Credential.Builder(method).setTransport(new AccessTokenTransport()).setJsonFactory(JSON_FACTORY).setTokenServerUrl(TOKEN_SERVER_URL).setClientAuthentication(new BasicAuthentication(CLIENT_ID, CLIENT_SECRET)).build().setAccessToken(ACCESS_TOKEN).setRefreshToken(REFRESH_TOKEN);
    class MyTransport extends MockHttpTransport {

        boolean resetAccessToken;

        @Override
        public LowLevelHttpRequest buildRequest(String method, String url) {
            return new MockLowLevelHttpRequest(url) {

                @Override
                public LowLevelHttpResponse execute() {
                    MockLowLevelHttpResponse response = new MockLowLevelHttpResponse();
                    if (!checkAuth.checkAuth(this)) {
                        response.setStatusCode(HttpStatusCodes.STATUS_CODE_UNAUTHORIZED);
                        if (resetAccessToken) {
                            credential.setAccessToken(NEW_ACCESS_TOKEN);
                        }
                    }
                    return response;
                }
            };
        }
    }
    MyTransport transport = new MyTransport();
    HttpRequestFactory requestFactory = transport.createRequestFactory(credential);
    HttpRequest request = requestFactory.buildDeleteRequest(HttpTesting.SIMPLE_GENERIC_URL);
    request.execute();
    credential.setAccessToken(ACCESS_TOKEN);
    transport.resetAccessToken = true;
    request.execute();
    return request;
}
Also used : LowLevelHttpRequest(com.google.api.client.http.LowLevelHttpRequest) MockLowLevelHttpRequest(com.google.api.client.testing.http.MockLowLevelHttpRequest) HttpRequest(com.google.api.client.http.HttpRequest) MockLowLevelHttpResponse(com.google.api.client.testing.http.MockLowLevelHttpResponse) MockHttpTransport(com.google.api.client.testing.http.MockHttpTransport) HttpRequestFactory(com.google.api.client.http.HttpRequestFactory) BasicAuthentication(com.google.api.client.http.BasicAuthentication) MockLowLevelHttpRequest(com.google.api.client.testing.http.MockLowLevelHttpRequest)

Example 5 with BasicAuthentication

use of com.google.api.client.http.BasicAuthentication in project google-oauth-java-client by googleapis.

the class CredentialTest method testRefreshToken_noRefreshToken2.

public void testRefreshToken_noRefreshToken2() throws Exception {
    AccessTokenTransport transport = new AccessTokenTransport();
    Credential access = new Credential.Builder(BearerToken.queryParameterAccessMethod()).setTransport(transport).setJsonFactory(JSON_FACTORY).setTokenServerUrl(TOKEN_SERVER_URL).setClientAuthentication(new BasicAuthentication(CLIENT_ID, CLIENT_SECRET)).build().setAccessToken(ACCESS_TOKEN);
    assertFalse(access.refreshToken());
    assertEquals(ACCESS_TOKEN, access.getAccessToken());
    assertNull(access.getRefreshToken());
    assertNull(access.getExpirationTimeMilliseconds());
}
Also used : BasicAuthentication(com.google.api.client.http.BasicAuthentication)

Aggregations

BasicAuthentication (com.google.api.client.http.BasicAuthentication)12 GsonFactory (com.google.api.client.json.gson.GsonFactory)5 GenericUrl (com.google.api.client.http.GenericUrl)4 IOException (java.io.IOException)3 UserAgentHttpRequestInitializer (ch.cyberduck.core.http.UserAgentHttpRequestInitializer)2 PasswordTokenRequest (com.google.api.client.auth.oauth2.PasswordTokenRequest)2 TokenResponse (com.google.api.client.auth.oauth2.TokenResponse)2 HttpRequest (com.google.api.client.http.HttpRequest)2 HttpRequestFactory (com.google.api.client.http.HttpRequestFactory)2 LowLevelHttpRequest (com.google.api.client.http.LowLevelHttpRequest)2 ApacheHttpTransport (com.google.api.client.http.apache.v2.ApacheHttpTransport)2 MockLowLevelHttpRequest (com.google.api.client.testing.http.MockLowLevelHttpRequest)2 CloseableHttpClient (org.apache.http.impl.client.CloseableHttpClient)2 DescriptiveUrl (ch.cyberduck.core.DescriptiveUrl)1 DisabledCertificateIdentityCallback (ch.cyberduck.core.DisabledCertificateIdentityCallback)1 DisabledCertificateTrustCallback (ch.cyberduck.core.DisabledCertificateTrustCallback)1 DisabledLoginCallback (ch.cyberduck.core.DisabledLoginCallback)1 DisabledTranscriptListener (ch.cyberduck.core.DisabledTranscriptListener)1 Host (ch.cyberduck.core.Host)1 DAVSSLProtocol (ch.cyberduck.core.dav.DAVSSLProtocol)1