diff -r 8bc8b208441d -r 4407b131a70e oauth/client.py --- a/oauth/client.py Wed Feb 17 16:14:04 2016 +0100 +++ b/oauth/client.py Mon Feb 29 12:22:07 2016 +0100 @@ -1,8 +1,9 @@ from flask import Flask, url_for, session, request, jsonify, render_template, redirect from flask_oauthlib.client import OAuth from settings.client_settings import ClientSettings - - +import base64 +import requests +import json app = Flask(__name__) app.debug = True @@ -24,15 +25,47 @@ @app.route('/') def index(): - if 'remote_oauth' in session: - resp = remote.get('me') - username = resp.data.get("username", "") - return render_template('client/index.html', username=username) - next_url = request.args.get('next') or request.referrer or None - return remote.authorize( - callback=url_for('authorized', next=next_url, _external=True) - ) + if 'remote_oauth_authorizationcode' not in session: + next_url = request.args.get('next') or request.referrer or None + return remote.authorize( + callback=url_for('authorized', next=next_url, _external=True) + ) + if 'me' not in session: + resp = remote.get('user/InfoComplete') + print("authcode resp data: "+str(resp.data)) + me = resp.data.get("username", "") + session["me"] = me + if 'remote_oauth_clientcredentials' not in session: + auth_string = bytes(app.config["CLIENT_ID"]+':'+app.config['CLIENT_SECRET'], "utf-8") + auth_code = base64.b64encode(auth_string).decode("utf-8") + resp = requests.post(app.config["ACCESS_TOKEN_URL"]+"?grant_type=client_credentials&scope=basic", data={}, headers={ + 'Authorization': 'Basic %s' % auth_code, + }) + if resp is None: + return 'Access denied: reason=%s error=%s' % ( + request.args['error_reason'], + request.args['error_description'] + ) + session['remote_oauth_clientcredentials'] = (json.loads(resp.text)['access_token'], '') + resp = remote.get('user/InfoComplete') + print("clientcredentials resp data: "+str(resp.data)) + server = resp.data.get("username", "") + session["server"] = server + return render_template('client/index.html', current_username=session["me"], oauth_username=session["server"]) +@app.route('/renkan-request') +def renkan_request(): + if 'remote_oauth_clientcredentials' in session: + resp = requests.post( + app.config["CREATE_RENKAN_ENDPOINT"]+"?act_as="+session.get("me", "anonymous"), + {"title": "RENKAN_FROM_GED"}, + headers={ + 'Authorization': 'Bearer %s' % session['remote_oauth_clientcredentials'][0], + 'renkan-act-as': session.get("me", "anonymous") + } + ) + print(resp.text) + return redirect('/') @app.route('/authorized') def authorized(): @@ -42,14 +75,19 @@ request.args['error_reason'], request.args['error_description'] ) - print resp - session['remote_oauth'] = (resp['access_token'], '') + session['remote_oauth_authorizationcode'] = (resp['access_token'], '') + return redirect('/') @remote.tokengetter def get_oauth_token(): - return session.get('remote_oauth') + print("referrer : "+request.referrer) + if 'remote_oauth_clientcredentials' in session and 'server' not in session: + return session['remote_oauth_clientcredentials'] + else: + return session.get('remote_oauth_authorizationcode', '') + if __name__ == '__main__':