Merge branch 'master' of git@83.233.175.44:hermes
[hermes] / package / src / org / maemo / hermes / engine / linkedin / api.py
index ceb2c00..fe0c80f 100644 (file)
@@ -13,10 +13,12 @@ class LinkedInApi():
     GCONF_API_KEY = '/apps/maemo/hermes/linkedin_key'
     GCONF_API_SECRET = '/apps/maemo/hermes/linkedin_secret'
     GCONF_ACCESS_TOKEN = '/apps/maemo/hermes/linkedin_access_token'
+    GCONF_USER = '/apps/maemo/hermes/linkedin_user'
     
     LI_SERVER = "api.linkedin.com"
     LI_API_URL = "https://api.linkedin.com"
     LI_CONN_API_URL = LI_API_URL + "/v1/people/~/connections"
+    LI_PROFILE_API_URL = LI_API_URL + "/v1/people/~"
 
     REQUEST_TOKEN_URL = LI_API_URL + "/uas/oauth/requestToken"
     AUTHORIZE_URL = LI_API_URL + "/uas/oauth/authorize"
@@ -42,14 +44,14 @@ class LinkedInApi():
 
         self.consumer = oauth.OAuthConsumer(api_key, secret_key)
         self.sig_method = oauth.OAuthSignatureMethod_HMAC_SHA1()
-        
+
 
     # -----------------------------------------------------------------------
     def authenticate(self, need_auth, block_for_auth):
         need_auth()
         token = self._get_request_token()
         url = self._get_authorize_url(token)
-        verifier = block_for_auth(True, url)
+        verifier = block_for_auth(url)
         self._verify_verifier(token, verifier)
     
     
@@ -195,6 +197,10 @@ class LinkedInApi():
     def _verify_verifier(self, request_token, verifier):
         try:
             self.access_token = self._get_access_token(request_token, verifier)
+            xml = self._make_api_request(self.LI_PROFILE_API_URL)
+            dom = parseString(xml)
+            friends = self._parse_dom(dom)
+            self._gc.set_string(LinkedInApi.GCONF_USER, friends[0].get_name())
         except Exception, e:
             import traceback
             traceback.print_exc()
@@ -203,6 +209,9 @@ class LinkedInApi():
 
     # -----------------------------------------------------------------------
     def _store_access_token_in_gconf(self, token_str):
+        if "oauth_problem" in token_str:
+            raise Exception("Authorization failure - access token reported OAuth problem")
+        
         self._gc.set_string(LinkedInApi.GCONF_ACCESS_TOKEN, token_str)
 
         
@@ -213,9 +222,6 @@ class LinkedInApi():
         token_str = self._gc.get_string(LinkedInApi.GCONF_ACCESS_TOKEN)
         if not token_str:
             return None
-        if "oauth_problem" in token_str:
-            self._store_access_token_in_gconf("")
-            raise Exception("Authorization failure - access token reported OAuth problem")
         return oauth.OAuthToken.from_string(token_str)
 
 
@@ -223,4 +229,5 @@ class LinkedInApi():
     def remove_access_token_from_gconf(self):
         """Remove the oauth.OAuthToken, if any."""
         
-        self._gc.unset(LinkedInAPI.GCONF_ACCESS_TOKEN)
+        self._gc.unset(LinkedInApi.GCONF_ACCESS_TOKEN)
+        self._gc.unset(LinkedInApi.GCONF_USER)