package qa.qcri.aidr.data.social.configuration; import javax.sql.DataSource; import org.socialsignin.springsocial.security.signin.SpringSocialSecuritySignInService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.ScopedProxyMode; 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.crypto.encrypt.TextEncryptor; import org.springframework.social.connect.ConnectionRepository; import org.springframework.social.connect.UsersConnectionRepository; import org.springframework.social.connect.jdbc.JdbcUsersConnectionRepository; import org.springframework.social.connect.support.ConnectionFactoryRegistry; import org.springframework.social.connect.web.ConnectController; import org.springframework.social.connect.web.ProviderSignInController; @Configuration public class SocialConfig { @Value("${callBackURL}") private String callbackURL; @Autowired private DataSource dataSource; @Autowired private Environment env; @Autowired UserConnectionSignUp userConnectionSignUp; @Autowired private ConnectionFactoryRegistry connectionFactoryLocator; @Bean public TextEncryptor textEncryptor() { return Encryptors.noOpText(); } @Bean public UsersConnectionRepository usersConnectionRepository() { JdbcUsersConnectionRepository jdbcUsersConnectionRepository = new JdbcUsersConnectionRepository(dataSource, connectionFactoryLocator, textEncryptor()); jdbcUsersConnectionRepository.setConnectionSignUp(userConnectionSignUp); return jdbcUsersConnectionRepository; } @Bean @Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES) public ConnectionRepository connectionRepository() { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (auth == null) { throw new IllegalStateException("No User Signed in"); } return usersConnectionRepository().createConnectionRepository(auth.getName()); } @Bean public ConnectController connectController() { ConnectController connectController = new ConnectController(connectionFactoryLocator, connectionRepository()); connectController.setApplicationUrl(callbackURL); return connectController; } @Bean public ProviderSignInController providerSignInController() { ProviderSignInController providerSignInController = new ProviderSignInController(connectionFactoryLocator, usersConnectionRepository(), new SpringSocialSecuritySignInService()); providerSignInController.setSignInUrl("/login"); providerSignInController.setSignUpUrl("/signup"); providerSignInController.setPostSignInUrl("/authenticate"); providerSignInController.setApplicationUrl(callbackURL); return providerSignInController; } }