Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
def start_user_session(handler, user):
    user.start_session()
    utils.set_cookie(handler, 'session', user.session, user.expires)