def parrots_start(db): account = Accounts.findOne(db,{'credentials.public_token': request.query.get("token")}) if account: twitter = Twitter() client = twitter.create_session() try: tokens = twitter.get_request_token(client) except: redirect('/twitter_down.html') return session = Sessions(db, {'account_id': account.id, 'oauth_token': tokens['oauth_token'], 'oauth_token_secret': tokens['oauth_token_secret'], 'external_id': request.query.external_id}) session.insert() redirect_url = twitter.redirect_url(tokens) redirect(redirect_url) else: print "Noooo ---" response.status = 404 return {}
def parrots_finish(db): if request.query.denied: redirect('/twitter_denied.html') session = Sessions.findOne(db, {'oauth_token': request.query.oauth_token}) if session: account = Accounts.findOne(db, session.account_id) if not account: response.status = 404 return {'error': 'Invalid token'} twitter = Twitter() try: access_tokens = twitter.get_access_tokens(request.query.oauth_verifier,{'oauth_token': session.oauth_token, 'oauth_token_secret': session.oauth_token_secret}) twitter.create_client(access_tokens.get('oauth_token'),access_tokens.get('oauth_token_secret')) headers, body = twitter.get('https://api.twitter.com/1/account/verify_credentials.json') except: redirect('/twitter_auth_problem.html') return if headers.status == 200: body = json.loads(body) parrot = Parrots.findOne(db, {'twitter_id': body.get('id')}) if not parrot: new_parrot = Parrots(db, { 'twitter_info': body, 'twitter_id': body.get('id'), 'oauth_token': access_tokens.get('oauth_token'), 'oauth_token_secret': access_tokens.get('oauth_token_secret') }) new_parrot.insert() parrot = new_parrot else: parrot.update({ 'oauth_token': access_tokens.get('oauth_token'), 'oauth_token_secret': access_tokens.get('oauth_token_secret') }) subscription = Subscriptions.findOne(db, {'account_id': account.id, 'parrot_id': parrot.id}) subscription_parameters = { 'parrot_id': parrot.id, 'account_id': account.id, 'active': True, 'external_id': session.external_id, 'twitter_screen_name': body.get("screen_name") } if not subscription: subscription = Subscriptions(db, subscription_parameters) subscription.insert() else: subscription.update(subscription_parameters) notification_id = _create_notification(db, account, parrot, subscription) if notification_id: redirect_url = generate_redirect_url(account.callback_url, session.external_id, subscription.id, notification_id) redirect(redirect_url) else: response.status = 404 return {'error': 'Expired token'}