def _get_current_site_user(self): cookies = request.cookies cookie = fblib.get_user_from_cookie(cookies, h.fb_app_id(), h.fb_secret()) user_id = None fb_user_id = None fb_access_token = None user = None if cookie: fb_user_id = h.to_i(cookie['uid']) fb_access_token = cookie['access_token'] fb_access_token_expiry = h.to_i(cookie['expires']) last_login = int(time.time()) user = User.find(fb_user_id=fb_user_id).first() if fb_user_id else None if not user: user = User.factory(fb_user_id, fb_access_token=fb_access_token, fb_access_token_expiry=fb_access_token_expiry, last_login=last_login) try: user.update_fb_access_token(fb_access_token, fb_access_token_expiry) except fblib.GraphAPIError, e: log.warning('caught graph api error while updating access token, flushing cookie: %r', e) request.cookies.pop('fbs_%s' % h.fb_app_id(), None) user_id = user.user_id
def parse_api_access_token(api_access_token): """ See generate_api_access_token() """ parts = api_access_token.split('.') if not parts or len(parts) != 3: raise ApiSecurityException('Invalid API access token: %s' % api_access_token) return parts[0], h.to_i(parts[1]), parts[2]
def process_fb_user_data(fb_data, fb_access_token, fb_access_token_expiry): fb_user_id = h.to_i(fb_data['id']) email = fb_data['email'] first_name = fb_data['first_name'] last_name = fb_data['last_name'] # resolve the user last_login = int(time.time()) user = User.factory(fb_user_id, fb_access_token=fb_access_token, fb_access_token_expiry=fb_access_token_expiry, email=email, last_login=last_login) user.update_fb_access_token(fb_access_token, fb_access_token_expiry, commit=False) user.update_user_fields(field_values=fb_data, commit=True) return user