{"id":17113848,"url":"https://github.com/soptikha2/bakalari_webapp","last_synced_at":"2026-05-18T15:36:17.874Z","repository":{"id":144223162,"uuid":"162986779","full_name":"SoptikHa2/bakalari_webapp","owner":"SoptikHa2","description":"Unofficial webclient for school system Bakaláři","archived":false,"fork":false,"pushed_at":"2019-08-09T19:51:02.000Z","size":771,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-18T13:48:21.462Z","etag":null,"topics":["bakalari","dart","mvc","stream","webapp"],"latest_commit_sha":null,"homepage":"https://bakaweb.ga/","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SoptikHa2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-24T12:05:47.000Z","updated_at":"2020-07-01T07:15:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"342821f4-e274-4b6a-848b-f1edc08b965b","html_url":"https://github.com/SoptikHa2/bakalari_webapp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SoptikHa2/bakalari_webapp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoptikHa2%2Fbakalari_webapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoptikHa2%2Fbakalari_webapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoptikHa2%2Fbakalari_webapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoptikHa2%2Fbakalari_webapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SoptikHa2","download_url":"https://codeload.github.com/SoptikHa2/bakalari_webapp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoptikHa2%2Fbakalari_webapp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33183131,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T09:27:30.708Z","status":"ssl_error","status_checked_at":"2026-05-18T09:27:28.300Z","response_time":71,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bakalari","dart","mvc","stream","webapp"],"created_at":"2024-10-14T17:12:58.220Z","updated_at":"2026-05-18T15:36:17.857Z","avatar_url":"https://github.com/SoptikHa2.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bakaláři - Webová Aplikace\n\nToto je kompletní kód webové aplikace. Tato webová aplikace slouží jako alternativní metoda přístupu k systému Bakaláři. Umí zobrazovat váhy předmětů, počítat průměr, zobrazovat denní rozvrh, a dokonce funguje i offline.\n\nTato webová aplikace je momentálně dostupná na [bakaweb.ga](https://bakaweb.ga/). Certifikát prozatím není validní, vše hostuji doma a používám sebou podepsaný certifikát.\n\nTato webová aplikace používá knihovnu kterou jsem napsal: [soptikha2/bakalari](https://github.com/soptikha2/bakalari).\n\nAplikace je napsaná v [Dartu](https://dartlang.org) a používá framework [rikulo/stream](https://github.com/rikulo/stream/).\n\n## Logování\n\nTato aplikace loguje přístupy IP adres, které jsou zahashovány. Toto se používá ke kreslení grafu, který zobrazuje unikátní přístupy na den. Rovněž je logována škola a třída přihlašovaných studentů, což je ovšem plně anonymní (dokonce i bez ip adres). Toto je také používání ke kreslení grafů. Všechna ostatní data jsou v databázi zašifrována klíčem, který existuje pouze v prohlížeči uživatele - bez uživatele tyto data nejdou rozšifrovat.\n\n## Vlastní hostování\n\n### Docker\n\nStačí stáhnout zdrojový kód, vygenerovat `secret.dart` který obsahuje věci jako hashe hesla administrátora, a spustit Docker. Je nutné mít nainstalované `base64`, `sha256sum` a `docker`.\n```\ngit clone https://github.com/SoptikHa2/bakalari_webapp.git \u0026\u0026 cd bakalari_webapp\n./generate-secret-file.sh\ndocker build -t soptikha2/bakalari_webapp .\ndocker run -p 1234:8080 soptikha2/bakalari_webapp # Spusti aplikaci na portu 1234\n```\n\nAby fungovalo našeptávání je nutné nejdříve načíst seznam škol. Stačí poslat GET request (nebo navštívit stránku v prohlížeči, ale bude to chvíli trvat) na adresu, kterou lze vyčíst v souboru `secret.dart` nebo získat pomocí nástroje grep.\n```\ncurl \"http://localhost:1234\"$(egrep '/admin/update/[^\"]*' web/webapp/secret.dart -o) # V pripade portu 1234\n```\n\n### Manuální instalace\n\nJestli nechcete instalovat docker, jde to i bez toho. Stáhněte zdrojový kód:\n\n```\n$ git clone https://github.com/SoptikHa2/bakalari_webapp.git \u0026\u0026 cd bakalari_webapp\n```\n\nPoté nainstaluje programovací jazyk [Dart](dartlang.org).\n\nPoté je nutné stáhnout knihovny potřebné pro běh serveru, mělo by stačit spustit příkaz `pub get` v složce tohoto projektu.\n\nPoté spusťte soubor `generate-secret-file.sh` a plňte instrukce.\n```\n$ ./generate-secret-file.sh\n```\n\nPoté stačí spustit soubor `run.sh` a server se spustí na portu `8080`.\n\nAby fungovalo našeptávání je nutné nejdříve načíst seznam škol. Stačí poslat GET request (nebo navštívit stránku v prohlížeči, ale bude to chvíli trvat) na adresu, kterou lze vyčíst v souboru `secret.dart` nebo získat pomocí nástroje grep.\n```\ncurl \"http://localhost:8080\"$(egrep '/admin/update/[^\"]*' web/webapp/secret.dart -o)\n```\n\n## Jak to funguje uvnitř\n\nOhledně fungování dotazů na server se podívejte na knihovnu [soptikha2/bakalari](https://github.com/soptikha2/bakalari).\n\nRelativně k složce `web/webapp`:\n\nSoubor `config.dart` definuje základní konfiguraci serveru a mapuje URI adresy na controllery. V složce `controller` jsou kontrolery pro administrátora, studenta, a poté obecné kontrolery pro jednotlivé stránky nebo věci, co se nehodí nikam jinam.\n\nVe složce `tools` jsou nástroje, které se starají například o ukládání hesel nebo o přístup do databáze.\n\nVe složce `view` jsou různé templaty. Tyto templaty končí na `.rsp.html`, jdou zkompilovat pomocí skriptu `buildRsp.sh` v rootu projektu. Po zkompilování se vytvoří soubory `.rsp.dart`, které jsou používány webserverem.\n\nVe složce model jsou jednotlivé objekty, se kterými webová aplikace pracuje, jako třeba student nebo zprávy zasílané administrátorovi.\n\n## V případě nouze\n\nAdministrátor může dočasně vypnout server. Po přihlášení je v dolní části stránky formulář. Po vyplnění důvodu, který bude zobrazen všem uživatelům a znovu zadáním dvoufaktorového kódu budou všechny žádosti (včetně těch na administrátorský panel) přesměrovány na chybovou stránku. Momentálně jsou dvě, jedna prázdná (pouze s textem od administrátora) a druhá s předpřiveným obrázkem v případě nutnosti použít status [451](https://en.wikipedia.org/wiki/HTTP_451).\n\nAdministrátor může na těchto stránkách používat libovolné HTML.\n\nTato změna bude trvat až do manuálního restartu serveru. Může být učiněna permanentní, ale je nutné v souboru `config.dart` změnit několik hodnot (konkrétně `siteShutdownType` a `siteShutdownReason`).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoptikha2%2Fbakalari_webapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoptikha2%2Fbakalari_webapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoptikha2%2Fbakalari_webapp/lists"}