def renew_fb(): '''Renew the current user's Facebook access token. The client should make this call periodically (once every couple months, see User.should_renew_fb_token) to keep the access token up to date. Takes a Facebook signed request object from the post params in the form of: { 'fb_signed_request': obj } ''' req = flask.request current_user = view_helpers.get_current_user() rmclogger.log_event( rmclogger.LOG_CATEGORY_API, rmclogger.LOG_EVENT_RENEW_FB, { 'user_id': current_user.id, 'request_form': req.form, } ) fbsr = req.form.get('fb_signed_request') if fbsr is None: logging.warn('No fbsr set') raise exceptions.ImATeapot('No fbsr set') fb_data = facebook.get_fb_data(fbsr, app.config) access_token = fb_data['access_token'] expires_on = fb_data['expires_on'] is_invalid = fb_data['is_invalid'] if not is_invalid: current_user.fb_access_token_expiry_date = expires_on current_user.fb_access_token = access_token current_user.fb_access_token_invalid = is_invalid # Update the user's fb friend list, since it's likely outdated by now try: current_user.update_fb_friends( facebook.get_friend_list(access_token)) except: # Not sure why this would happen. Usually it's due to invalid # access_token, but we JUST got the token, so it should be valid logging.warn( "/api/renew-fb: get_friend_list failed with token (%s)" % access_token) current_user.save() return ''
def update_all_fb_friend_list(): for user in m.User.objects(): # TODO(Sandy): Batch requests for performance if user.fbid and not user.is_fb_token_expired: try: user.update_fb_friends( facebook.get_friend_list(user.fb_access_token)) user.save() except facebook.FacebookOAuthException as e: user.fb_access_token_invalid = True user.save() except Exception as e: print "get_friend_list failed for %s with: %s" % (user.id, e.message)
def update_all_fb_friend_list(): for user in m.User.objects(): # TODO(Sandy): Batch requests when we need to if not user.is_fb_token_expired: try: user.update_fb_friends( facebook.get_friend_list(user.fb_access_token)) user.save() except facebook.FacebookOAuthException as e: user.fb_access_token_invalid = True user.save() except Exception as e: print "get_friend_list failed for %s with: %s" % (user.id, e.message)