Делаем mash-up приложение на трэндах

Разделы

воскресенье, 29 мая 2011 г.

OAuth для твиттера (продолжение)

Буду краток. Вчера времени не хватило, не успел выход сделать:
@route('/exit')
@route('/exit/')
def exit_view():
    del_cookie()
    redirect("/")
И кстати заодно файлик для работы с куками:
Листинг cookie.py:
@route('/login')
#!/usr/bin/env python
# encoding: utf-8

from bottle import route, run, view, request, redirect, response, post, abort, debug, error
import logging
import hmac
import uuid
import base64
from google.appengine.ext import db
from datetime import datetime
from datetime import timedelta

from models import Users
from oauth import TwitterClient


def generate_rnd_hash(uid):
    h = hmac.new(str(uid))
    h.update(uuid.uuid4().bytes)
    return base64.b64encode(h.digest() + uuid.uuid4().bytes, ['+', '-']).replace('=', '').replace('+', '')

    
def set_cookie(uid, user_info = {}):
    last_error = "ok"
    hash = generate_rnd_hash(uid)
    dt = datetime.utcnow() + timedelta(seconds = 60*60*24*7)
    exp_gmt = dt.strftime("%a, %d-%b-%Y %H:%M:%S GMT")
    user = Users.get_by_key_name(str(uid))
    if not user:
        user = Users(key_name=str(uid))
    if user_info:
        user.uid = user_info["uid"]
        user.username = user_info["username"]
        user.name = user_info["name"]
        user.image = user_info["image"]
        user.token = user_info["token"]
        user.secret = user_info["secret"]
    user.hash = hash
    user.hashex = dt
    user.put()
    try:
        response.set_cookie('sid', hash, secret = None, \
                                            **{'expires' : exp_gmt, 'path' : '/'})
    except Exception, msg:
        logging.error(msg)

def del_cookie():
    uid = get_cookie()
    user = Users.get_by_key_name(str(uid)) if uid else None
    if user:
        user.delete()
    try:
        response.set_cookie('sid', "", secret = None, \
                                            **{'path' : '/'})
    except Exception, msg:
        logging.error(msg)
        
    
def get_cookie():
    hash = request.get_cookie("sid")
    logging.debug(hash)
    key = Users.all(keys_only=True).filter("hash = ", hash).fetch(1)
    key = long(key[0].name()) if key else 0
    return key

Комментариев нет:

Отправить комментарий

Постоянные читатели

Copyright © trendec. Технологии Blogger.