anny-booking-automation/auth/providers/kit.py

38 lines
1.2 KiB
Python
Raw Normal View History

import html
from auth.providers.base import SSOProvider
from utils.helpers import extract_html_value
class KITProvider(SSOProvider):
"""SSO provider for Karlsruhe Institute of Technology (KIT)."""
name = "KIT"
domain = "kit.edu"
def authenticate(self) -> str:
2026-02-06 17:42:40 +01:00
self.session.headers.pop("x-requested-with", None)
self.session.headers.pop("x-inertia", None)
self.session.headers.pop("x-inertia-version", None)
csrf_token = extract_html_value(
2026-02-06 17:42:40 +01:00
self.redirect_response.text, r'name="csrf_token" value="([^"]+)"'
)
response = self.session.post(
2026-02-06 17:42:40 +01:00
"https://idp.scc.kit.edu/idp/profile/SAML2/Redirect/SSO?execution=e1s1",
data={
2026-02-06 17:42:40 +01:00
"csrf_token": csrf_token,
"j_username": self.username,
"j_password": self.password,
"_eventId_proceed": "",
"fudis_web_authn_assertion_input": "",
},
)
if "/consume" not in html.unescape(response.text):
2026-02-06 17:42:40 +01:00
raise ValueError(
"KIT authentication failed - invalid credentials or SSO error"
)
return response.text