-
Notifications
You must be signed in to change notification settings - Fork 17
Description
Ahoj, v dokumentaci jsem si nevšiml API endpoint pro public rozvrhy, a tak jsem se prošťoural v aplikaci bakalářů, a něco jsem našel.
/api/3/timetable/permanent/class/:classId
/api/3/timetable/student/:studentId
/api/3/timetable/actual/class/:classId
Myslím že fungují velmi podobně jako normální /timetable/actual a permanent, akorát tady je potřeba classId nebo studentId.
Co jsem tak zjišťoval, tak classId je 2 místná kombinace čísla 0 - 9 a pouze velkých písmen, celkem 36 různých charakterů, takže 36 ^ 2 = 1296 kombinací. Větší problém je pak najít ID studentů a učitelů, ty jsou už pěti místné, takže 60466176 kombinací. Bakaláře (alespoň u nás ve škole) nejsou vůbec stavěné na brute force těch IDček, a bohužel jsem nenašel žádný json kde by byly, server to prostě zpracovává sám a nám posílá už hotové html.
Kdyby náhodou to chtěl někdo zkusit, rychle jsem splácal tenhle python script
import requests
import itertools
import string
import time
charset = string.digits + string.ascii_uppercase
codes = [''.join(c) for c in itertools.product(charset, repeat=2)]
url_template = "https://truhla.bakalari.cz/api/3/timetable/permanent/class/{}"
api_key = ""
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Authorization": f"Bearer {api_key}",
"User-Agent": "Mozilla/5.0"
}
for code in codes:
url = url_template.format(code)
try:
response = requests.get(url, headers=headers, timeout=5)
if response.status_code == 200:
print(f"✅ Found valid classcode: {code}")
except requests.RequestException as e:
print(f"⚠ Error for {code}: {e}")
time.sleep(2) //Pokus o předejití DDoS obavám ze strany IT správců, ale asi to ani nemá smyslJediný způsob na který jsem přišel, jak zjistit ty IDčka je jít na stránku veřejného rozvrhu, podívats se do HTML těch tagů a manuálně to z toho vytáhnout. Poslal bych i nějaké fotky těch bakalářu aby bylo lépe vidět o čem mluvím, ale v době psaní zase spadly, takže nic. Mimochode, je zajímavé že jsem to našel v mobilní apce, přitom jsem si nevšiml, že by tam přibyla funkce na public rozvrhy. To je asi taky důvod, proč jsem nenašel žádný json s těmi ID.