doortts doortts 2017-02-11
social-login: Provide option which sync with local user name
@993f586adda6b5726c5ffd95cae3f16624ce018e
app/service/YonaUserServicePlugin.java
--- app/service/YonaUserServicePlugin.java
+++ app/service/YonaUserServicePlugin.java
@@ -3,10 +3,13 @@
 import com.feth.play.module.pa.service.UserServicePlugin;
 import com.feth.play.module.pa.user.AuthUser;
 import com.feth.play.module.pa.user.AuthUserIdentity;
+import com.feth.play.module.pa.user.BasicIdentity;
+import models.User;
 import models.UserCredential;
 import play.Application;
 
 public class YonaUserServicePlugin extends UserServicePlugin {
+    private static boolean useSocialNameSync = play.Configuration.root().getBoolean("application.use.social.login.name.sync", false);
 
 	public YonaUserServicePlugin(final Application app) {
 		super(app);
@@ -29,12 +32,29 @@
 		// ...and dont forget to sync the cache when users get deactivated/deleted
 		final UserCredential u = UserCredential.findByAuthUserIdentity(identity);
 		if(u != null) {
+			if(useSocialNameSync && identity instanceof BasicIdentity){
+				BasicIdentity authUser = ((BasicIdentity) identity);
+				if(!u.name.equals(authUser.getName())){
+					updateLocalUserName(u, authUser);
+				}
+			}
 			return u.id;
 		} else {
 			return null;
 		}
 	}
 
+	private void updateLocalUserName(UserCredential u, BasicIdentity authUser) {
+		u.name = authUser.getName();
+		u.update();
+
+		User localUser = User.findByEmail(authUser.getEmail());
+		if(localUser != null){
+            localUser.name = authUser.getName();
+            localUser.update();
+        }
+	}
+
 	@Override
 	public AuthUser merge(final AuthUser newUser, final AuthUser oldUser) {
 		if (!oldUser.equals(newUser)) {
conf/application.conf.default
--- conf/application.conf.default
+++ conf/application.conf.default
@@ -275,6 +275,9 @@
 # Prevent using Yona's own login system
 application.use.social.login.only = false
 
+# If true, update local user name with social login account name
+application.use.social.login.name.sync = false
+
 # Allowed OAuth social login provider
 # choice: github, google
 application.social.login.support = "github, google"
Add a comment
List