Skip to content

Instantly share code, notes, and snippets.

@chucknado
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chucknado/14c0522bcf7e8837c924 to your computer and use it in GitHub Desktop.
Save chucknado/14c0522bcf7e8837c924 to your computer and use it in GitHub Desktop.
A Bottle app file for the Zendesk OAuth tutorial at https://support.zendesk.com/hc/en-us/articles/204210446
from urllib.parse import urlencode
import json
import requests
from bottle import route, template, redirect, static_file, error, request, response, run
@route('/home')
def show_home():
return template('home')
@route('/zendesk_profile')
def make_request():
if request.get_cookie('owat'):
# Get user data
access_token = request.get_cookie('owat')
bearer_token = 'Bearer ' + access_token
header = {'Authorization': bearer_token}
url = 'https://your_subdomain.zendesk.com/api/v2/users/me.json'
r = requests.get(url, headers=header)
if r.status_code != 200:
error_msg = 'Failed to get data with error {}'.format(r.status_code)
return template('error', error_msg=error_msg)
else:
data = r.json()
profile_data = {
'name': data['user']['name'],
'role': data['user']['role']}
return template('details', data=profile_data)
else:
# Kick off authorization flow
parameters = {
'response_type': 'code',
'redirect_uri': 'http://localhost:8080/handle_user_decision',
'client_id': 'oauth_tutorial_app',
'scope': 'read write'}
url = 'https://your_subdomain.zendesk.com/oauth/authorizations/new?' + urlencode(parameters)
redirect(url)
@route('/handle_user_decision')
def handle_decision():
if 'error' in request.query_string:
return template('error', error_msg=request.query.error_description)
else:
# Get access token
parameters = {
'grant_type': 'authorization_code',
'code': request.query.code,
'client_id': 'oauth_tutorial_app',
'client_secret': 'your_secret',
'redirect_uri': 'http://localhost:8080/handle_user_decision',
'scope': 'read'}
payload = json.dumps(parameters)
header = {'Content-Type': 'application/json'}
url = 'https://your_subdomain.zendesk.com/oauth/tokens'
r = requests.post(url, data=payload, headers=header)
if r.status_code != 200:
error_msg = 'Failed to get access token with error {}'.format(r.status_code)
return template('error', error_msg=error_msg)
else:
data = r.json()
response.set_cookie('owat', data['access_token'])
redirect('/zendesk_profile')
@route('/')
def handle_root_url():
redirect('/home')
@route('/css/<filename>')
def send_css(filename):
return static_file(filename, root='static/css')
@error(404)
def error404(error):
return template('error', error_msg='404 error. Nothing to see here')
run(host='localhost', port=8080, debug=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment