Underpinnings of the ability to connect a GitHub account to an existing Quay account.

This commit is contained in:
yackob03 2014-01-14 15:23:44 -05:00
parent c72cae954b
commit f311885e2a
8 changed files with 82 additions and 7 deletions

View file

@ -151,6 +151,14 @@ def user_view(user):
organizations = model.get_user_organizations(user.username)
def login_view(login):
return {
'service': login.service.name,
'service_identifier': login.service_ident,
}
logins = model.list_federated_logins(user)
return {
'verified': user.verified,
'anonymous': False,
@ -159,6 +167,7 @@ def user_view(user):
'gravatar': compute_hash(user.email),
'askForPassword': user.password_hash is None,
'organizations': [org_view(o) for o in organizations],
'logins': [login_view(login) for login in logins],
'can_create_repo': True,
'invoice_email': user.invoice_email
}

View file

@ -4,7 +4,7 @@ import stripe
from flask import (abort, redirect, request, url_for, render_template,
make_response, Response)
from flask.ext.login import current_user
from flask.ext.login import login_required, current_user
from urlparse import urlparse
from data import model
@ -155,8 +155,7 @@ def receipt():
abort(404)
@app.route('/oauth2/github/callback', methods=['GET'])
def github_oauth_callback():
def exchange_github_code_for_token(code):
code = request.args.get('code')
payload = {
'client_id': app.config['GITHUB_CLIENT_ID'],
@ -171,13 +170,23 @@ def github_oauth_callback():
params=payload, headers=headers)
token = get_access_token.json()['access_token']
return token
def get_github_user(token):
token_param = {
'access_token': token,
}
get_user = requests.get(app.config['GITHUB_USER_URL'], params=token_param)
user_data = get_user.json()
return get_user.json()
@app.route('/oauth2/github/callback', methods=['GET'])
def github_oauth_callback():
token = exchange_github_code_for_token(request.args.get('code'))
user_data = get_github_user(token)
username = user_data['login']
github_id = user_data['id']
@ -218,6 +227,16 @@ def github_oauth_callback():
return render_page_template('githuberror.html')
@app.route('/oauth2/github/callback/attach', methods=['GET'])
@login_required
def github_oauth_attach():
token = exchange_github_code_for_token(request.args.get('code'))
user_data = get_github_user(token)
github_id = user_data['id']
user_obj = current_user.db_user()
model.attach_federated_login(user_obj, 'github', github_id)
@app.route('/confirm', methods=['GET'])
def confirm_email():
code = request.values['code']