From 34ce175709e57a60ecbb51fbaf1bdc7b16e0567d Mon Sep 17 00:00:00 2001 From: Tue Herlau <tuhe@dtu.dk> Date: Mon, 10 Oct 2022 11:15:36 +0200 Subject: [PATCH] Initial commit refresh-token + put calendar event preliminary; api not stable --- .../__pycache__/learn_config.cpython-310.pyc | Bin 0 -> 3589 bytes src/unlearn/cache/cache.db | Bin 0 -> 32768 bytes src/unlearn/learn_config.py | 122 ++++++++++++++++++ src/unlearn/main.py | 84 ++++++++++++ src/unlearn/scrap.py | 27 ++++ 5 files changed, 233 insertions(+) create mode 100644 src/unlearn/__pycache__/learn_config.cpython-310.pyc create mode 100644 src/unlearn/cache/cache.db create mode 100644 src/unlearn/learn_config.py create mode 100644 src/unlearn/main.py create mode 100644 src/unlearn/scrap.py diff --git a/src/unlearn/__pycache__/learn_config.cpython-310.pyc b/src/unlearn/__pycache__/learn_config.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca109eeec207a8ddacb2aa25dfc53294983e0f35 GIT binary patch literal 3589 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 literal 0 HcmV?d00001 diff --git a/src/unlearn/cache/cache.db b/src/unlearn/cache/cache.db new file mode 100644 index 0000000000000000000000000000000000000000..fd897644e84229987f58d420bff790a339e69599 GIT binary patch literal 32768 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 BW%vL9 literal 0 HcmV?d00001 diff --git a/src/unlearn/learn_config.py b/src/unlearn/learn_config.py new file mode 100644 index 0000000..89b0aa5 --- /dev/null +++ b/src/unlearn/learn_config.py @@ -0,0 +1,122 @@ +import pickle +import diskcache +import requests +from diskcache import Cache +import os + +""" +Links +API: +""" + +def whoami(lc): + url = "https://testdtu.brightspace.com/d2l/api/lp/1.36/users/whoami" + payload = {} + headers = { + 'Authorization': 'Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjRkZTk0ZWViLTU0NDctNDk4ZC1iMmNhLTU4NDg5MTU3OWI3YSIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE2NjUxNTc5MTYsImV4cCI6MTY2NTE2MTUxNiwiaXNzIjoiaHR0cHM6Ly9hcGkuYnJpZ2h0c3BhY2UuY29tL2F1dGgiLCJhdWQiOiJodHRwczovL2FwaS5icmlnaHRzcGFjZS5jb20vYXV0aC90b2tlbiIsInN1YiI6IjMzOTciLCJ0ZW5hbnRpZCI6ImVmYTdjODJhLWExYzItNGZjOC1hZTgyLTgwOGJhNzhjZDkxYyIsImF6cCI6IjQ4MDFhNDc3LTExYzctNGNmYy04NzMyLTczNmYwNDE1NzhiZSIsInNjb3BlIjoiY29yZToqOioiLCJqdGkiOiJjNGVhOTRhZi0xODdmLTQ3MzEtOGZmMy1lM2RkOWJhN2ZlMTIifQ.ngh5rHtFro4DWf6mcYSPoRV4LyadE7QJfNeeLRbosrPC2rwrW-00kX1oHqnrFLnWeIw9wNpeXfwM8UwYUxWvmwPcSGS6TI8d7I5gAb3Lqq6PEGHUfvho577scU2s_Lubi0RG_VTfaoNxggzFbvDlCzJom9EXWwbxGuLGk49OxtLile1_bX0kit8zOJhFoOGPjiO-GSvH5Qi4tvjYoowrBkTIyYD6Jw81ET_q2uTHaB15kWpMTl2uHeED-aRWivtX_rfTnFq3Wed3SmAPdS5Tb9g46hURKwq11O_ubGjqFbtQCsY9bIJpH5GShUURoQvWsTlqSqEyr7zgzc0wlMXwVQ' + } + headers = lc.headers + response = requests.request("GET", url, headers=headers, data=payload) + print(response.text) + return response + pass + +class LearnConfig: + server = "testdtu.brightspace.com/" + lp_version = "1.36" + headers = { + 'Authorization': 'Bearer bla-bla' + } + + def get_header(self): + headers = { + # cc = Cache(directory="cache") + 'Authorization': f"Bearer {self.cc['access_token']}" + } + return headers + + def isodate(self, date): + d = date.isoformat() + return d.split(".")[0] + ".000Z" + + + + orgunitId = "8407" + def is_token_valid(self): + response = whoami(self) + json = response.json() + if "FirstName" in json: + print("Hello there", json['FirstName']) + return True + print("Authentication failed") + print(json) + return False + + def __init__(self): + + cc = Cache(directory= os.path.join( os.path.dirname(__file__), "cache") ) + self.cc = cc + while True: + if "access_token" in cc: + print("is there") + # Try to connect... + self.token = cc.get("access_token") + self.headers['Authorization'] = f"Bearer {self.token}" + if self.is_token_valid(): + print("Got a new token!") + a = 234 + break + else: + del cc['access_token'] + print("The token sucks.") + continue + + else: + if "refresh_token" in cc: + + url = "https://auth.brightspace.com/core/connect/token" + refresh_token = cc['refresh_token'] + # refresh_token = "rt.eu-west-1.SAmtMKD3oe094NV6Yc4F8UuROyRdHMJRz_XwpiYtwfI" + self.client_id = "4801a477-11c7-4cfc-8732-736f041578be" + self.client_secret = "niLXYwe9f_pQe2RzvZ8LtYE6Ls6DSiZ_0IeTCPhx4_8" + payload=f'grant_type=refresh_token&refresh_token={refresh_token}&client_id={self.client_id}&client_secret={self.client_secret}&scope=core%3A*%3A*' + headers = { + 'Content-Type': 'application/x-www-form-urlencoded' + } + + response = requests.request("POST", url, headers=headers, data=payload) + cc['refresh_token'] = response.json()['refresh_token'] + cc['access_token'] = response.json()['access_token'] + print("Authentication success.") + break + + # url = "https://auth.brightspace.com/core/connect/token" + # + # payload = 'grant_type=refresh_token&refresh_token=rt.eu-west-1.QLXytJ-TREfofv9xzbDcBEiEivw-_rogaSmS8XetScg&client_id=4801a477-11c7-4cfc-8732-736f041578be&client_secret=niLXYwe9f_pQe2RzvZ8LtYE6Ls6DSiZ_0IeTCPhx4_8&scope=core%3A*%3A*' + # headers = { + # 'Content-Type': 'application/x-www-form-urlencoded' + # } + # + # response = requests.request("POST", url, headers=headers, data=payload) + # + # print(response.text) + # + # + # print(response.text) + + else: + s = input("Please give me a refresh token") + cc['refresh_token'] = s + print("Saved refresh token", s) + print("no it is not there") + a = 234 + print("Phew! Authentication completed.") + # load refresh token file. + # test if login possible with current token. + # pkl.get + # rt.eu-west-1.tN5byZD8n0KHSowkDC2NnElZx0J0BJgIz57Fmj-ZhKs + pass + +if __name__ == '__main__': + print("Hello world") + c = LearnConfig() diff --git a/src/unlearn/main.py b/src/unlearn/main.py new file mode 100644 index 0000000..950cb8b --- /dev/null +++ b/src/unlearn/main.py @@ -0,0 +1,84 @@ +import datetime +import json +import requests +from learn_config import LearnConfig + +def get_calendar_events(lc): + """ https://{{server}}d2l/api/le/{{lp_version}}/{{orgunitId}}/calendar/events/ """ + # def whoami(lc): + url = f"https://{lc.server}d2l/api/le/{lc.lp_version}/{lc.orgunitId}/calendar/events/" + payload = {} + # headers = { + # 'Authorization': 'Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjRkZTk0ZWViLTU0NDctNDk4ZC1iMmNhLTU4NDg5MTU3OWI3YSIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE2NjUxNTc5MTYsImV4cCI6MTY2NTE2MTUxNiwiaXNzIjoiaHR0cHM6Ly9hcGkuYnJpZ2h0c3BhY2UuY29tL2F1dGgiLCJhdWQiOiJodHRwczovL2FwaS5icmlnaHRzcGFjZS5jb20vYXV0aC90b2tlbiIsInN1YiI6IjMzOTciLCJ0ZW5hbnRpZCI6ImVmYTdjODJhLWExYzItNGZjOC1hZTgyLTgwOGJhNzhjZDkxYyIsImF6cCI6IjQ4MDFhNDc3LTExYzctNGNmYy04NzMyLTczNmYwNDE1NzhiZSIsInNjb3BlIjoiY29yZToqOioiLCJqdGkiOiJjNGVhOTRhZi0xODdmLTQ3MzEtOGZmMy1lM2RkOWJhN2ZlMTIifQ.ngh5rHtFro4DWf6mcYSPoRV4LyadE7QJfNeeLRbosrPC2rwrW-00kX1oHqnrFLnWeIw9wNpeXfwM8UwYUxWvmwPcSGS6TI8d7I5gAb3Lqq6PEGHUfvho577scU2s_Lubi0RG_VTfaoNxggzFbvDlCzJom9EXWwbxGuLGk49OxtLile1_bX0kit8zOJhFoOGPjiO-GSvH5Qi4tvjYoowrBkTIyYD6Jw81ET_q2uTHaB15kWpMTl2uHeED-aRWivtX_rfTnFq3Wed3SmAPdS5Tb9g46hURKwq11O_ubGjqFbtQCsY9bIJpH5GShUURoQvWsTlqSqEyr7zgzc0wlMXwVQ' + # } + # headers = lc.headers + response = requests.request("GET", url, headers=lc.headers, data=payload) + print(response.text) + return response + pass + +def put_calendar_event(lc, start_date, end_date, title="Lecture", description="Do some stuff today", location_name="Auditorim 666"): + """ + [{'CalendarEventId': 131048, + 'OrgUnitId': 8407, + 'CreatorUserId': 3397, + 'Title': 'This even is a lecture! feel free to drop dead. ', + 'Description': 'Oy veh.', + 'CalendarEventViewUrl': 'https://testdtu.brightspace.com/d2l/le/calendar/8407/event/146759/detailsview', + 'IsAllDayEvent': False, + 'GroupId': None, + 'StartDateTime': '2022-10-26T23:00:00.000Z', + 'EndDateTime': '2022-10-27T01:00:00.000Z', + 'IsRecurring': False, + 'RecurrenceInfo': None, + 'StartDay': None, + 'EndDay': None, + 'LocationId': None, + 'LocationName': 'Auditorium', + 'OrgUnitName': 'Tue Herlau- Sandbox', + 'OrgUnitCode': 'OFFERING-SANDBOX-92378', + 'IsAssociatedWithEntity': False, + 'AssociatedEntity': None, + 'HasVisibilityRestrictions': False, + 'VisibilityRestrictions': {'Type': 1, + 'Range': None, + 'HiddenRangeUnitType': None, + 'StartDate': None, + 'EndDate': None}, + 'Presenters': []}] + """ + + + + url = f"https://testdtu.brightspace.com/d2l/api/le/{lc.lp_version}/{lc.orgunitId}/calendar/event/" + + payload = json.dumps({ + "Title": title, # "Today's Special 666b", + "Description": description, # "<p>Soup <b>is relly good</p><p>and also healthy</p>", + "StartDateTime": lc.isodate(start_date), # "2019-05-02T20:00:00.000Z", + "EndDateTime": lc.isodate(end_date), # "2019-05-02T20:30:00.000Z", + "StartDay": None, + "EndDay": None, + "GroupId": None, + "RecurrenceInfo": None, + "LocationId": None, + "LocationName": location_name, + "AssociatedEntity": None, + "VisibilityRestrictions": { + "Type": 1, + "Range": None, + "HiddenRangeUnitType": None, + "StartDate": None, + "EndDate": None + } + }) + headers = lc.get_header() + headers['Content-Type'] = 'application/json' + response = requests.request("POST", url, headers=headers, data=payload) + print(response.text) + +if __name__ == '__main__': + lc = LearnConfig() + get_calendar_events(lc) + from datetime import datetime, timedelta + put_calendar_event(lc, start_date=datetime.now(), end_date=datetime.now() + timedelta(hours=2), title="Do stuff for lecture 4", description="<p><b>MORE</b></p>", location_name="Room 022") diff --git a/src/unlearn/scrap.py b/src/unlearn/scrap.py new file mode 100644 index 0000000..9e96d59 --- /dev/null +++ b/src/unlearn/scrap.py @@ -0,0 +1,27 @@ +# Cartoon elk: https://community.desire2learn.com/d2l/home/14841 +""" +I will just copy the required information in again: + +Client ID + +4801a477-11c7-4cfc-8732-736f041578be + +Client Secret + +niLXYwe9f_pQe2RzvZ8LtYE6Ls6DSiZ_0IeTCPhx4_8 + + +Description + +Redirect URI +https://localhost:3434/redirecturi +Access Token Lifetime (seconds) +3600 +Scope +core:*:* + + +ACCESS CODE (learn) +tuhe / G(..)(!60 optional). + +""" \ No newline at end of file -- GitLab