Create a script allowing to checkin to hso rooms

Missing feature:
- username / password storage

This will be added later.
This commit is contained in:
Lukas Fürderer 2021-10-15 09:40:06 +02:00
commit 2de4cffefc

66
checkin Executable file
View File

@ -0,0 +1,66 @@
#! /usr/bin/env python3
import calendar, datetime, getpass, json, requests, sys, time
def api_request(method, url, auth_token, request_data):
headers = {"Content-Type": "application/json; charset=utf-8"}
#if request_data is not None:
# headers["Content-Type"] = "application/json; charset=utf-8"
if auth_token is not None:
headers["Authorization"] = "Bearer " + auth_token
if method == "get":
func = requests.get
elif method == "post":
func = requests.post
else:
raise Exception("invalid method: " + method)
response = func(
"https://checkin.hs-offenburg.de/api/v1" + url,
headers = headers,
data = json.dumps(request_data) if request_data is not None else None,
)
return response.json()
def checkin(user, password, room):
login = api_request("post", "/internal/login", None, {
"username": user,
"password": password,
})
if "message" in login:
print(login["message"], file=sys.stderr)
exit(1)
auth_token = login["token"]
contact_details = api_request("get", "/contact-details", auth_token, None)
checkin_data = {
"payload": {
"detailsId": contact_details["id"],
"email": contact_details["email"],
"entryType": "standard",
"period": 90,
"prename": contact_details["prename"],
"seatNumber": "",
"slug": room.lower(),
"startDate": datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
"surname": contact_details["surname"],
"username": contact_details["username"],
},
}
checkin_result = api_request("post", "/internal/check-in", auth_token, checkin_data)
if "error" in checkin_result:
print(checkin_result["message"], file=sys.stderr)
exit(1)
utcEndTime = time.strptime(checkin_result["endTime"], "%Y-%m-%dT%H:%M:%S.%fZ")
localEndTime = time.localtime(calendar.timegm(utcEndTime))
endTimeStr = time.strftime("%H:%M", localEndTime)
print("Successfully checked in until " + endTimeStr)
def main():
if len(sys.argv) != 2:
print("Usage: checkin <room>", file=sys.stderr)
exit(1)
user = input("HSO username: ")
password = getpass.getpass("HSO password: ")
checkin(user, password, sys.argv[1])
if __name__ == '__main__':
main()