package qa.qcri.aidr.manager.social.configuration; import java.sql.Timestamp; import java.util.UUID; import javax.annotation.Resource; import javax.inject.Inject; import org.springframework.social.connect.Connection; import org.springframework.social.connect.ConnectionData; import org.springframework.social.connect.ConnectionSignUp; import org.springframework.social.connect.UserProfile; import org.springframework.social.connect.support.OAuth1Connection; import org.springframework.social.connect.support.OAuth2Connection; import org.springframework.stereotype.Component; import qa.qcri.aidr.manager.persistence.entities.UserAccount; import qa.qcri.aidr.manager.persistence.entities.UserConnection; import qa.qcri.aidr.manager.service.UserConnectionService; import qa.qcri.aidr.manager.service.UserService; import qa.qcri.aidr.manager.util.Constants; @Component("userConnectionSignUp") public class UserConnectionSignUp implements ConnectionSignUp { @Inject private UserConnectionService userConnectionService; @Resource(name="userService") private UserService userService; @Override public String execute(Connection<?> connection) { if(connection instanceof OAuth1Connection){ OAuth1Connection<?> oauthConnection = (OAuth1Connection<?>) connection; ConnectionData data = oauthConnection.createData(); UserProfile profile = oauthConnection.fetchUserProfile(); UserConnection userConnection = new UserConnection(); userConnection.setUserId(profile.getUsername()); userConnection.setImageUrl(data.getImageUrl()); userConnection.setProfileUrl(data.getProfileUrl()); userConnection.setAccessToken(data.getAccessToken()); userConnection.setSecret(data.getSecret()); userConnection.setRefreshToken(data.getRefreshToken()); userConnection.setProviderUserId(data.getProviderUserId()); /** * This is custom SignUp and for it providerID should be springSecurity */ userConnection.setProviderId("springSocialSecurity"); userConnection.setDisplayName(data.getDisplayName()); userConnection.setRank(1); userConnectionService.register(userConnection); if(userService.fetchByUserName(data.getProviderId() + Constants.USER_NAME_SPLITTER + profile.getUsername()) == null){ Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis()); UserAccount user = new UserAccount(); user.setApiKey(UUID.randomUUID().toString()); user.setCreatedAt(currentTimestamp); user.setUpdatedAt(currentTimestamp); user.setProvider(data.getProviderId()); user.setUserName(data.getProviderId() + Constants.USER_NAME_SPLITTER + profile.getUsername()); userService.save(user); } return profile.getUsername(); }else if (connection instanceof OAuth2Connection) { OAuth2Connection<?> oauthConnection = (OAuth2Connection<?>) connection; ConnectionData data = oauthConnection.createData(); UserProfile profile = oauthConnection.fetchUserProfile(); UserConnection userConnection = new UserConnection(); userConnection.setUserId(profile.getEmail()); userConnection.setImageUrl(data.getImageUrl()); userConnection.setProfileUrl(data.getProfileUrl()); userConnection.setAccessToken(data.getAccessToken()); userConnection.setSecret(data.getSecret()); userConnection.setRefreshToken(data.getRefreshToken()); userConnection.setProviderUserId(data.getProviderUserId()); userConnection.setProviderId("springSocialSecurity"); userConnection.setDisplayName(data.getDisplayName()); userConnection.setRank(1); userConnectionService.register(userConnection); if(userService.fetchByUserName(data.getProviderId() + Constants.USER_NAME_SPLITTER + profile.getEmail()) == null){ Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis()); UserAccount user = new UserAccount(); user.setApiKey(UUID.randomUUID().toString()); user.setCreatedAt(currentTimestamp); user.setUpdatedAt(currentTimestamp); user.setProvider(data.getProviderId()); user.setUserName(data.getProviderId() + Constants.USER_NAME_SPLITTER + profile.getEmail()); user.setEmail(profile.getEmail()); userService.save(user); } return profile.getEmail(); } return connection.fetchUserProfile().getUsername(); } }