def oauth_validate_token(self, entity_id=None, params={}):
     next_url=params.get('next_url', settings.FACEBOOK_CONNECTOR_REDIRECT_URI)
     decode = params.get('decode', False)
     if decode:
         next_url=urllib.unquote(next_url)
     client=Oauth2WebFlow('graph.facebook.com', 
                                     settings.FACEBOOK_CONNECTOR_API_KEY,
                                     settings.FACEBOOK_CONNECTOR_SECRET_KEY, 
                                     next_url)
     try:
         tokenized_url = params.get('tokenized_url')
         if tokenized_url and tokenized_url!="":
             decode = params.get('decode', False)
     
             if decode:
                 tokenized_url=urllib.unquote(tokenized_url)
             parsed=urlparse(tokenized_url)
             parsed_params=dict([item.split('=')[0], item.split('=')[1]] for item in parsed.query.split('&'))   
             code = urllib.unquote(parsed_params.get('code'))
             access_token = client.getAccessToken(code)
             
             facebook_params=None
             if access_token:
                 entity_type=self.object_name.split("_")[-1]
                 if entity_id is None:
                     facebook_params=self.graph(None, {}, access_token)
                     remote_id = "%s" % facebook_params['id']
                     entity_name="%s %s" % (facebook_params.get('first_name'), facebook_params.get('last_name'))
                     entity_slug=microtime_slug()
                     try:
                         my_entity=add_entity({"slug":entity_slug, 
                                               "name":entity_name, 
                                               "type":entity_type,
                                               "remote_id":remote_id,
                                               "attributes":{"access_token": access_token}
                                               })
                         entity_id=my_entity.id
                     except Exception, err:
                         try:
                             my_entity=get_entity({"remote_id":remote_id, "type":entity_type})[0]
                             entity_id=my_entity.id
                             super(CustomConnector, self).update_record(entity_id, {"access_token": access_token})
                         except Exception, err:
                             raise ApiError(None, 3923, "----->%s - %s" % (Exception, err))
                 else:
                     my_entity=get_entity({"id":str(entity_id), "type":entity_type})[0]
                     super(CustomConnector, self).update_record(entity_id, {"access_token": access_token})
             else:
 def oauth_validate_token(self, entity_id=None, params={}):
     api = LinkedIn(settings.LINKEDIN_OAUTH_CONSUMER_KEY, 
                             settings.LINKEDIN_OAUTH_CONSUMER_SECRET, 
                             params.get('next_url', settings.LINKEDIN_OAUTH_RETURN_URL))
     try:
         tokenized_url = params.get('tokenized_url')
         if tokenized_url and tokenized_url!="":
             decode = params.get('decode', False)
     
             if decode:
                 tokenized_url=urllib.unquote(tokenized_url)
             parsed=urlparse(tokenized_url)
             parsed_params=dict([item.split('=')[0], item.split('=')[1]] for item in parsed.query.split('&'))                
             oauth_token = urllib.unquote(parsed_params.get('oauth_token'))
             self.cursor.execute(QUERY_GET_OAUTH_RECORD % (DM_DATABASE_NAME, oauth_token, "linkedinConnector"))
 
             record=[dict(zip(['pickled'], row)) for row in self.cursor.fetchall()]
 
             api = pickle.loads(base64.decodestring(record[0].get('pickled')))
                                 
             oauth_verifier = str(parsed_params.get('oauth_verifier'))
             # After you get the verifier, you call the accessToken() method to get the access token.
             result = api.accessToken(verifier=oauth_verifier) # result can be True or False
             
             if result:
                 entity_type=self.object_name.split("_")[-1]
                 if entity_id is None:
                     profile_fields=["id", 
                        "first-name",
                        "last-name",
                        ]
                     profile = api.GetProfile(None, None, profile_fields)
                     attributes=profile.to_dict()
                     remote_id = "%s" % attributes['id']
                     entity_name="%s %s" % (attributes.get('first-name'), attributes.get('last-name'))
                     entity_slug=microtime_slug()
                     try:
                         my_entity=add_entity({"slug":entity_slug, 
                                               "name":entity_name, 
                                               "type":entity_type,
                                               "remote_id":remote_id,
                                               "attributes":{
                                                     "access_token_secret":api.access_token_secret,
                                                     "access_token": api.access_token
                                                     }
                                               })
                         entity_id=my_entity.id
                     except Exception, err:
                         try:
                             my_entity=get_entity({"remote_id":remote_id, "type":entity_type})[0]
                             entity_id=my_entity.id
                             super(CustomConnector, self).update_record(entity_id, {
                                                     "access_token_secret":api.access_token_secret,
                                                     "access_token": api.access_token
                                                     })
                         except Exception, err:
                             raise ApiError(None, 3923, "%s - %s" % (Exception, err))
                 else:
                     my_entity=get_entity({"id":str(entity_id), "type":entity_type})[0]
                     super(CustomConnector, self).update_record(entity_id, 
                                                                 {"access_token_secret":api.access_token_secret,
                                                                  "access_token": api.access_token})
                 try:
                     query=QUERY_DELETE_OAUTH_RECORD % (DM_DATABASE_NAME,oauth_token, "linkedinConnector")
                     self.do_query(query)
                 except Exception, err:
                     Logger().error("Error: %s (%s)" % (err, query))
Example #3
0
 def add(self):
     return em.add_entity(self.raw_data)
    def oauth_validate_token(self, entity_id=None, params={}):
        pos=1
        self.trace(pos)
        try:
    
            tokenized_url = params.get('tokenized_url')
            decode = params.get('decode', False)

            if decode:
                tokenized_url=urllib.unquote(tokenized_url)
            parsed=urlparse(tokenized_url)
        
            self.trace(pos)
            
            parsed_params=dict([item.split('=')[0], item.split('=')[1]] for item in parsed.query.split('&'))                

            oauth_token = urllib.unquote(parsed_params.get('oauth_token'))

            oauth_verifier = urllib.unquote(parsed_params.get('oauth_verifier'))

            self.trace(pos)
            
            self.cursor.execute(QUERY_GET_OAUTH_RECORD % (DM_DATABASE_NAME, oauth_token, "twitterConnector"))
    
            record=[dict(zip(['pickled'], row)) for row in self.cursor.fetchall()]
            record = cjson.decode(record[0].get('pickled'))

            self.trace(pos)
            
            auth = self.get_auth()
            auth.set_request_token(record['key'],record['secret'])

            auth.get_access_token(oauth_verifier)

            self.trace(pos)
            
            self.key= auth.access_token.key
            self.secret=auth.access_token.secret

            auth.set_access_token(self.key, self.secret)

            api = tweepy.API(auth)

            self.trace(pos)
            
            try:
                query=QUERY_DELETE_OAUTH_RECORD % (DM_DATABASE_NAME,oauth_token, "twitterConnector")
                self.do_query(query)
            except Exception, err:
                Logger().error("Error: %s (%s)" % (err, query))
                #raise Exception, err

            me =api.me()
            my_id=getattr(me,'id')
            my_name=getattr(me,'name')
            if my_name is None or my_name =="":
                my_name=getattr(me,'screen_name')
            entity_type=self.object_name.split("_")[-1]
            attributes={"token_key":self.key, "token_secret":self.secret}

            self.trace(pos)
            
            entity_type=self.object_name.split("_")[-1]
            if entity_id is None:
                remote_id = "%s" % getattr(me,'id')
                entity_name=my_name
                entity_slug=microtime_slug()
                try:
                    my_entity=add_entity({"slug":entity_slug, 
                                          "name":entity_name, 
                                          "type":entity_type,
                                          "remote_id":remote_id,
                                          "attributes":attributes
                                          })
                    entity_id=my_entity.id
                except Exception, err:
                    try:
                        my_entity=get_entity({"remote_id":remote_id, "type":entity_type})[0]
                        entity_id=my_entity.id
                        super(CustomConnector, self).update_record(entity_id, attributes)
                    except Exception, err:
                        raise ApiError(None, 3923, "%s - %s" % (Exception, err))