package io.loli.box.social; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.encrypt.Encryptors; import org.springframework.security.web.savedrequest.HttpSessionRequestCache; import org.springframework.social.UserIdSource; import org.springframework.social.config.annotation.ConnectionFactoryConfigurer; import org.springframework.social.config.annotation.EnableSocial; import org.springframework.social.config.annotation.SocialConfigurer; import org.springframework.social.connect.ConnectionFactoryLocator; import org.springframework.social.connect.UsersConnectionRepository; import org.springframework.social.connect.jpa.JpaTemplate; import org.springframework.social.connect.jpa.JpaUsersConnectionRepository; import org.springframework.social.connect.web.ProviderSignInController; import org.springframework.social.security.SocialAuthenticationProvider; import javax.sql.DataSource; /** * @author choco */ @EnableSocial @Configuration @ComponentScan("org.springframework.social.connect.jpa.hibernate") @EntityScan("org.springframework.social.connect.jpa.hibernate") @ConditionalOnBean(SocialAuthenticationProvider.class) public class SocialConfig implements SocialConfigurer { @Autowired private DataSource dataSource; @Autowired private JpaTemplate jpaTemplate; @Override public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) { } @Override public UserIdSource getUserIdSource() { return () -> { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null) { throw new IllegalStateException("Unable to get a ConnectionRepository: no user signed in"); } return authentication.getName(); }; } @Override public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) { return new JpaUsersConnectionRepository(jpaTemplate, connectionFactoryLocator, Encryptors.noOpText()); } @Bean public ProviderSignInController providerSignInController(ConnectionFactoryLocator connectionFactoryLocator, UsersConnectionRepository usersConnectionRepository) { return new ProviderSignInController(connectionFactoryLocator, usersConnectionRepository, new SimpleSignInAdapter(new HttpSessionRequestCache())); } }