All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.cloudfoundry.spring.util.network.OAuth2RestTemplateBuilder Maven / Gradle / Ivy

The newest version!
// Generated by delombok at Sat Jun 18 07:22:04 PDT 2016
/*
 * Copyright 2013-2016 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.cloudfoundry.spring.util.network;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.DeserializationProblemHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.security.oauth2.client.OAuth2ClientContext;
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails;
import org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordAccessTokenProvider;
import org.springframework.util.Assert;
import org.springframework.web.client.RestTemplate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;

public final class OAuth2RestTemplateBuilder {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    private OAuth2ClientContext clientContext;
    private HostnameVerifier hostnameVerifier;
    private List> messageConverters = new ArrayList<>();
    private List problemHandlers = new ArrayList<>();
    private OAuth2ProtectedResourceDetails protectedResourceDetails;
    private SSLContext sslContext;

    public OAuth2RestTemplate build() {
        OAuth2RestTemplate restTemplate = getRestTemplate(this.clientContext, this.protectedResourceDetails);
        addLogging(restTemplate);
        addMessageConverters(restTemplate, this.messageConverters);
        modifyObjectMapper(getObjectMapper(restTemplate), this.problemHandlers, this.logger);
        setRequestFactory(restTemplate, this.hostnameVerifier, this.sslContext);
        return restTemplate;
    }

    public OAuth2RestTemplateBuilder messageConverter(HttpMessageConverter messageConverter) {
        this.messageConverters.add(messageConverter);
        return this;
    }

    public OAuth2RestTemplateBuilder problemHandler(DeserializationProblemHandler problemHandler) {
        this.problemHandlers.add(problemHandler);
        return this;
    }

    private static void addLogging(RestTemplate restTemplate) {
        restTemplate.getInterceptors().add(new LoggingClientHttpRequestInterceptor());
    }

    private static void addMessageConverters(RestTemplate restTemplate, List> httpMessageConverters) {
        for (HttpMessageConverter httpMessageConverter : httpMessageConverters) {
            restTemplate.getMessageConverters().add(httpMessageConverter);
        }
    }

    private static ResourceOwnerPasswordAccessTokenProvider getAccessTokenProvider(ClientHttpRequestFactory requestFactory) {
        ResourceOwnerPasswordAccessTokenProvider accessTokenProvider = new ResourceOwnerPasswordAccessTokenProvider();
        accessTokenProvider.setRequestFactory(requestFactory);
        return accessTokenProvider;
    }

    private static Optional getObjectMapper(RestTemplate restTemplate) {
        for (HttpMessageConverter messageConverter : restTemplate.getMessageConverters()) {
            if (messageConverter instanceof MappingJackson2HttpMessageConverter) {
                ObjectMapper objectMapper = ((MappingJackson2HttpMessageConverter) messageConverter).getObjectMapper();
                return Optional.of(objectMapper);
            }
        }
        return Optional.empty();
    }

    private static OAuth2RestTemplate getRestTemplate(OAuth2ClientContext clientContext, OAuth2ProtectedResourceDetails protectedResourceDetails) {
        Assert.notNull(clientContext, "clientContext must not be null");
        Assert.notNull(protectedResourceDetails, "protectedResourceDetails must not be null");
        return new OAuth2RestTemplate(protectedResourceDetails, clientContext);
    }

    private static void modifyObjectMapper(Optional objectMapper, List problemHandlers, Logger logger) {
        objectMapper.ifPresent(objectMapper1 -> {
            logger.debug("Modifying ObjectMapper configuration");
            objectMapper1.setSerializationInclusion(NON_NULL);
            problemHandlers.forEach(objectMapper1::addHandler);
        });
    }

    private static void setRequestFactory(OAuth2RestTemplate restTemplate, HostnameVerifier hostnameVerifier, SSLContext sslContext) {
        if (hostnameVerifier != null && sslContext != null) {
            CustomSslSimpleClientHttpRequestFactory requestFactory = new CustomSslSimpleClientHttpRequestFactory(hostnameVerifier, sslContext);
            restTemplate.setRequestFactory(requestFactory);
            restTemplate.setAccessTokenProvider(getAccessTokenProvider(requestFactory));
        }
    }

    @java.lang.SuppressWarnings("all")
    @javax.annotation.Generated("lombok")
    public OAuth2RestTemplateBuilder clientContext(final OAuth2ClientContext clientContext) {
        this.clientContext = clientContext;
        return this;
    }

    @java.lang.SuppressWarnings("all")
    @javax.annotation.Generated("lombok")
    public OAuth2RestTemplateBuilder hostnameVerifier(final HostnameVerifier hostnameVerifier) {
        this.hostnameVerifier = hostnameVerifier;
        return this;
    }

    @java.lang.SuppressWarnings("all")
    @javax.annotation.Generated("lombok")
    public OAuth2RestTemplateBuilder messageConverters(final List> messageConverters) {
        this.messageConverters = messageConverters;
        return this;
    }

    @java.lang.SuppressWarnings("all")
    @javax.annotation.Generated("lombok")
    public OAuth2RestTemplateBuilder problemHandlers(final List problemHandlers) {
        this.problemHandlers = problemHandlers;
        return this;
    }

    @java.lang.SuppressWarnings("all")
    @javax.annotation.Generated("lombok")
    public OAuth2RestTemplateBuilder protectedResourceDetails(final OAuth2ProtectedResourceDetails protectedResourceDetails) {
        this.protectedResourceDetails = protectedResourceDetails;
        return this;
    }

    @java.lang.SuppressWarnings("all")
    @javax.annotation.Generated("lombok")
    public OAuth2RestTemplateBuilder sslContext(final SSLContext sslContext) {
        this.sslContext = sslContext;
        return this;
    }

    @java.lang.Override
    @java.lang.SuppressWarnings("all")
    @javax.annotation.Generated("lombok")
    public java.lang.String toString() {
        return "OAuth2RestTemplateBuilder(logger=" + this.logger + ", clientContext=" + this.clientContext + ", hostnameVerifier=" + this.hostnameVerifier + ", messageConverters=" + this.messageConverters + ", problemHandlers=" + this.problemHandlers + ", protectedResourceDetails=" + this.protectedResourceDetails + ", sslContext=" + this.sslContext + ")";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy