예제 #1
0
파일: index.py 프로젝트: siteshen/dianying
def authlogin():
    """
    If the account is exist, return it.
      If the user is not registered before, add username for it.
    If not, create and return it.
    """
    try:
        access_token = request.form.get('access_token')
    except Exception as e:
        raise InvalidParam('invalid access_token', status_code=400)

    try:
        if os.environ.get('DEBUG', None):
            token_info = {
                'uid': '1313608362',
                'appkey': '123'
            }
        else:
            token_info = get_token_info(access_token)
        uid = token_info['uid']
        appkey = token_info['appkey']
        account = db.session.query(Account)\
                  .filter(Account.uid==uid)\
                  .filter(Account.provider=='weibo').first()
        if os.environ.get('DEBUG', None):
            user_info = get_user_info(access_token, uid, appkey)
        else:
            user_info = {'screen_name': 'aisensiy'}
        username = user_info['screen_name']

        if not account: # if this account not found in db create it and its user
            user = User(username=username, registered_at=sqlnow())
            user.accounts = [Account(provider='weibo', access_token=access_token, uid=uid)]
            db.session.add(user)
            db.session.commit()
            account = user.accounts[0]
        else:
            user = account.user
            if not user.is_registered: # if this account is created not by the owner, then created it
                account.username = username
                user.is_registered = True
                user.registered_at = sqlnow()
                db.session.add(user)
                db.session.commit()

        session.permanent = True
        session['user_id'] = account.user_id
        return jsonify({
            'status': 'success',
            'data': {
                'user_id': account.user_id,
                'uid': account.uid
            }
        })

    except Exception as e:
        raise InvalidParam(e.message)
예제 #2
0
파일: index.py 프로젝트: siteshen/dianying
def post_greeting(request, db, src_user_id):
    provider = request.form.get('provider')
    uid = request.form.get('uid')

    if not provider or not uid:
        raise InvalidParam('provider or uid is not invalid')

    account = db.session.query(Account)\
              .filter(Account.uid==uid)\
              .filter(Account.provider==provider).first()

    # if the user you are greeting to is not registered in our app then we create
    # a mock user account for him
    if not account:
        user = User()
        user.accounts = [Account(provider=provider, uid=uid)]
        db.session.add(user)
        db.session.commit()
        account = user.accounts[0]

    greeting = db.session.query(Greeting)\
               .filter(Greeting.src_user_id==src_user_id)\
               .filter(Greeting.dst_user_id==account.user_id).first()

    if not greeting:
        greeting = Greeting(src_user_id=src_user_id, dst_user_id=account.user_id)
        db.session.add(greeting)
        db.session.commit()

    back_greeting = db.session.query(Greeting)\
                    .filter(Greeting.src_user_id==account.user_id)\
                    .filter(Greeting.dst_user_id==src_user_id).first()

    if back_greeting:
        back_greeting.is_friend = True
        back_greeting.is_friend_at = sqlnow()
        greeting.is_friend = True
        greeting.is_friend_at = sqlnow()
        db.session.add(greeting)
        db.session.add(back_greeting)
        db.session.commit()

        return jsonify({
            'status': 'success',
            'data': {
                'is_friend': True,
                'user_id': account.user_id
            }
        })
    else:
        return jsonify({
            'status': 'success',
            'data': {
                'is_friend': False,
                'user_id': account.user_id
            }
        })