From 86d710238cc64675d206407e9dabf9bf2605a70f Mon Sep 17 00:00:00 2001
From: Julian Rother <julianr@fsmpi.rwth-aachen.de>
Date: Sat, 8 Oct 2016 03:07:05 +0200
Subject: [PATCH] Implemented basic L2P API interface

---
 l2pauth.py | 42 ++++++++++++++++++++++++++++++++++++++++++
 server.py  |  2 ++
 2 files changed, 44 insertions(+)
 create mode 100644 l2pauth.py

diff --git a/l2pauth.py b/l2pauth.py
new file mode 100644
index 0000000..e0ef7e0
--- /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 13aea0a..39af4c4 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
-- 
GitLab