예제 #1
0
파일: app.py 프로젝트: 321k/slackwise
def addToken():
    global is_prod
    if is_prod is 'True':
        return 'Not available in production'

    token = request.form.get('token')
    slack_id = request.form.get('user_id')

    if slack_id is None:
        return 'You have to post a User ID (slack ID)'

    if token is None:
        return 'You have to include a TransferWise token'

    profiles = getTransferWiseProfiles(access_token=token)
    if profiles.status_code == 401:
        return str(json.loads(profiles.text))

    profileId = json.loads(profiles.text)[0]['id']
    homeCurrency = decide_user_home_currency(token, profileId)

    user = User.query.filter_by(slack_id=slack_id).first()
    if user is None:
        user = User(slack_id=slack_id,
                    transferwise_profile_id=profileId,
                    home_currency=homeCurrency)
        user.addEncryptedToken(token)
        db.session.add(user)
        db.session.commit()

        return 'New user created with token'

    else:
        user.addEncryptedToken(token)
        user.transferwise_profile_id = profileId
        user.home_currency = homeCurrency
        db.session.commit()
        return 'Token added or updated to existing user'
예제 #2
0
파일: app.py 프로젝트: 321k/slackwise
def oauth():
    referrer_url = 'https://transferwise.com/' + \
        'oauth/authorize?response_type=code' + \
        '&client_id=erik-edins-slack-bot&' + \
        'redirect_uri=https://slackwise.herokuapp.com/oauth'

    if request.referrer != referrer_url:
        message = 'Authentication failed.\
 Make sure you use connect the bot from Slack.'

        flash(message, 'alert-warning')
        return render_template('index.html')

    api_key = os.environ.get('TRANSFERWISE_KEY', None)

    if 'slack_id' in session:
        slack_id = session['slack_id']

    elif 'session' in request.cookies:
        request_session = json.loads(
            base64.b64decode(request.cookies['session'].split(".")[0]))
        print(request_session)

        if 'slack_id' in request_session:
            slack_id = request_session['slack_id']

    else:
        message = 'Couldn\'t find a Slack user.\
 Make sure you connect via Slack using /transferwise.'

        flash(message, 'alert-warning')
        return redirect(url_for('index'))

    code = request.args.get('code')
    response = requests.post(
        'https://api.transferwise.com/oauth/token',
        data={
            'grant_type': 'authorization_code',
            'client_id': 'erik-edins-slack-bot',
            'code': code,
            'redirect_uri': 'https://slackwise.herokuapp.com/oauth'
        },
        headers={'Authorization': 'Basic ' + str(api_key)})

    if response.status_code == 401:
        print('Token exchange failed')
        return json.loads(response.text)['error']
    elif response.status_code == 400:
        print('Invalid request')
        return json.loads(response.text)['error']
    else:
        token = json.loads(response.text)['access_token']

    if slack_id is None:
        return 'You need to use this bot via Slack for it to work.'

    profiles = getTransferWiseProfiles(access_token=token)
    if profiles.status_code == 401:
        return str(json.loads(profiles.text))

    if profiles.text == "[]":
        user = User(slack_id=slack_id)
        user.addEncryptedToken(token)
        db.session.commit()
        message = 'Account connected. To get the most out of the SlackWise bot,\
 make sure you complete your TransferWise profile.\
 Go to www.transferwise.com to set up.'

        flash(message, 'alert-warning')
        return render_template('index.html')

    profileId = json.loads(profiles.text)[0]['id']
    homeCurrency = decide_user_home_currency(token, profileId)
    user = User.query.filter_by(slack_id=slack_id).first()

    if user is None:
        flash(
            'That didn\'t work.\
 Make sure you connect your account by using /transferwise from within Slack.',
            'alert-success')
        return render_template('index.html')

    user.addEncryptedToken(token)
    user.transferwise_profile_id = profileId
    user.home_currency = homeCurrency
    db.session.commit()

    flash(
        'Your TransferWise account is set up. \
        Go back to Slack to continue using the TransferWise Slack bot.',
        'alert-success')

    return render_template('index.html')