def log_out(handler): user = handler.user_obj if user: user.end_session() # Empty session cookie and force it to expire. utils.set_cookie(handler, 'session', '', datetime(1987, 7, 31, 3, 42))
def view_article(handler, id): if isinstance(id, model.Article): article = id id = article.key().id() elif isinstance(id, (int, long)): article = None else: raise TypeError('Invalid article id.') # Don't count views from certain crawler bots to avoid upping the number of # views for non-human visits. for user_agent in settings.IGNORED_USER_AGENTS: if user_agent in os.environ['HTTP_USER_AGENT']: return # memcache key used for counting views. views_key = 'article:%d:views' % id cached_views = None # Don't increment views if user has article id in cookie. try: cookie = handler.request.cookies['articles'] except KeyError: cookie = ':' if not (':%d:' % id) in cookie: cookie += ('%d:' % id) utils.set_cookie(handler, 'articles', cookie, datetime.now() + timedelta(days=7)) # Id was not in cookie, increment by one if IP has not incremented # 5 or more times before. ip_key = 'article:%d:views:%s' % (id, os.environ['REMOTE_ADDR']) if memcache.get(ip_key) < 5: memcache.incr(ip_key, initial_value=0) cached_views = memcache.incr(views_key, initial_value=0) or 0L if cached_views is None: cached_views = long(memcache.get(views_key) or 0L) if article: # Aggregate stored views with cached views. article.views += cached_views # Store views to entity once every 10 minutes and reset the cache # counter. try: if datetime.now() - article.last_save > timedelta(minutes=10): article.put() memcache.delete(views_key) # In maintenance periods, avoid throwing errors when viewing an # article. except apiproxy_errors.CapabilityDisabledError: pass
def _add_user_data(handler, data): logging.info("Getting Facebook data through Graph API.") logging.debug(data) graph = facebook.GraphAPI(data["access_token"]) user = graph.get_object("me") data["uid"] = user["id"] data["name"] = user["name"] if "email" in user: data["email"] = user["email"] # This cookie uses the same structure as the one created by the # Facebook JavaScript library. exp = datetime.now() + timedelta(seconds=int(data["expires"])) data["expires"] = int(time.mktime(exp.timetuple())) payload = "".join("%s=%s" % (k, data[k]) for k in sorted(data.keys())) sig = hashlib.md5(payload + settings.FACEBOOK_SECRET) data["sig"] = sig.hexdigest() utils.set_cookie(handler, "fbs_%s" % settings.FACEBOOK_APP_ID, '"%s"' % urllib.urlencode(data), exp)
def _add_user_data(handler, data): graph = facebook.GraphAPI(data['access_token']) user = graph.get_object('me') data['uid'] = user['id'] data['name'] = user['name'] if 'email' in user: data['email'] = user['email'] # This cookie uses the same structure as the one created by the # Facebook JavaScript library. exp = datetime.now() + timedelta(seconds=int(data['expires'])) data['expires'] = int(time.mktime(exp.timetuple())) payload = ''.join('%s=%s' % (k, data[k]) for k in sorted(data.keys())) sig = hashlib.md5(payload + settings.FACEBOOK_SECRET) data['sig'] = sig.hexdigest() utils.set_cookie(handler, 'fbs_%s' % settings.FACEBOOK_APP_ID, '"%s"' % urllib.urlencode(data), exp)
def _add_user_data(handler, data): logging.info('Getting Facebook data through Graph API.') logging.debug(data) graph = facebook.GraphAPI(data['access_token']) user = graph.get_object('me') data['uid'] = user['id'] data['name'] = user['name'] if 'email' in user: data['email'] = user['email'] # This cookie uses the same structure as the one created by the # Facebook JavaScript library. exp = datetime.now() + timedelta(seconds=int(data['expires'])) data['expires'] = int(time.mktime(exp.timetuple())) payload = ''.join('%s=%s' % (k, data[k]) for k in sorted(data.keys())) sig = hashlib.md5(payload + settings.FACEBOOK_SECRET) data['sig'] = sig.hexdigest() utils.set_cookie(handler, 'fbs_%s' % settings.FACEBOOK_APP_ID, '"%s"' % urllib.urlencode(data), exp)
def start_user_session(handler, user): user.start_session() utils.set_cookie(handler, 'session', user.session, user.expires)