r7047 - in dumbhippo/trunk/server/src/com/dumbhippo: server server/impl server/views services web web/servlets



Author: marinaz
Date: 2007-12-12 18:27:10 -0600 (Wed, 12 Dec 2007)
New Revision: 7047

Modified:
   dumbhippo/trunk/server/src/com/dumbhippo/server/FacebookTracker.java
   dumbhippo/trunk/server/src/com/dumbhippo/server/impl/FacebookTrackerBean.java
   dumbhippo/trunk/server/src/com/dumbhippo/server/impl/PersonViewerBean.java
   dumbhippo/trunk/server/src/com/dumbhippo/server/views/PersonView.java
   dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookSaxHandler.java
   dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookWebServices.java
   dumbhippo/trunk/server/src/com/dumbhippo/web/SigninBean.java
   dumbhippo/trunk/server/src/com/dumbhippo/web/UserSigninBean.java
   dumbhippo/trunk/server/src/com/dumbhippo/web/servlets/FacebookServlet.java
Log:
Make a request to Facebook to get the user's name when all we have for the user is their Facebook id. (The other option was saying something like "Hello, Facebook user 701701!")

Check if the user has accepted terms of use for deciding if the account is active in SigninBean and UserSigninBean.

Modified: dumbhippo/trunk/server/src/com/dumbhippo/server/FacebookTracker.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/server/FacebookTracker.java	2007-12-12 23:32:58 UTC (rev 7046)
+++ dumbhippo/trunk/server/src/com/dumbhippo/server/FacebookTracker.java	2007-12-13 00:27:10 UTC (rev 7047)
@@ -18,6 +18,8 @@
 
 	public User createNewUserWithFacebookAccount(String sessionKey, String facebookUserId, boolean applicationEnabled) throws FacebookSystemException;
 
+	public FacebookAccount getFacebookAccount(String facebookUserId);
+	
 	public void updateFbmlForUser(User user);
 	
 	public void updateMessageCount(long facebookAccountId);

Modified: dumbhippo/trunk/server/src/com/dumbhippo/server/impl/FacebookTrackerBean.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/server/impl/FacebookTrackerBean.java	2007-12-12 23:32:58 UTC (rev 7046)
+++ dumbhippo/trunk/server/src/com/dumbhippo/server/impl/FacebookTrackerBean.java	2007-12-13 00:27:10 UTC (rev 7047)
@@ -245,7 +245,7 @@
 		return user;
 	}
 	
-	private FacebookAccount getFacebookAccount(String facebookUserId) {
+	public FacebookAccount getFacebookAccount(String facebookUserId) {
 		Query accountQuery = em.createQuery("from FacebookAccount f where f.facebookUserId = :facebookUserId");
 		accountQuery.setParameter("facebookUserId", facebookUserId);
 		try {

Modified: dumbhippo/trunk/server/src/com/dumbhippo/server/impl/PersonViewerBean.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/server/impl/PersonViewerBean.java	2007-12-12 23:32:58 UTC (rev 7046)
+++ dumbhippo/trunk/server/src/com/dumbhippo/server/impl/PersonViewerBean.java	2007-12-13 00:27:10 UTC (rev 7047)
@@ -26,6 +26,7 @@
 import com.dumbhippo.persistence.Contact;
 import com.dumbhippo.persistence.ContactClaim;
 import com.dumbhippo.persistence.EmailResource;
+import com.dumbhippo.persistence.FacebookAccount;
 import com.dumbhippo.persistence.FacebookResource;
 import com.dumbhippo.persistence.Person;
 import com.dumbhippo.persistence.Resource;
@@ -34,6 +35,7 @@
 import com.dumbhippo.server.AccountSystem;
 import com.dumbhippo.server.Configuration;
 import com.dumbhippo.server.ExternalAccountSystem;
+import com.dumbhippo.server.FacebookTracker;
 import com.dumbhippo.server.HippoProperty;
 import com.dumbhippo.server.IdentitySpider;
 import com.dumbhippo.server.InvitationSystem;
@@ -47,6 +49,7 @@
 import com.dumbhippo.server.views.SystemViewpoint;
 import com.dumbhippo.server.views.UserViewpoint;
 import com.dumbhippo.server.views.Viewpoint;
+import com.dumbhippo.services.FacebookWebServices;
 
 /*
  * An implementation of the Identity Spider.  It sucks your blood.
@@ -56,6 +59,9 @@
 public class PersonViewerBean implements PersonViewer {
 	static private final Logger logger = GlobalSetup
 			.getLogger(PersonViewer.class);
+	
+	// how long to wait on the Facebook API call
+	static protected final int REQUEST_TIMEOUT = 1000 * 12;
 
 	@PersistenceContext(unitName = "dumbhippo")
 	private EntityManager em;
@@ -77,6 +83,9 @@
 	@EJB
 	private AccountSystem accountSystem;
 	
+	@EJB
+	private FacebookTracker facebookTracker;
+	
 	private Set<Resource> getResourcesForPerson(Person person) {
 		Set<Resource> resources = new HashSet<Resource>();
 		if (person instanceof User) {
@@ -292,6 +301,27 @@
 			addPersonViewExtra(viewpoint, pv, resources, e);
 		}
 
+		if (pv.getUser() != null && (pv.getUser().getNickname() == null || pv.getUser().getNickname().length() == 0)) {
+            // we need to get the user's name from Facebook if Facebook is the only resource available for 
+			// the user that can provide us with a name
+			FacebookResource fr = null;
+			for (Resource r : resources) {
+				if (r instanceof FacebookResource) {
+					fr = (FacebookResource)r;
+				} else if (r instanceof EmailResource || r instanceof AimResource) {
+					fr = null;
+					break;
+				}
+			}
+			
+			if (fr != null) {			
+				FacebookWebServices ws = new FacebookWebServices(REQUEST_TIMEOUT, config);
+				FacebookAccount facebookAccount = facebookTracker.getFacebookAccount(fr.getFacebookUserId());
+				String name = ws.getName(facebookAccount);
+				pv.setFallbackName(name);
+			}
+		}
+		
 		if (pv.getAim() != null) {
 			pv.setAimPresenceKey(getAimPresenceKey());
 		}

Modified: dumbhippo/trunk/server/src/com/dumbhippo/server/views/PersonView.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/server/views/PersonView.java	2007-12-12 23:32:58 UTC (rev 7046)
+++ dumbhippo/trunk/server/src/com/dumbhippo/server/views/PersonView.java	2007-12-13 00:27:10 UTC (rev 7047)
@@ -24,6 +24,7 @@
 import com.dumbhippo.persistence.Contact;
 import com.dumbhippo.persistence.EmailResource;
 import com.dumbhippo.persistence.ExternalAccountType;
+import com.dumbhippo.persistence.FacebookResource;
 import com.dumbhippo.persistence.Resource;
 import com.dumbhippo.persistence.Sentiment;
 import com.dumbhippo.persistence.User;
@@ -174,7 +175,8 @@
 		// PrimaryResource will not be included or will be null if the viewer should
 		// not see it
 		if (name == null || name.length() == 0) {
-			if (getPrimaryResource() == null) {
+			Resource primaryResource = getPrimaryResource();
+			if (primaryResource == null) {
 				// try fallback name then
 				if (fallbackName != null) {
 					name = fallbackName;
@@ -183,7 +185,10 @@
 					logger.warn("PersonView has no User, Resource, or fallback name; totally useless: " + this);
 				}
 			} else {
-                name = getPrimaryResource().getHumanReadableString();
+				if (primaryResource instanceof FacebookResource && fallbackName != null && fallbackName.trim().length() > 0)
+					name = fallbackName;
+				else
+                    name = primaryResource.getHumanReadableString();
 			}
 		}
 		

Modified: dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookSaxHandler.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookSaxHandler.java	2007-12-12 23:32:58 UTC (rev 7046)
+++ dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookSaxHandler.java	2007-12-13 00:27:10 UTC (rev 7047)
@@ -27,8 +27,10 @@
 		unread,
 		most_recent,
 		
-		// facebook.users.getInfo, we only get a wall_count field from it
+		// facebook.users.getInfo, we get wall_count, first_name, and last_name fields from it
 		wall_count,
+		first_name,
+		last_name,
 		
 		// general for facebook.photos.get and facebook.photos.getAlbums
 		created,
@@ -90,6 +92,8 @@
 	private int unreadMessageCount;
 	private int mostRecentMessageId;
 	private int wallMessageCount;
+	private String firstName;
+	private String lastName;
 	private int unseenPokeCount;
 	private int mostRecentPokeId;
 	private int errorCode;
@@ -110,6 +114,8 @@
 		unreadMessageCount = -1;
 		mostRecentMessageId = -1;
 		wallMessageCount = -1;
+		firstName = "";
+		lastName = "";
 		unseenPokeCount = -1;
         mostRecentPokeId = -1;
 		errorCode = -1;
@@ -211,6 +217,10 @@
 			}
 		} else if (c == Element.wall_count) {
 			wallMessageCount = parseFacebookCount(c, currentContent); 
+		} else if (c == Element.first_name) {
+			firstName = currentContent;
+		} else if (c == Element.last_name) {
+			lastName = currentContent;
 		} else if (c == Element.link) {
 			if (gettingTaggedPhotos) {
 			    currentFacebookPhotoData().setLink(currentContent);
@@ -301,6 +311,14 @@
 		return wallMessageCount;
 	}
 
+	public String getFirstName() {
+		return firstName;
+	}
+	
+	public String getLastName() {
+		return lastName;
+	}
+	
 	public int getUnseenPokeCount() {
 		return unseenPokeCount;
 	}

Modified: dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookWebServices.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookWebServices.java	2007-12-12 23:32:58 UTC (rev 7046)
+++ dumbhippo/trunk/server/src/com/dumbhippo/services/FacebookWebServices.java	2007-12-13 00:27:10 UTC (rev 7047)
@@ -213,6 +213,25 @@
 		}
 		return null;
 	}
+
+	public String getName(FacebookAccount facebookAccount) {
+		List<String> params = new ArrayList<String>();
+		String methodName = "facebook.users.getInfo";
+        params.add("method=" + methodName);
+		params.add("session_key=" + facebookAccount.getSessionKey());
+		params.add("uids=" + facebookAccount.getFacebookUserId());
+		params.add("fields=first_name,last_name");
+		
+		String wsUrl = generateFacebookRequest(params);
+
+		FacebookSaxHandler handler = parseUrl(new FacebookSaxHandler(), wsUrl);
+
+		if (handleErrorCode(facebookAccount, handler, methodName)) {
+			return "";
+		}
+		
+		return handler.getFirstName() + " " + handler.getLastName();
+	}
 	
 	// if we already have results, returning null might mean that there was no change in the photo
 	// count, so we decided not to bother about checking for changes on the individual photos

Modified: dumbhippo/trunk/server/src/com/dumbhippo/web/SigninBean.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/web/SigninBean.java	2007-12-12 23:32:58 UTC (rev 7046)
+++ dumbhippo/trunk/server/src/com/dumbhippo/web/SigninBean.java	2007-12-13 00:27:10 UTC (rev 7047)
@@ -180,7 +180,7 @@
 	public static String initializeAuthentication(HttpServletRequest request, HttpServletResponse response, Client client) {
 		Account account = client.getAccount();
 		User user = account.getOwner();
-		if (account.isActive()) {
+		if (account.isActive() && account.getHasAcceptedTerms()) {
 			setCookie(getSiteForRequest(request), response, user.getGuid(), client.getAuthKey());
 		} else {
 			SigninBean.storeGuid(request.getSession(), user.getGuid());
@@ -201,7 +201,7 @@
 	public static void initializeAuthenticationNoCookie(HttpServletRequest request, Client client) {
 		Account account = client.getAccount();
 		User user = account.getOwner();
-		if (account.isActive()) {
+		if (account.isActive() && account.getHasAcceptedTerms()) {
 			;
 		} else {
 			SigninBean.storeGuid(request.getSession(), user.getGuid());
@@ -223,7 +223,7 @@
 			try {
 				Client client = accountSystem.getExistingClient(userId, clientId);
 				Account account = client.getAccount();
-				if (account.isActive())
+				if (account.isActive() && account.getHasAcceptedTerms())
 					setCookie(getSiteForRequest(request), response, userId, client.getAuthKey());
 				else {
 					unsetCookie(response);

Modified: dumbhippo/trunk/server/src/com/dumbhippo/web/UserSigninBean.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/web/UserSigninBean.java	2007-12-12 23:32:58 UTC (rev 7046)
+++ dumbhippo/trunk/server/src/com/dumbhippo/web/UserSigninBean.java	2007-12-13 00:27:10 UTC (rev 7047)
@@ -99,7 +99,7 @@
 	
 	@Override
 	public boolean isActive() {
-		return getUser().getAccount().isActive();
+		return getUser().getAccount().isActive() && getUser().getAccount().getHasAcceptedTerms();
 	}
 	
 	@Override

Modified: dumbhippo/trunk/server/src/com/dumbhippo/web/servlets/FacebookServlet.java
===================================================================
--- dumbhippo/trunk/server/src/com/dumbhippo/web/servlets/FacebookServlet.java	2007-12-12 23:32:58 UTC (rev 7046)
+++ dumbhippo/trunk/server/src/com/dumbhippo/web/servlets/FacebookServlet.java	2007-12-13 00:27:10 UTC (rev 7047)
@@ -175,8 +175,8 @@
 		String baseUrl = config.getBaseUrlMugshot().toExternalForm();
 
         xml.appendTextNode("fb:header", "Musgshot");
-        xml.appendTextNode("div", "Mugshot allows you and your friends to see your activity from lots of other sites on the internet and automatically puts that in your profile and news feed.",
-                           "style", "margin-left:45px; margin-bottom:10px;");
+        xml.appendTextNode("div", "Mugshot allows you and your friends to see your activity from lots of other sites on the internet in a single place in your profile.",
+                           "style", "margin-left:45px; margin-bottom:10px;font-weight:bold;");
 		if (user != null && errorMessage == null) {
 			// check if there are mugshot params, process them, and display an appropriate message
 	        @SuppressWarnings("unchecked")



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]