acp.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import os
  2. from flask import Flask, g, session, redirect, request, url_for, jsonify
  3. from requests_oauthlib import OAuth2Session
  4. OAUTH2_CLIENT_ID = '316778526768365569'
  5. OAUTH2_CLIENT_SECRET = 'R3oxmsWun-vGKIc0VjtaEDxycbjuyVEX'
  6. OAUTH2_REDIRECT_URI = 'http://doingit.today:5000/callback'
  7. API_BASE_URL = os.environ.get('API_BASE_URL', 'https://discordapp.com/api')
  8. AUTHORIZATION_BASE_URL = API_BASE_URL + '/oauth2/authorize'
  9. TOKEN_URL = API_BASE_URL + '/oauth2/token'
  10. app = Flask(__name__)
  11. app.debug = True
  12. app.config['SECRET_KEY'] = OAUTH2_CLIENT_SECRET
  13. if 'http://' in OAUTH2_REDIRECT_URI:
  14. os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = 'true'
  15. def token_updater(token):
  16. session['oauth2_token'] = token
  17. def make_session(token=None, state=None, scope=None):
  18. return OAuth2Session(
  19. client_id=OAUTH2_CLIENT_ID,
  20. token=token,
  21. state=state,
  22. scope=scope,
  23. redirect_uri=OAUTH2_REDIRECT_URI,
  24. auto_refresh_kwargs={
  25. 'client_id': OAUTH2_CLIENT_ID,
  26. 'client_secret': OAUTH2_CLIENT_SECRET,
  27. },
  28. auto_refresh_url=TOKEN_URL,
  29. token_updater=token_updater)
  30. @app.route('/')
  31. def index():
  32. scope = request.args.get(
  33. 'scope',
  34. 'identify')
  35. discord = make_session(scope=scope.split(' '))
  36. authorization_url, state = discord.authorization_url(AUTHORIZATION_BASE_URL)
  37. session['oauth2_state'] = state
  38. return redirect(authorization_url)
  39. @app.route('/callback')
  40. def callback():
  41. if request.values.get('error'):
  42. return request.values['error']
  43. discord = make_session(state=session.get('oauth2_state'))
  44. token = discord.fetch_token(
  45. TOKEN_URL,
  46. client_secret=OAUTH2_CLIENT_SECRET,
  47. authorization_response=request.url)
  48. session['oauth2_token'] = token
  49. return redirect(url_for('.me'))
  50. @app.route('/me')
  51. def me():
  52. discord = make_session(token=session.get('oauth2_token'))
  53. user = discord.get(API_BASE_URL + '/users/@me').json()
  54. return jsonify(user=user)
  55. if __name__ == '__main__':
  56. app.run()