def twitter_get_oauth_url(callback_url): """ Gets the Twitter Oauth url """ consumer_token, consumer_secret = dbwrapper.get_service_tokens('Twitter') auth = tweepy.OAuthHandler(consumer_token, consumer_secret, callback_url) try: redirect_url = auth.get_authorization_url() except tweepy.TweepError: return False return redirect_url, auth.request_token.key, auth.request_token.secret
def oauth_dance(self, **kwargs): """ Performs oauth dance for the supported services with helper functions located in servicewrapper. """ if len(kwargs) != 0: self._services.update(kwargs) if 'user' in self._services: authtoken = dbwrapper.add_user(self._services['user']) cherrypy.session['tokens'] = {} cherrypy.session['tokens']['user'] = self._services['user'] cherrypy.session['tokens']['authtoken'] = authtoken # delete user from the dict because this method is called again # in the oauth dance loop adn we don't want to add user again if 'user' in self._services: del self._services['user'] cherrypy.lib.sessions.save() # get the Oauth urls for every service if len(self._services['Twitter']) > 1: url, key, secret = servicewrapper.twitter_get_oauth_url( self._callback_url) cherrypy.session['tokens']['twitter_key'] = key cherrypy.session['tokens']['twitter_secret'] = secret raise cherrypy.HTTPRedirect(url) if len(self._services['Foursquare']) > 1: url = servicewrapper.foursquare_get_oauth_url(self._callback_url) raise cherrypy.HTTPRedirect(url) if len(self._services['Facebook']) > 1: # Facebook module does not support Oauth so it's implemented here app_id, temp = dbwrapper.get_service_tokens('Facebook') args = dict(client_id=app_id, redirect_uri=self._callback_url, scope='publish_actions') raise cherrypy.HTTPRedirect( "https://www.facebook.com/dialog/oauth?" + urllib.urlencode(args)) raise cherrypy.InternalRedirect('success')
def foursquare_get_oauth_url(callback_url): """ This is not guaranteened to work... some problems in SSL with Foursquare. Foursquare uses a wildcard SSL cert so this needs a workaround. """ consumer_token, consumer_secret = dbwrapper.get_service_tokens( 'Foursquare') client = foursquare.Foursquare(consumer_token, consumer_secret, redirect_uri=unicode(callback_url)) try: auth_uri = client.oauth.auth_url() except: print 'Error! Failed to get request token.' return auth_uri
def twitter(authtoken, bac, service, lat, lon): """ Twitter data posting """ key, secret = dbwrapper.get_service_tokens('Twitter') data = dbwrapper.get_user_data(authtoken) status = 'Promilleja veressä: %s ‰' % bac try: auth = tweepy.OAuthHandler(key, secret) auth.set_access_token(data[3], data[4]) api = tweepy.API(auth) api.update_status(status=status, lat=str(lat), long=str(lon)) return True except: return False
def foursquare_save_access_token(authtoken, code, callback_url): """ This is not guaranteened to work... some problems in SSL with Foursquare. Foursquare uses a wildcard SSL cert so this needs a workaround. """ try: consumer_token, consumer_secret = dbwrapper.get_service_tokens( 'Foursquare') client = foursquare.Foursquare(consumer_token, consumer_secret, callback_url) access_token = client.oauth.get_token(code) dbwrapper.update_user(authtoken, fq_token=access_token) return True except Exception as e: print e return False
def facebook_save_access_token(authtoken, code, callback_url): """ Saves Facebook user tokens, Oauth is done manually since the module does not support it """ app_id, secret = dbwrapper.get_service_tokens('Facebook') args = dict(client_id=app_id, redirect_uri=callback_url) args["client_secret"] = secret.strip() args["code"] = code url = "https://graph.facebook.com/oauth/access_token?" + urllib.urlencode( args) try: response = cgi.parse_qs(urllib.urlopen(url).read()) access_token = response["access_token"][-1] dbwrapper.update_user(authtoken, fb_token=access_token) return True except: return False