def twitter_authorized(response): next_url = request.args.get('next') or url_for('mod_feed.index') if not response: flash('You denied the request to sign in') return redirect(next_url) # Store the token so we can access it later from tokengetter session['twitter_oauth_token'] = ( response['oauth_token'], response['oauth_token_secret']) twitter_user_id = response['user_id'] twitter_screen_name = response['screen_name'] resp = twitter.get('users/show.json', data={'screen_name': twitter_screen_name}) twitter_profile_image_url = resp.data['profile_image_url'] # If the user is not registered, add him user = User.query.filter_by(email=twitter_screen_name).first() if not user: user = User(email=twitter_screen_name, register_with_provider=True) db.session.add(user) db.session.commit() # In any case we update the authentication token in the db # If the user has revoked access we will have new token here connection = Connection.query.filter_by( user_id=user.id, provider_id=provider_id['TWITTER']).first() if not connection: connection = Connection( user_id=user.id, provider_id=provider_id['TWITTER'], provider_user_id=twitter_user_id, display_name=twitter_screen_name, image_url=twitter_profile_image_url, user=user ) connection.oauth_token = response['oauth_token'], connection.oauth_secret = response['oauth_token_secret'], db.session.add(connection) login_user(user) flash('Logged in as id = %s, name = %s, redirect = %s, image_url = %s' % \ (connection.provider_user_id, connection.display_name, twitter_profile_image_url, request.args.get('next'))) return redirect(next_url)
def facebook_authorized(response): """Authorize the Facebook account. :param response: The response from Facebook """ next_url = request.args.get('next') or url_for('mod_feed.index') if not response: flash('You denied the request to sign in') return redirect(next_url) # Store the token so we can access it later from tokengetter session['facebook_access_token'] = (response['access_token'], '') fbme = facebook.get('/me') email = fbme.data['email'] # If the user is not registered, add him user = User.query.filter_by(email=email).first() if not user: user = User(email=email, register_with_provider=True, confirmed=True) db.session.add(user) db.session.commit() # In any case we update the authentication token in the db # If the user has revoked access we will have new token here connection = Connection.query.filter_by( user_id=user.id, provider_id=provider_id['FACEBOOK']).first() if not connection: connection = Connection( user_id=user.id, provider_id=provider_id['FACEBOOK'], provider_user_id=fbme.data['id'], display_name=fbme.data['name'], image_url='https://graph.facebook.com/%s/picture?type=large' % \ (fbme.data['id']), user=user) db.session.add(connection) connection.oauth_token = response['access_token'] # Create a `Saved` magazine if not Magazine.query.filter_by(name='Saved').first(): magazine = Magazine(name='Saved', public=False, user_id=user.id) db.session.add(magazine) db.session.commit() user.saved_magazine = magazine.id login_user(user) return redirect(next_url)
def google_authorized(response): """Authorize the Google account :param response: The response from Google's authorization service """ access_token = response['access_token'] session['google_token'] = (access_token, '') headers = {'Authorization': 'OAuth '+ access_token} req = Request('https://www.googleapis.com/oauth2/v1/userinfo', None, headers) try: res = urlopen(req) except URLError as err: if err.code == 401: # Unauthorized - bad token session.pop('google_token', None) flash('You denied the request to sign in') return redirect(url_for('mod_auth.login')) flash('Something bad happened when signing with Google') return redirect(url_for('mod_auth.login')) user_info = json.loads(res.read()) user = User.query.filter_by(email=user_info['email']).first() if not user: user = User(email=user_info['email'], register_with_provider=True, confirmed=True) db.session.add(user) db.session.commit() connection = Connection.query.filter_by( user_id=user.id, provider_id=provider_id['GOOGLE']).first() if not connection: connection = Connection( user_id=user.id, provider_id=provider_id['GOOGLE'], provider_user_id=user_info['id'], display_name=user_info['name'], image_url=user_info['picture'], user=user) connection.oauth_token = access_token db.session.add(connection) # Create a `Saved` magazine if not Magazine.query.filter_by(name='Saved').first(): magazine = Magazine(name='Saved', public=False, user_id=user.id) db.session.add(magazine) db.session.commit() user.saved_magazine = magazine.id login_user(user) return redirect(session.get('google_auth_next_url'))