diff --git a/l2pauth.py b/l2pauth.py new file mode 100644 index 0000000000000000000000000000000000000000..e0ef7e09700449609cb11cce8591ade9cfe4e792 --- /dev/null +++ b/l2pauth.py @@ -0,0 +1,42 @@ +from server import * +import requests +import json +from time import sleep + +L2P_BASE = 'https://www3.elearning.rwth-aachen.de/_vti_bin/l2pservices/api.svc/v1/' +OAUTH_BASE = 'https://oauth.campus.rwth-aachen.de/oauth2waitress/oauth2.svc/' + +def l2pget(endpoint, token, **args): + args['accessToken'] = token + r = requests.request('GET', L2P_BASE+endpoint, params=args) + return r.json() + +def oauthget(endpoint, **args): + args['client_id'] = config['L2P_APIKEY'] + r = requests.request('POST', OAUTH_BASE+endpoint, data=args) + return r.json() + +@app.route('/l2pauth') +def start_l2pauth(): + code = oauthget('code', scope='l2p2013.rwth') + session['l2p_oauthcode'] = code['device_code'] + return redirect(code['verification_url']+'?q=verify&d='+code['user_code']) + +@app.route('/l2p') +def test_l2pauth(): + return str(session.get('l2p_courses', {})) + +@app.before_request +def finish_oauth(): + if 'l2p_oauthcode' not in session: + return + token = oauthget('token', code=session['l2p_oauthcode'], grant_type='device') + if token.get('status') != 'ok': + return + del session['l2p_oauthcode'] + session['rwthintern'] = True + session['l2p_courses'] = [] + for course in l2pget('viewAllCourseInfo', token['access_token'])['dataSet']: + session['l2p_courses'].append(course['uniqueid']) + oauthget('token', refresh_token=token['refresh_token'], grant_type='invalidate') + flash('Folgende Kurse wurden freigegeben: '+', '.join(session['l2p_courses'])) diff --git a/server.py b/server.py index 13aea0a8e8c418b2c34e2ee992f9a41a09b867a3..39af4c4f33a0c1086bc3368b73f8272536df3699 100644 --- a/server.py +++ b/server.py @@ -468,3 +468,5 @@ import timetable import sorter if 'ICAL_URL' in config: import meetings +if 'L2P_APIKEY' in config: + import l2pauth