package org.opentides.social.provider.service.impl;
import org.opentides.social.bean.SocialBaseUser;
import org.opentides.social.enums.SocialMediaType;
import org.opentides.social.provider.service.FacebookProviderService;
import org.opentides.social.service.SocialBaseUserService;
import org.opentides.social.service.SocialCredentialService;
import org.scribe.builder.api.FacebookApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.social.facebook.api.FacebookProfile;
import org.springframework.social.facebook.api.impl.FacebookTemplate;
import org.springframework.stereotype.Service;
/**
* Service that holds specific methods for specific Social Media
* and the one responsible for injecting Spring Social Requirements like:
* @clientSecret - Holds the client secret given by the Social Provider (e.g. Facebook, Google, and Twitter)
* @callback - Callback URL after authentication success.
* @appID - Holds the app id given by the Social Provider (e.g. Facebook, Google, and Twitter)
* @scope - Holds the list of scopes you need to get from the Social Provider (e.g. Facebook, Google, and Twitter)
*
* @author rabanes
*/
@Service(FacebookProviderServiceImpl.NAME)
public class FacebookProviderServiceImpl extends SocialProviderServiceImpl implements FacebookProviderService {
public static final String NAME = "facebookProviderService";
@Autowired
private SocialBaseUserService socialBaseUserService;
@Autowired
private SocialCredentialService socialCredentialService;
public FacebookProviderServiceImpl() {
super();
setProvider(FacebookApi.class);
}
@Override
public void registerFacebookAccount(SocialBaseUser socialUser, String facebookAccessToken) {
FacebookTemplate facebookTemplate = new FacebookTemplate(facebookAccessToken);
FacebookProfile profile = facebookTemplate.userOperations().getUserProfile();
// Create Social Credential
socialCredentialService.createSocialCredential(SocialMediaType.FACEBOOK, profile.getId(), profile.getEmail(), socialUser);
if(socialUser.getId() == null) {
socialUser.setSkipAudit(true);
socialUser.setFirstName(profile.getFirstName());
socialUser.setLastName(profile.getLastName());
socialUser.setMiddleName(profile.getMiddleName());
socialUser.setEmailAddress(profile.getEmail());
socialUser.setCredential(socialBaseUserService.getBaseUserService().generateFakeCredentials());
socialBaseUserService.getBaseUserService().registerUser(socialUser, false);
} else {
socialBaseUserService.save(socialUser);
}
}
/* (non-Javadoc)
* @see org.opentides.social.service.impl.SocialProviderServiceImpl#setApiSecret(java.lang.String)
*/
@Value("${facebook.clientSecret}")
@Override
public void setApiSecret(String apiSecret) {
super.setApiSecret(apiSecret);
}
/* (non-Javadoc)
* @see org.opentides.social.service.impl.SocialProviderServiceImpl#setCallback(java.lang.String)
*/
@Value("${facebook.callback}")
@Override
public void setCallback(String callback) {
super.setCallback(callback);
}
/* (non-Javadoc)
* @see org.opentides.social.service.impl.SocialProviderServiceImpl#setApiKey(java.lang.String)
*/
@Value("${facebook.appID}")
@Override
public void setApiKey(String apiKey) {
super.setApiKey(apiKey);
}
/* (non-Javadoc)
* @see org.opentides.social.provider.service.impl.SocialProviderServiceImpl#setScope(java.lang.String)
*/
@Value("${facebook.scope}")
@Override
public void setScope(String scope) {
super.setScope(scope);
}
}