| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import os
- from flask import Flask, g, session, redirect, request, url_for, jsonify
- from requests_oauthlib import OAuth2Session
- OAUTH2_CLIENT_ID = '316778526768365569'
- OAUTH2_CLIENT_SECRET = 'R3oxmsWun-vGKIc0VjtaEDxycbjuyVEX'
- OAUTH2_REDIRECT_URI = 'http://doingit.today:5000/callback'
- API_BASE_URL = os.environ.get('API_BASE_URL', 'https://discordapp.com/api')
- AUTHORIZATION_BASE_URL = API_BASE_URL + '/oauth2/authorize'
- TOKEN_URL = API_BASE_URL + '/oauth2/token'
- app = Flask(__name__)
- app.debug = True
- app.config['SECRET_KEY'] = OAUTH2_CLIENT_SECRET
- if 'http://' in OAUTH2_REDIRECT_URI:
- os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = 'true'
- def token_updater(token):
- session['oauth2_token'] = token
- def make_session(token=None, state=None, scope=None):
- return OAuth2Session(
- client_id=OAUTH2_CLIENT_ID,
- token=token,
- state=state,
- scope=scope,
- redirect_uri=OAUTH2_REDIRECT_URI,
- auto_refresh_kwargs={
- 'client_id': OAUTH2_CLIENT_ID,
- 'client_secret': OAUTH2_CLIENT_SECRET,
- },
- auto_refresh_url=TOKEN_URL,
- token_updater=token_updater)
- @app.route('/')
- def index():
- scope = request.args.get(
- 'scope',
- 'identify')
- discord = make_session(scope=scope.split(' '))
- authorization_url, state = discord.authorization_url(AUTHORIZATION_BASE_URL)
- session['oauth2_state'] = state
- return redirect(authorization_url)
- @app.route('/callback')
- def callback():
- if request.values.get('error'):
- return request.values['error']
- discord = make_session(state=session.get('oauth2_state'))
- token = discord.fetch_token(
- TOKEN_URL,
- client_secret=OAUTH2_CLIENT_SECRET,
- authorization_response=request.url)
- session['oauth2_token'] = token
- return redirect(url_for('.me'))
- @app.route('/me')
- def me():
- discord = make_session(token=session.get('oauth2_token'))
- user = discord.get(API_BASE_URL + '/users/@me').json()
- return jsonify(user=user)
- if __name__ == '__main__':
- app.run()
|