def github_authorized_callback(): # This is based loosely on https://github.com/cenkalti/github-flask # and http://stackoverflow.com/a/22275563 if 'code' not in request.args: raise Exception("Got error from GitHub") next_url = request.args.get('next') or url_for('main') payload = { 'code': request.args.get('code'), 'client_id': app.config['GITHUB_CLIENT_ID'], 'client_secret': app.config['GITHUB_CLIENT_SECRET'], } auth_url = BASE_AUTH_URL + 'access_token' logging.info("Auth url is %s" % auth_url) response = urlfetch.fetch(auth_url, method=urlfetch.POST, payload=urllib.urlencode(payload), validate_certificate=True) if response.status_code != 200: raise Exception("Got %i response from GitHub:\n%s" % (response.status_code, response.content)) data = urlparse.parse_qs(response.content) access_token = data.get('access_token', None) if access_token is None: return redirect(next_url) access_token = access_token[0].decode('ascii') user_json = json.loads(github_request("user", oauth_token=access_token).content) user = User.query(User.github_login == user_json['login']).get() if user is None: user = User(github_login=user_json['login']) user.github_user_json = user_json user.github_access_token = access_token user.put() session['github_login'] = user.github_login return redirect(url_for('main'))
def add_role(): if not g.user or "admin" not in g.user.roles: return abort(403) user = User.query(User.github_login == request.form["username"]).get() if user is None: user = User(github_login=request.form["username"]) role = request.form["role"] if role not in user.roles: user.roles.append(role) user.put() return "Updated user %s; now has roles %s" % (user.github_login, user.roles)
def github_authorized_callback(): # This is based loosely on https://github.com/cenkalti/github-flask # and http://stackoverflow.com/a/22275563 if 'code' not in request.args: raise Exception("Got error from GitHub") next_url = request.args.get('next') or url_for('main') payload = { 'code': request.args.get('code'), 'client_id': app.config['GITHUB_CLIENT_ID'], 'client_secret': app.config['GITHUB_CLIENT_SECRET'], } auth_url = BASE_AUTH_URL + 'access_token' logging.info("Auth url is %s" % auth_url) response = urlfetch.fetch(auth_url, method=urlfetch.POST, payload=urllib.urlencode(payload), validate_certificate=True) if response.status_code != 200: raise Exception("Got %i response from GitHub:\n%s" % (response.status_code, response.content)) data = urlparse.parse_qs(response.content) access_token = data.get('access_token', None) if access_token is None: return redirect(next_url) access_token = access_token[0].decode('ascii') user_json = json.loads( github_request("user", oauth_token=access_token).content) user = User.query(User.github_login == user_json['login']).get() if user is None: user = User(github_login=user_json['login']) user.github_user_json = user_json user.github_access_token = access_token user.put() session['github_login'] = user.github_login return redirect(url_for('main'))
def before_request(): g.user = None if 'github_login' in session: g.user = User.query(User.github_login == session['github_login']).get()
def before_request(): g.user = None if "github_login" in session: g.user = User.query(User.github_login == session["github_login"]).get()