package org.springframework.security.oauth.examples.config;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.support.ConversionServiceFactoryBean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.MediaType;
import org.springframework.http.converter.BufferedImageHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.security.oauth.examples.tonr.SparklrService;
import org.springframework.security.oauth.examples.tonr.converter.AccessTokenRequestConverter;
import org.springframework.security.oauth.examples.tonr.impl.SparklrServiceImpl;
import org.springframework.security.oauth.examples.tonr.mvc.FacebookController;
import org.springframework.security.oauth.examples.tonr.mvc.SparklrController;
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
import org.springframework.web.accept.ContentNegotiationManagerFactoryBean;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.json.MappingJacksonJsonView;
@Configuration
@EnableWebMvc
@ImportResource("/WEB-INF/spring-servlet.xml")
//@Import(SecurityConfig.class)
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Bean
public PropertySourcesPlaceholderConfigurer myPropertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer p = new PropertySourcesPlaceholderConfigurer();
p.setLocation(new ClassPathResource("sparklr.properties"));
return p;
}
@Bean
public ContentNegotiatingViewResolver contentViewResolver() throws Exception {
ContentNegotiatingViewResolver contentViewResolver = new ContentNegotiatingViewResolver();
ContentNegotiationManagerFactoryBean contentNegotiationManager = new ContentNegotiationManagerFactoryBean();
contentNegotiationManager.addMediaType("json", MediaType.APPLICATION_JSON);
contentViewResolver.setContentNegotiationManager(contentNegotiationManager.getObject());
contentViewResolver.setDefaultViews(Arrays.<View>asList(new MappingJacksonJsonView()));
return contentViewResolver;
}
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public SparklrController sparklrController(SparklrService sparklrService) {
SparklrController controller = new SparklrController();
controller.setSparklrService(sparklrService);
return controller;
}
@Bean
public FacebookController facebookController(@Qualifier("facebookRestTemplate") OAuth2RestTemplate facebookRestTemplate) {
FacebookController controller = new FacebookController();
controller.setFacebookRestTemplate(facebookRestTemplate);
return controller;
}
@Bean
public SparklrServiceImpl sparklrService(@Value("${sparklrPhotoListURL}") String sparklrPhotoListURL,
@Value("${sparklrPhotoURLPattern}") String sparklrPhotoURLPattern,
@Value("${sparklrTrustedMessageURL}") String sparklrTrustedMessageURL,
@Qualifier("sparklrRestTemplate") OAuth2RestTemplate sparklrRestTemplate,
@Qualifier("trustedClientRestTemplate") OAuth2RestTemplate trustedClientRestTemplate) {
SparklrServiceImpl sparklrService = new SparklrServiceImpl();
sparklrService.setSparklrPhotoListURL(sparklrPhotoListURL);
sparklrService.setSparklrPhotoURLPattern(sparklrPhotoURLPattern);
sparklrService.setSparklrTrustedMessageURL(sparklrTrustedMessageURL);
sparklrService.setSparklrRestTemplate(sparklrRestTemplate);
sparklrService.setTrustedClientRestTemplate(trustedClientRestTemplate);
return sparklrService;
}
@Bean
public ConversionServiceFactoryBean conversionService() {
ConversionServiceFactoryBean conversionService = new ConversionServiceFactoryBean();
conversionService.setConverters(Collections.singleton(new AccessTokenRequestConverter()));
return conversionService;
}
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters) {
converters.add(new BufferedImageHttpMessageConverter());
}
}