Create a script allowing to checkin to hso rooms
Missing feature: - username / password storage This will be added later.
This commit is contained in:
commit
2de4cffefc
66
checkin
Executable file
66
checkin
Executable 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()
|
Loading…
x
Reference in New Issue
Block a user