

Mode.HYBRID -> {
api.getStudents().flatMapObservable { Observable.fromIterable(it) }.flatMapSingle {
api.run {
studentId = it.studentId
classId = it.classId
}
api.getToken().flatMap {
getApiStudents(it.token, it.pin)
}.map { apiStudents ->
apiStudents.map { apiStudent ->
apiStudent.copy(loginMode = Mode.HYBRID)
}
}
}.toList().map { it.flatten() }
}

sdk-integration jedynym dostępnym typem logowania jest na razie logowanie hybrydowe






































{\"Status\":\"Ok\",\"TimeKey\":1556906397,\"TimeValue\":\"2019.05.03 19:59:57\",\"RequestId\":\"\",\"DayOfWeek\":5,\"AppVersion\":\"19.03.0001.32916\",\"Data\":[{\"IdOkresKlasyfikacyjny\":0,\"OkresPoziom\":0,\"OkresNumer\":0,\"OkresDataOd\":0,\"OkresDataDo\":0,\"OkresDataOdTekst\":null,\"OkresDataDoTekst\":null,\"IdJednostkaSprawozdawcza\":2,\"JednostkaSprawozdawczaSkrot\":\"ZS Kleszcz\",\"JednostkaSprawozdawczaNazwa\":\"Zesp\u00f3\u0142 Szk\u00f3\u0142\",\"JednostkaSprawozdawczaSymbol\":\"000414\",\"IdJednostka\":0,\"JednostkaNazwa\":null,\"JednostkaSkrot\":null,\"OddzialSymbol\":null,\"OddzialKod\":null,\"UzytkownikRola\":\"opiekun\",\"UzytkownikLogin\":\"***@***\",\"UzytkownikLoginId\":1234,\"UzytkownikNazwa\":\"****\",\"Id\":69,\"IdOddzial\":0,\"Imie\":\"****\",\"Imie2\":\"****\",\"Nazwisko\":\"****\",\"Pseudonim\":\"\",\"UczenPlec\":1,\"Pozycja\":0,\"LoginId\":null}]}"
Mam nadzieję że sobie od-escapujesz






OkresDataDo jest nullem








UzytkownikNazwa


- sprawdziany są teraz pobierane przez mobilne api dla kont z poprzednich lat mobilne api nie zwraca żadnego sprawdzianu, mimo oczywiście podania poprawnych dat




hack


IdOkresKlasyfikacyjny ustawiasz na 1 i powinno ci coś zwrócić
{
"Status": "Ok",
"TimeKey": 1557852328,
"TimeValue": "2019.05.14 18:45:27",
"RequestId": "46ba66da-4453-4518-9fe8-b451de23e018",
"DayOfWeek": 2,
"AppVersion": "19.04.0000.33271",
"Data": []
}coś? normalne dane takie jakbyś podał normalne ID?
{
"DataPoczatkowa": "2015-09-01",
"DataKoncowa": "2015-09-25",
"IdOddzial": 1,
"IdOkresKlasyfikacyjny": 1,
"IdUczen": 1,
"RemoteMobileTimeKey": 1524661083,
"TimeKey": 1524661082,
"RequestId": "xxx",
"RemoteMobileAppVersion": "18.4.1.388",
"RemoteMobileAppName": "VULCAN-Android-ModulUcznia"
}
IdOddzial i IdUczen ustawione prawidłowo

"NadawcaWiadomosci": "Andrzej Duda (też łapie)",
"Tytul": " ",
"Tresc": " ",
"Adresaci": [
{
"LoginId": 4907,
"Nazwa": ""
}
],




012345678901234567890123456789AB
















































classId i studentId?









mode na API (edited)





















implementation w build.gradle xd














Application















filmowy?



















++







aa732bf






Collections.sort(lessons,new Comparator<Lesson>(){
@Override
public int compare(final Lesson first , final Lesson second) {
return Integer.compare(first.getNumber(), second.getNumber());
});



list.sort(Comparator.comparing(Lesson::getNumber));
lessons.sortBy { it.number } 
java list.sort(Comparator.comparing(a -> a.getNumber());







































-1

semestry?











System.out.println(sdk.getSemesters()) to powinno się coś pokazać





apiBaseUrl i symbolline by też mogło być










































{"data":[{"IkonkaNazwa":null,"Num":null,"Zawartosc":[{"IkonkaNazwa":null,"Num":null,"Zawartosc":[],"Nazwa":"Czwartek (15.08.2019) - Wniebowzięcie Najświętszej Maryi Panny","Url":null,"Symbol":null,"Nieaktywny":false}],"Nazwa":"","Url":null,"Symbol":null,"Nieaktywny":false}],"success":true,"errorMessage":null,"feedback":null}


















sdk.setScrapperHost()
https://github.com/wulkanowy/sdk/blob/master/src/main/kotlin/io/github/wulkanowy/sdk/Sdk.kt#L94 (edited)













5b8665c

















96544d1



























2df19f7
1






Sdk.logLevel = HttpLoggingInterceptor.Level.BODYUczen.v3.UczenStart/Certyfikat i request do Uczen.v3.UczenStart/ListaUczniow





implementation "com.squareup.okhttp3:logging-interceptor:3.12.6"
1









data class Semester(
val diaryId: Int,
val diaryName: String,
val schoolYear: Int,
val semesterId: Int,
val semesterNumber: Int,
val current: Boolean,
val start: LocalDate,
val end: LocalDate,
val classId: Int,
val unitId: Int
)val diaryIdval semesterId




https://uonetplus.eszkola.opolskie.pl/opole/LoginEndpoint.aspx?rebuild=[drugi_mail] to działa

||






adb logcat -s "Wulkanowy"


An unexpected error, skopiowałam teraz i zaraz dam linka


12-12 14:18:21.566 19849 21458 D Wulkanowy: --> POST https://uonetplus-uczen.eszkola.opolskie.pl/opole/OpoleZSE/Oceny.mvc/Get (14-byte body)
12-12 14:18:22.180 19849 21458 D Wulkanowy: <-- 200 OK https://uonetplus-uczen.eszkola.opolskie.pl/opole/OpoleZSE/Oceny.mvc/Get (611ms, 257-byte body)










https://selfisekai.rocks/wulkanowy-integration/opolezse{
"integrations": ["lucky_number"]
}https://selfisekai.rocks/wulkanowy-integration/opolezse/lucky_numer:
{
"lucky_number": "21"
"lucky_number_future": {
"tommorow": "37"
}
}





GitHub 



















szkolny się dobrze odmienia i łatwo mówi, ale tego .eu to nikt chyba nie wymawia

















Inne opcjeHybrid i spróbuj się zalogować













adb?









Inne opcje tryb hybrydowy





Inne opcje



Wulkanowy DEV has stopped













declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar








Caused by io.github.wulkanowy.sdk.exception.VulcanException: could not execute query
[ EXEC [dbo].[UP_PRC_GetLoginUprawnieniaWJednostce] @idsLogin=@p0, @idJednostkaSprawozdawcza=@p1, @userPesel=@p2 ]
Name:idsLogin - Value: Name:idJednostkaSprawozdawcza - Value:11 Name:userPesel - Value:052xxxxxxx
[SQL: EXEC [dbo].[UP_PRC_GetLoginUprawnieniaWJednostce] @idsLogin=@p0, @idJednostkaSprawozdawcza=@p1, @userPesel=@p2] (edited)



name, a ustaliłem na sztywno tylko jedno, pod vulcan.net.pl







<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTU0NzUyNzIyMGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFE1Bhc3NpdmVTaWduSW5CdXR0b27qayH5RfNRXZtYkzzUh81aK/i8Hg==" />
</div>
<div>
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="1736B89C" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQLr3+H5BQLnmcnFAQLSqoWCCwKJ/5GLDQKyoLzyCe85dDxGjSdAUJ1popOpTy2g/osa" />
</div><input type="hidden" name="__db" value="14" /







{ ... "pokazLekcjeZrealizowane": false ... }

{
"Id": 21558,
"IdPrzedmiot": 307,
"IdPracownik": 3,
"IdOddzial": 97,
"IdPodzial": null,
"PodzialNazwa": null,
"PodzialSkrot": null,
"Rodzaj": true,
"Opis": "Figury na płaszczyźnie.",
"Data": 1578873600,
"DataTekst": "2020-01-13"
}RodzajNumer
[{
"Id": 2740,
"IdPrzedmiot": 118,
"IdPracownik": 94,
"IdOddzial": 52,
"IdPodzial": null,
"PodzialNazwa": null,
"PodzialSkrot": null,
"Rodzaj": true,
"RodzajNumer": 1,
"Opis": "Bajki - Ignacy Krasicki",
"Data": 1579215600,
"DataTekst": "2020-01-17"
}]

{
"WiadomoscId":28973,
"Nadawca":"Kowalski Jan",
"NadawcaId":2137,
"Adresaci":null,
"Tytul":"Tytuł",
"Tresc":"Dużo różnych treści.\nBardzo dużo,\nbardzo długie to potrafi być",
"DataWyslania":"05.04.2018",
"DataWyslaniaUnixEpoch":1522921875,
"GodzinaWyslania":"11:51",
"DataPrzeczytania":null,
"DataPrzeczytaniaUnixEpoch":null,
"GodzinaPrzeczytania":null,
"StatusWiadomosci":"Widoczna",
"FolderWiadomosci":"Odebrane",
"Nieprzeczytane":null,
"Przeczytane":null
}WiadomosciOdebrane
{
"WiadomoscId": 10838,
"Nadawca": "Kowalski Nauczyciel",
"NadawcaId": 494,
"Adresaci": [{
"LoginId": 566,
"Nazwa": "Kowalski Adresat - opiekun - Kowalski Uczeń 4A (Szkola Przyszlosci)"
}],
"Tytul": "Temat wiadomosci",
"Tresc": "no a tu wiadomosc, nudy nudy",
"DataWyslania": "08.01.2020",
"DataWyslaniaUnixEpoch": 1578493827,
"GodzinaWyslania": "15:30",
"DataPrzeczytania": null,
"DataPrzeczytaniaUnixEpoch": null,
"GodzinaPrzeczytania": null,
"StatusWiadomosci": "Widoczna",
"FolderWiadomosci": "Odebrane",
"Nieprzeczytane": null,
"Przeczytane": null
}














dependencies {
implementation 'com.github.dominik-korsa:sdk:feature~attendance-summary-total-SNAPSHOT'
}



GitHub 

GitHub 












<div v-if="tiles.kidsLuckyNumbers.showForWorker || tiles.kidsLuckyNumbers.showForClient" v-show="tiles.kidsLuckyNumbers.showForWorker && filter.worker || tiles.kidsLuckyNumbers.showForClient && filter.client" class="panel szczesliweNumery klient">
<div class="imagedHeader">
<div class="szczesliweNumeryImg appImg"></div>
<div class="name">Szczęśliwy numer w dzienniku ucznia</div>
<div v-show="!tiles.kidsLuckyNumbers.open" style="float: right; cursor: pointer;" v-on:click="openTile('kidsLuckyNumbers')"><i class="fas fa-angle-double-down"></i></div>
<div v-show="tiles.kidsLuckyNumbers.open" style="float: right; cursor: pointer;" v-on:click="closeTile('kidsLuckyNumbers')"><i class="fas fa-angle-double-up"></i></div>
</div>
<div v-show="tiles.kidsLuckyNumbers.open" class="separator"></div>
<div v-show="tiles.kidsLuckyNumbers.open && !tiles.kidsLuckyNumbers.source.length" class="subDiv pCont">Brak danych do wyświetlenia</div>
<div v-show="tiles.kidsLuckyNumbers.open" class="subDiv pCont">
<div v-for="item in tiles.kidsLuckyNumbers.source">
<div v-show="item.Nazwa" class="headerMain">
<div class="name">{{item.Nazwa}}</div>
</div>
<div class="subDiv pCont">
<div class="subDiv" v-for="el in item.Zawartosc">
<span v-html="el.Nazwa"></span>
<div class="subDiv" v-for="x in el.Zawartosc">
<span v-html="x.Nazwa"></span>
</div>
</div>
</div>
</div>
</div>
</div>
że to? (edited)



<div class="panel szczesliweNumery klient isotope-item" style="position: absolute; left: 0px; top: 0px; opacity: 1; transform: translate3d(380px, 332px, 0px) scale3d(1, 1, 1);"><div class="imagedHeader"><div class="szczesliweNumeryImg appImg"></div> <div class="name">Szczęśliwy numer w dzienniku ucznia</div> <div style="float: right; cursor: pointer; display: none;"><i class="fas fa-angle-double-down"></i></div> <div style="float: right; cursor: pointer;"><i class="fas fa-angle-double-up"></i></div></div> <div class="separator" style=""></div> <div class="subDiv pCont" style="display: none;">Brak danych do wyświetlenia</div> <div class="subDiv pCont" style=""><div><div class="headerMain" style="display: none;"><div class="name"></div></div> <div class="subDiv pCont"><div class="subDiv"><span>ZS Szkoła</span> <div class="subDiv"><span>Szczęśliwy numer w dzienniku: 12</span></div></div></div></div></div></div>

























apiGet(TAG, "/mobile-api/Uczen.v3.Uczen/ZmienStatusWiadomosci", parameters = mapOf(
"WiadomoscId" to messageObject.id,
"FolderWiadomosci" to "Odebrane",
"Status" to "Widoczna",
"LoginId" to data.studentLoginId,
"IdUczen" to data.studentId
))


























selectFirst("span").hasClass(CLASS_MOVED_OR_CANCELED) a selectFirst bedzie undefined to błąd wywali



{
"success":true,
"data":[
{
"Nazwa":"Nazwisko Imię [IN] - pracownik (SPmiejscowosc)",
"Data":"2019-03-02 16:45:25",
"Id":711799
}
]
} (edited){
"success": true,
"data": [
{
"Id": "1817054",
"Nazwa": "Nazwisko Imię [NI] - Nauczyciel (SPMiejscowosc)",
"IdLogin": 6084,
"IdJednostkaSprawozdawcza": null,
"Rola": 0,
"PushWiadomosc": null,
"Hash": "mrAlBOzPCam7H64kKq10+XSTw0hjQTlyMV7x2tiytp8="
}
]
}{
"success": true,
"data": [
{
"Id": "447rNauczyciel",
"Nazwa": "Nazwisko Imię [NI] - Nauczyciel (SPMiejscowosc)",
"IdLogin": 6084,
"IdJednostkaSprawozdawcza": 5,
"Rola": 6,
"PushWiadomosc": null,
"Hash": "mrAlBOzPCam7H64kKq10+XSTw0hjQTlyMV7x2tiytp8="
},
]
}





{
"deviceId": "1234567890123456",
"lastSync": 1586191450764,
"notifications": [{
"profileName": "Jakub Szczodrzyński",
"text": "Homework from pracownia aplikacji internetowych for 7 kwietnia",
"type": 10
}, {
"profileName": "Jakub Szczodrzyński",
"text": "New grade (5) from pracownia urządzeń techniki komputerowej",
"type": 5
}, {
"profileName": "Jakub Szczodrzyński",
"text": "Today 14 is the lucky number.",
"type": 14
}],
"userCodes": ["zslpoznan:kubasz😂:2774", "zslpoznan:kubasz:2774"],
"users": []
}

e-59









https://uonetplus.vulcan.net.pl/default/LoginEndpoint.aspxhttps://uonetplus.vulcan.net.pl/default/LoginEndpoint.aspx (edited)https://iuczniowie.eduportal.koszalin.pl/Default.aspx dostajemy certyfikat z takim samym audience, i to koniec
audience?
adfs. otrzymujemy pierwszy cert, który jest wysłany do cufs., i potem dostajemy cert z pierwotnym audience? np. https://uonetplus.umt.tarnow.pl/tarnow/LoginEndpoint.aspx

wtrealm

adfs.) pewnie idzie na cufs.umt.tarnow.pl, który potem zwraca cert który idzie na uonetplus.
Getting realm https://uonetplus.vulcan.net.pl/default/LoginEndpoint.aspx
Redirecting to https://cufs.vulcan.net.pl/default/FS/LS?wa=wsignin1.0&wtrealm=https%3a%2f%2fuonetplus.vulcan.net.pl%2fdefault%2fLoginEndpoint.aspx&wctx=https%3a%2f%2fuonetplus.vulcan.net.pl%2fdefault%2fLoginEndpoint.aspx
- wtrealm: https://uonetplus.vulcan.net.pl/default/LoginEndpoint.aspx
- wctx: https://uonetplus.vulcan.net.pl/default/LoginEndpoint.aspx
Redirecting to https://cufs.vulcan.net.pl/default/Account/LogOn?ReturnUrl=%2Fdefault%2FFS%2FLS%3Fwa%3Dwsignin1.0%26wtrealm%3Dhttps%253a%252f%252fuonetplus.vulcan.net.pl%252fdefault%252fLoginEndpoint.aspx%26wctx%3Dhttps%253a%252f%252fuonetplus.vulcan.net.pl%252fdefault%252fLoginEndpoint.aspx
- wtrealm: null
- wctx: null
Finished at https://cufs.vulcan.net.pl/default/Account/LogOn?ReturnUrl=%2Fdefault%2FFS%2FLS%3Fwa%3Dwsignin1.0%26wtrealm%3Dhttps%253a%252f%252fuonetplus.vulcan.net.pl%252fdefault%252fLoginEndpoint.aspx%26wctx%3Dhttps%253a%252f%252fuonetplus.vulcan.net.pl%252fdefault%252fLoginEndpoint.aspx























CUFS Realm: https://uonetplus.umt.tarnow.pl/tarnow/LoginEndpoint.aspx
ADFS Realm:
- wtrealm: https://cufs.umt.tarnow.pl:443/tarnow/Account/LogOn
- wctx: rm=0&id=adfs&ru=%2Ftarnow%2FFS%2FLS%3Fwa%3Dwsignin1.0%26wtrealm%3Dhttps%253A%252F%252Fuonetplus.umt.tarnow.pl%252Ftarnow%252FLoginEndpoint.aspx%26wctx%3Dhttps%253A%252F%252Fuonetplus.umt.tarnow.pl%252Ftarnow%252FLoginEndpoint.aspx
iDziennik ADFS Realm:
- wtrealm: https://iuczniowie.eduportal.koszalin.pl:443/Default.aspx
- wctx: rm=0&id=passive&ru=%2F







val realms = listOf<BaseRealm>(
CufsRealm(host = "vulcan.net.pl", symbol = "default"),
CufsRealm(host = "vulcan.net.pl", symbol = "powiatketrzynski").toAdfsLightRealm(id = "ADFSLight", isScoped = true),
CufsRealm(host = "resman.pl", symbol = "rzeszow").toAdfsLightRealm(id = "ADFS"),
CufsRealm(host = "umt.tarnow.pl", symbol = "tarnow").toAdfsRealm(id = "adfs"),
CufsRealm(host = "edu.lublin.eu", symbol = "lublin").toAdfsLightRealm(id = "AdfsLight", domain = "logowanie"),
CufsRealm(host = "edu.gdansk.pl", symbol = "gdansk").toAdfsRealm("adfs"),
AdfsRealm(hostPrefix = "iuczniowie", host = "eduportal.koszalin.pl", path = "Default.aspx", id = "passive")
) (edited)

URL for vulcan.net.pl is: https://cufs.vulcan.net.pl/default/Account/LogOn?ReturnUrl=%2Fdefault
URL for vulcan.net.pl is: https://adfslight.vulcan.net.pl/powiatketrzynski/LoginPage.aspx?Retur
URL for resman.pl is: https://adfslight.resman.pl/LoginPage.aspx?ReturnUrl=%2F%3Fwa%3Dwsignin1.
URL for umt.tarnow.pl is: https://adfs.umt.tarnow.pl/adfs/ls/?wa=wsignin1.0&wtrealm=https%3A%2F
URL for edu.lublin.eu is: https://logowanie.edu.lublin.eu/LoginPage.aspx?ReturnUrl=%2F%3Fwa%3Dw
URL for edu.gdansk.pl is: https://adfs.edu.gdansk.pl/adfs/ls/?wa=wsignin1.0&wtrealm=https%3A%2F
URL for eduportal.koszalin.pl is: https://adfs.eduportal.koszalin.pl/adfs/ls/?wa=wsignin1.0&wtr (edited)




getADFSUrl, które nie jest zbyt czytelne, ale przynajmniej działa



















@GET
fun getForm(@Url url: String): Single<ADFSFormResponse>




Exception in thread "main" javax.net.ssl.SSLHandshakeException: Server chose TLSv1, but that protocol version is not enabled or not supported by the client.













tarnow?


























Waiting for adfs.eszkola.opolskie.pl ciągle







https://adfs.eszkola.opolskie.pl/adfs/ls/auth/integrated/?wa=wsignin1.0&wtrealm=https%3A%2F%2Fcufs.eszkola.opolskie.pl%3A443%2Fopole%2FAccount%2FLogOn&wctx=rm%3D0%26id%3DeSzkola%26ru%3D%252Fopole%252FFS%252FLS%253Fwa%253Dwsignin1.0%2526wtrealm%253Dhttps%25253A%25252F%25252Fuonetplus.eszkola.opolskie.pl%25252Fopole%25252FLoginEndpoint.aspx%2526wctx%253Dhttps%25253A%25252F%25252Fuonetplus.eszkola.opolskie.pl%25252Fopole%25252FLoginEndpoint.aspx&wct=2020-04-09T12%3A25%3A29Z




https://adfs.eszkola.opolskie.pl/adfs/ls/?wa=wsignin1.0&wtrealm=https%3A%2F%2Fcufs.eszkola.opolskie.pl%3A443%2Fopole%2FAccount%2FLogOn&wctx=rm%3D0%26id%3DeSzkola%26ru%3D%252Fopole%252FFS%252FLS%253Fwa%253Dwsignin1.0%2526wtrealm%253Dhttps%25253A%25252F%25252Fuonetplus.eszkola.opolskie.pl%25252Fopole%25252FLoginEndpoint.aspx%2526wctx%253Dhttps%25253A%25252F%25252Fuonetplus.eszkola.opolskie.pl%25252Fopole%25252FLoginEndpoint.aspx&wct=2020-04-09T12%3A31%3A31Z
https://adfs.eszkola.opolskie.pl/adfs/ls/?wa=wsignin1.0&wtrealm=https%3a%2f%2fcufs.eszkola.opolskie.pl%2fopole%2fAccount%2fLogOn&wctx=rm%3d0%26id%3deSzkola%26ru%3d%252fopole%252fFS%252fLS%253fwa%253dwsignin1.0%2526wtrealm%253dhttps%25253a%25252f%25252fuonetplus.eszkola.opolskie.pl%25252fopole%25252fLoginEndpoint.aspx%2526wctx%253dhttps%25253a%25252f%25252fuonetplus.eszkola.opolskie.pl%25252fopole%25252fLoginEndpoint.aspx&wct=2020-04-09T12%3a36%3a42Z

https://adfs.eszkola.opolskie.pl/adfs/ls/?wa=wsignin1.0&wtrealm=http%3a%2f%2fcufs.eszkola.opolskie.pl%2fopole%2fAccount%2fLogOn&wctx=rm%3d0%26id%3deSzkola%26ru%3d%252fopole%252fFS%252fLS%253fwa%253dwsignin1.0%2526wtrealm%253dhttps%25253a%25252f%25252fuonetplus.eszkola.opolskie.pl%25252fopole%25252fLoginEndpoint.aspx%2526wctx%253dhttps%25253a%25252f%25252fuonetplus.eszkola.opolskie.pl%25252fopole%25252fLoginEndpoint.aspx&wct=2020-04-09T13%3a42%3a15Z
https://adfs.eszkola.opolskie.pl/adfs/ls/?wa=wsignin1.0&wtrealm=https%3a%2f%2fcufs.eszkola.opolskie.pl%2fopole%2fAccount%2fLogOn&wctx=rm%3d0%26id%3deSzkola%26ru%3d%252fopole%252fFS%252fLS%253fwa%253dwsignin1.0%2526wtrealm%253dhttps%25253a%25252f%25252fuonetplus.eszkola.opolskie.pl%25252fopole%25252fLoginEndpoint.aspx%2526wctx%253dhttps%25253a%25252f%25252fuonetplus.eszkola.opolskie.pl%25252fopole%25252fLoginEndpoint.aspx&wct=2020-04-09T12%3a36%3a42Z

http%3a%2f%2fcufs.eszkola.opolskie.plhttps





.connectionSpecs(listOf(ConnectionSpec.COMPATIBLE_TLS))
java -jar FSLogin.main.jar















"Platforma VULCAN wersja" też daje rezultaty





<DigestValue> w tym xml?
https://uonetplus.eszkola.opolskie.pl/opole/LoginEndpoint.aspx POSTem to będziesz zalogowana
< HTTP/1.1 302 Found
< Cache-Control: no-cache, no-store, must-revalidate
< Pragma: no-cache
< Content-Length: 342
< Content-Type: text/html; charset=utf-8
< Expires: -1
< Location: https://cufs.eszkola.opolskie.pl/opole/FS/LS?wa=wsignin1.0&wtrealm=https%3a%2f%2fuonetplus.eszkola.opolskie.pl%2fopole%2fLoginEndpoint.aspx&wctx=https%3a%2f%2fuonetplus.eszkola.opolskie.pl%2fopole%2fLoginEndpoint.aspx
< Server: Microsoft-IIS/7.5
< Set-Cookie: ARR_uonetplus.eszkola.opolskie.pl=[redacted];Path=/;Domain=uonetplus.eszkola.opolskie.pl
< Set-Cookie: UonetPlus_ASP.NET_SessionId=; domain=eszkola.opolskie.pl; expires=Wed, 08-Apr-2020 18:25:33 GMT; path=/
< Set-Cookie: EfebSsoAuthCookie=null; domain=.eszkola.opolskie.pl; expires=Fri, 31-Dec-1999 23:00:00 GMT; path=/; HttpOnly
< X-Frame-Options: SAMEORIGIN
< X-UA-Compatible: IE=edge
< X-Powered-By: ARR/2.5
< X-Powered-By: ASP.NET
< Date: Thu, 09 Apr 2020 18:25:33 GMT
<
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="https://cufs.eszkola.opolskie.pl/opole/FS/LS?wa=wsignin1.0&wtrealm=https%3a%2f%2fuonetplus.eszkola.opolskie.pl%2fopole%2fLoginEndpoint.aspx&wctx=https%3a%2f%2fuonetplus.eszkola.opolskie.pl%2fopole%2fLoginEndpoint.aspx">here</a>.</h2>
</body></html>
wa=wsignin1.0&wctx=https://uonetplus.eszkola.opolskie.pl/opole/LoginEndpoint.aspx&wresult=<tu idzie XML>

brzeg też byś się zalogowała


permissions już nie jest wymagane



EfebSsoAuthCookie do prawidłowej wartości i nie musisz tworzyć+przesyłać nowego certyfikatuEfebSsoAuthCookie=null (słownie null), ale robi to jedynie wtedy, kiedy zgadza się jednocześnie symbol oraz liczby szkoły

EfebSsoAuthCookie może być odświeżane w nieskończoność chyba, czyli teoretycznie masz sesję bez żadnego ponownego logowania (to właśnie robi /Home.mvc/RefreshSession)

[
Diary(
id=1,
studentId=39669,
studentName=Jan,
studentSecondName=Jan,
studentSurname=Kowalski,
isDiary=false,
diaryId=0,
kindergartenDiaryId=0,
level=0,
symbol=null,
name=null,
year=0,
semesters=null,
fullName=Jan Kowalski
)
]



























nazwamiasta2





[login]@eszkola.opolskie.pl i normalnie jest wszystko












LoginHelper.kt jest helpful
RegisterRepository.getLoginType()?














https://uoneplus.$host/$symbol/LoginEndpoint.aspx?







login

<trust:RequestedAttachedReference>
<o:SecurityTokenReference k:TokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" xmlns:k="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<o:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID">_eafb68ff-0aa5-439d-8ac4-7d9727617686</o:KeyIdentifier>
</o:SecurityTokenReference>
</trust:RequestedAttachedReference>
<trust:RequestedUnattachedReference>
<o:SecurityTokenReference k:TokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" xmlns:k="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<o:KeyIdentifier ValueType=&t;http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID">_eafb68ff-0aa5-439d-8ac4-7d9727617686 </o:KeyIdentifier>
</o:SecurityTokenReference>
</trust:RequestedUnattachedReference>&t; w drugim ValueType
























//Jesli sa bledy po stronie kontrolera to lepiej cokolwiek dobrego przypisac - mhojwa 
{
"IkonkaNazwa": null,
"Num": null,
"Zawartosc": [
{
"IkonkaNazwa": null,
"Num": null,
"Zawartosc": [
{
"IkonkaNazwa": null,
"Num": null,
"Zawartosc": [],
"Nazwa": "Szczęśliwy numer w dzienniku: 37",
"Url": null,
"Dane": null,
"Symbol": null,
"Nieaktywny": false
}
],
"Nazwa": "T",
"Url": null,
"Dane": null,
"Symbol": null,
"Nieaktywny": false
}
],
"Nazwa": "002547",
"Url": null,
"Dane": null,
"Symbol": null,
"Nieaktywny": false
},Zawartosc (linijka 4) może mieć więcej elementów?









"IdJednostkaSprawozdawcza": 3,
"JednostkaSprawozdawczaSkrot": "SP Wilkow",
"JednostkaSprawozdawczaNazwa": "Szkoła Podstawowa w Wilkowie",
"JednostkaSprawozdawczaSymbol": "025678",
"IdJednostka": 5,
"JednostkaNazwa": "Szkoła Podstawowa w Wilkowie",
"JednostkaSkrot": "SP Wilkow", "Unit": {
"Id": 3,
"Symbol": "025678",
"Short": "SP Wilkow",
"DisplayName": "Szkoła Podstawowa w Wilkowie"
},
"ConstituentUnit": {
"Id": 5,
"Short": "SP Wilkow",
"Name": "Szkoła Podstawowa w Wilkowie"
},



class CufsCertificate {
@Selector(value = "EndpointReference Address")
val targetUrl: String = ""
@Selector(value = "Lifetime Created")
val createdDate: String = ""
@Selector(value = "Lifetime Expires")
val expiryDate: String = ""
@Selector(value = "Attribute[AttributeName=UserInstance] AttributeValue")
val userInstances: List<String> = listOf()
}Unable to find @Selector on type 'class pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.login.CufsCertificate', or its fields. Is this type intended for parsing HTML? (edited)Jspoon.create().adapter(CufsCertificate::class.java)


"Unit": {
"Address": "ul.Tadeusza Kościuszki 39-41, 45-062 Opole",
"DisplayName": "Zespół Szkół Elektrycznych im.Tadeusza Kościuszki",
"Id": 3,
"Name": "Zespół Szkół Elektrycznych ",
"Patron": "Tadeusz Kościuszko",
"RestURL": "https://uonetplus-komunikacja.eszkola.opolskie.pl/opole/OpoleZSE/api",
"Short": "OpoleZSE",
"Symbol": "OpoleZSE"
},
"ConstituentUnit": {
"Address": "ul.Tadeusza Kościuszki 39-41, 45-062 Opole",
"Id": 3,
"Name": "Publiczne Technikum Nr 5 w Zespole Szkół Elektrycznych im. Tadeusza Kościuszki w Opolu",
"Patron": null,
"SchoolTopic": "bab6ff93-23b6-e411-9b68-005056b435d0",
"Short": "PT5"
}, (edited)



k:, to pewnie też muszę wywalić


@Selector(value = zamiast @Selector(?
import pl.droidsonroids.jspoon.annotation.Selector




6





pl.vulcan.uonetmobile) instalowaną z zewnętrznego źródła, która służyłaby do generowania certa i odbierania powiadomień



pl.vulcan.uonetmobile) instalowaną z zewnętrznego źródła, która służyłaby do generowania certa i odbierania powiadomień




















GitHub 

















GitHub 










NumberFormatException: For input string: "+5="























GitHub 




api.getZadaniaDomowe







GitHub 























sdk.getDyżurniKlasy() bo chyba tylko vulcan to ma








wrapper/pośrednik do którego daje się prośby o dane, a on wtedy rozmawia z danym modułem dziennika



Profile+LoginStore) do sdk























Adresaci.mvc/GetAddressee












The parameters dictionary contains a null entry for parameter 'date' of non-nullable type 'System.DateTime' for method 'System.Web.Mvc.JsonResult Get(System.DateTime, Int32, System.Nullable`1[System.Int32])' in 'Vulcan.Efeb.Uczen.Web.Controllers.Api.SprawdzianyZadania.HomeworkController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters
{
"data": {
"TableContent": "<table><thead><tr><th>Przedmiot</th><th>Uczeń</th><th>Średnia klasy</th></tr></thead><tbody></tbody></table>",
"Items": [
…

















"Adresaci":[{"Id":"-14241rNauczyciel","IdReceiver":"","Name":"Imię Nazwisko [IN] - Nauczyciel (ZS\u0141)","Role":6,"UnitId":96,"IdLogin":153548



GitHub 















































































GitHub 










sdk-scrapper/src/main/kotlin/io/github/wulkanowy/sdk/scrapper/grades/Grade.kt








GitHub
GitHub 


Fatal Exception: java.lang.IllegalStateException: Closing the body of Response{protocol=h2, code=302, message=, url=https://uonetplus.vulcan.net.pl/zamosc/} didn't close its backing stream. Bad interceptor?
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:190)
...
z tego co doszedłem to ten wyjątek nie jest już rzucany od wersji 3.14.0 okhttp (sdk używa 3.12.12 bo to ostatnia wspierająca androida starszego niż 5.0) gdzie ten interceptor został dość mocno przebudowany (nawet nie wiedziałem że okhttp ogarnia tyle eventów) https://github.com/square/okhttp/pull/4645/files#diff-0ffdcb4ee90266c1cd93beecebacbe3ef43bb5d25fdddc7081204a30d71d68acL135 (edited)


NowaWiadomosc.mvc/GetJednostkiUzytkownika?






schoolId (z URLa) od IdJednostkaSprawozdawcza?

id to jest takie userLoginId
SP<miejscowosc>









GetJednostkiIdLoginUnitId












Nowa wiadomość
















java.io.EOFException: End of input
at com.squareup.moshi.JsonUtf8Reader.nextNonWhitespace(JsonUtf8Reader.java:1144)








{
"incomming":{
"Id":0,
"Nieprzeczytane":0,
"Przeczytane":0,
"Nieprzeczytana":false,
"FolderWiadomosci":0,
"WiadomoscPowitalna":false,
"Data":null,
"Tresc":"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"Temat":"OgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenie",
"IdWiadomosci":0,
"HasZalaczniki":false,
"Zalaczniki":"",
"Adresaci":[
{
"Id":"44795",
"IdReceiver":"",
"Name":"Idziejczak Mateusz - ucze\u0144 10C (TK)",
"Role":1,
"UnitId":0,
"IdLogin":44795,
"PushWiadomosc":false,
"Hash":"p8+7F16aJ4rAV1+F9e9vB4m+9qHjQjsE+h5V44JQ=",
"Date":null,
"IsMarked":false
}
],
"WyslijJako":"Dyrektor Szkoły",
"WiadomoscAdresatLogin":"",
"IdWiadomoscAdresatLogin":null,
"RolaNadawcy":0,
"NieprzeczytanePrzeczytane":"0/0",
"NadawcaNazwa":"Brak nadawcy",
"IdNadawca":0,
"AdresaciNazwa":"Brak adresata"
}
} (edited)
{
"incomming": {
"Adresaci": [{
"Id": "1rPracownik",
"Name": "Karolina Kowalska [AN] - pracownik (Fake123456)",
"IdLogin": 1,
"UnitId": 6,
"Role": 2,
"Hash": "NTVhNTQwMDhhZDFiYTU4OWFhMjEwZDI2MjljMWRmNDE="
}],
"Id": 0,
"Nadawca": {},
"Temat": "ndndjfjjfjfhf",
"Tresc": "Rhhdhdhrhrhrhrhrhrhrbrbbrbrb"
}
}





{
"incomming":{
"Id":0,
"Nieprzeczytane":0,
"Przeczytane":0,
"Nieprzeczytana":false,
"FolderWiadomosci":0,
"WiadomoscPowitalna":false,
"Data":null,
"Tresc":"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"Temat":"OgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenieOgłoszenie",
"IdWiadomosci":0,
"HasZalaczniki":false,
"Zalaczniki":"",
"Adresaci":[
{
"Id":"44795",
"IdReceiver":"",
"Name":"Idziejczak Mateusz - ucze\u0144 10C (TK)",
"Role":1,
"UnitId":0,
"IdLogin":44795,
"PushWiadomosc":false,
"Hash":"p8+7F16aJ4rAV1+F9e9vB4m+9qHjQjsE+h5V44JQ=",
"Date":null,
"IsMarked":false
}
],
"WyslijJako":"Dyrektor Szkoły",
"WiadomoscAdresatLogin":"",
"IdWiadomoscAdresatLogin":null,
"RolaNadawcy":0,
"NieprzeczytanePrzeczytane":"0/0",
"NadawcaNazwa":"Brak nadawcy",
"IdNadawca":0,
"AdresaciNazwa":"Brak adresata"
}
} (edited)





























31fa6d26 (edited)
JsonDataException: Non-null value 'motherAndFatherNames' (JSON name 'ImieMatkiIOjca') was null at $.data.ImieMatkiIOjca


IllegalArgumentException: Required value was null. ApiResponse(success=true, data=null, feedback=null, errorMessage=null)


























{"Units":[{"Nazwa":"1234","Skrot":"123456","Symbol":"123456","Id":8}],"AuthInfos":[{"JednostkaSprawozdawczaId":8,"LoginId":44795,"LoginValue":"uczen@gmail.com","UczenIds":[41348],"OpiekunIds":[],"PracownikIds":[],"Roles":[7],"LinkedAccountUids":[]}]}
{"Units":[{"Nazwa":"5678","Skrot":"123456","Symbol":"123456","Id":3}],"AuthInfos":[{"JednostkaSprawozdawczaId":3,"LoginId":566,"LoginValue":"rodzic@wp.pl","UczenIds":[],"OpiekunIds":[1391,1478],"PracownikIds":[],"Roles":[6],"LinkedAccountUids":[]}]}
{"Units":[{"Nazwa":"0123","Skrot":"123456","Symbol":"123456","Id":2}],"AuthInfos":[{"JednostkaSprawozdawczaId":2,"LoginId":4907,"LoginValue":"rodzic@outlook.com","UczenIds":[],"OpiekunIds":[173],"PracownikIds":[],"Roles":[6],"LinkedAccountUids":[]}]}

idBiezacyUczen, ale nie może tego robić na koncie rodzica











permissions.split("|")
.getOrNull(0)
?.toJsonObject()
?.getJsonArray("AuthInfos")
?.asJsonObjectList()
?.flatMap { authInfo ->
authInfo.getJsonArray("UczenIds")
?.map { it.asInt }
?: listOf()
}
?.let {
data.app.cookieJar.set(
data.webHost ?: "vulcan.net.pl",
"idBiezacyUczen",
it.firstOrNull()?.toString()
)
}







AdfsRealm, jak mogę nazwać nowy?AdfsNewRealm, Adfs2016Realm...

portal więc może AdfsPortalRealm



















Treść zgłoszenia:
java.lang.IllegalArgumentException: Required value was null. ApiResponse(success=true, data=null, feedback=null, errorMessage=null)
at io.github.wulkanowy.sdk.scrapper.repository.StudentRepository.getGrades(StudentRepository.kt:141)
at io.github.wulkanowy.sdk.scrapper.repository.StudentRepository$getGrades$1.invokeSuspend(Unknown Source:12)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
success=true jednocześnie nie wysyłając innych danych?
Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: While preparing SELECT this_.Id as id1_294_0_, this_.NazwaIndeksu as nazwaindeksu2_294_0_, this_.InsertKom as insertkom3_294_0_, this_.DeleteKom as deletekom4_294_0_, this_.UniqueKom as uniquekom5_294_0_ FROM UP_KomunikatyIndeksow this_ an error occurred`
Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: Invalid object name 'dbo.UP_V_Planowanie_WycieczkaOddzial'.Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: Invalid object name 'dbo.UP_V_Planowanie_PlanLekcjiZeZmianami'.

SELECT this_.Id as id1_295_0_, this_.NazwaIndeksu as nazwaindeksu2_295_0_, this_.InsertKom as insertkom3_295_0_, this_.DeleteKom as deletekom4_295_0_, this_.UniqueKom as uniquekom5_295_0_ FROM UP_KomunikatyIndeksow this_ an error occurredObject reference not set to an instance of an object.

The timeout period elapsed prior to completion of the operation or the server is not responding.










io.github.wulkanowy.sdk.scrapper.exception.VulcanException: While preparing SELECT this_.Id as id1_295_0_, this_.NazwaIndeksu as nazwaindeksu2_295_0_, this_.InsertKom as insertkom3_295_0_, this_.DeleteKom as deletekom4_295_0_, this_.UniqueKom as uniquekom5_295_0_ FROM UP_KomunikatyIndeksow this_ an error occurred
Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: Invalid column name 'IdPowodNieobecnosci'.
Invalid column name 'IdSkutekNieobecnosci'.
Invalid column name 'IdFormaZastepstwa'.
Invalid column name 'IdFormaPlatnosci'.
Invalid column name 'IdTypPlatnosci'.
Invalid column name 'IdPowodNieobecnosciPracownikWspomagajacy'.
Invalid column name 'IdSkutekNieobecnosciPracownikWspomagajacy'.
Invalid column name 'IdFormaZastepstwaPracownikWspomagajacy'.
Invalid column name 'IdFormaPlatnosciPracownikWspomagajacy'.
Invalid column name 'IdTypPlatnosciPracownikWspomagajacy'.
Invalid column name 'IdPowodNieobecnosciPracownikWspomagajacy2'.
Invalid column name 'IdSkutekNieobecnosciPracownikWspomagajacy2'.
Invalid column name 'IdFormaZastepstwaPracownikWspomagajacy2'.
Invalid column name 'IdFormaPlatnosciPracownikWspomagajacy2'.
Invalid column name 'IdTypPlatnosciPracownikWspomagajacy2'.
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorHandlerTransformerKt.handleErrors(ErrorHandlerTransformer.kt:20)

IdFormaPlatnosciPracownikWspomagajacy2 (edited)



Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorHandlerTransformerKt.handleErrors(ErrorHandlerTransformer.kt:20)Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: Object reference not set to an instance of an object.
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorHandlerTransformerKt.handleErrors(ErrorHandlerTransformer.kt:20)

Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: Object reference not set to an instance of an object.
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorHandlerTransformerKt.handleErrors(ErrorHandlerTransformer.kt:20) 


"Nadawca":{
"rola":1,
"jednostkaSprId":8
}
























{
"incomming":{
"Tresc":"ngf",
"Temat":"ngf",
"Adresaci":[
{
"Id":"44795",
"IdReceiver":"",
"Name":"Idziejczak Mateusz - ucze\u0144 32C (TK)",
"Role":1,
"UnitId":0,
"IdLogin":44795,
"PushWiadomosc":false,
"Hash":"p8+7F144JQ=",
"Date":null,
"IsMarked":false
}
]
}
}

{
"incomming":{
"Tresc":"ngf",
"Temat":"ngf",
"Adresaci":[
{
"Id":"44795",
"Name":"Idziejczak Mateusz - ucze\u0144 3C (TK)",
"IdLogin":44795,
"Hash":"p8+7F16aJ4reOAV1+F9e9vB4m+9qHjgQjsE+h5V44JQ="
}
]
}
}



{
"success": false,
"feedback": {
"FType": "Information",
"Message": "Nie można wysłać wiadomości ponieważ na liście adresatów znajdują się odbiorcy nieaktywni w jednostkach sprawozdawczych."
}
}


















System.IndexOutOfRangeException
at Vulcan.Mobile.Services.Tokens.Token..ctor(String token)
at Vulcan.Mobile.Services.Tokens.HebeLiteAuthToken..ctor(String token)
at Vulcan.Efeb.Komunikacja.Web.ApplicationStart.<ExternalResourcesInitialize>b__2_0(Object[] arr)
at Vulcan.Mobile.Integration.Framework.Handlers.MobileLogFactory.Invoke(String processor, Object[] parameters)
at Vulcan.Mobile.Integration.Annotations.UnifiedExceptionsAttribute.OnException(HttpActionExecutedContext actionExecutedContext)
at System.Web.Http.Filters.ExceptionFilterAttribute.OnExceptionAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ExceptionFilterAttribute.<ExecuteExceptionFilterAsyncCore>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext() (edited)





Non-fatal Exception: java.lang.NumberFormatException: For input string: "0++++"
at java.lang.Integer.parseInt(Integer.java:615)
at java.lang.Integer.parseInt(Integer.java:650)
at io.github.wulkanowy.sdk.scrapper.grades.GradeCustomConvertersKt.getGradeValueWithModifier(GradeCustomConvertersKt.java:22)
at io.github.wulkanowy.sdk.scrapper.grades.GradesMapperKt.mapGradesList(GradesMapperKt.java:13)
at io.github.wulkanowy.sdk.scrapper.repository.StudentRepository.getGrades(StudentRepository.java:144)
at io.github.wulkanowy.sdk.scrapper.repository.StudentRepository$getGrades$1.invokeSuspend(StudentRepository.java:12)

















Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: Dostęp zabroniony - nie odnaleziono aktywnej jednostki sprawozdawczej dla podanego symbolu klienta - 011xxx
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorHandlerTransformerKt.handleErrors(ErrorHandlerTransformer.kt:20)
at io.github.wulkanowy.sdk.scrapper.repository.StudentRepository.getGrades(StudentRepository.kt:141)
Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: While preparing SELECT this_.Id as id1_295_0_, this_.NazwaIndeksu as nazwaindeksu2_295_0_, this_.InsertKom as insertkom3_295_0_, this_.DeleteKom as deletekom4_295_0_, this_.UniqueKom as uniquekom5_295_0_ FROM UP_KomunikatyIndeksow this_ an error occurred
Wersja aplikacji: 1.1.4-play
Treść zgłoszenia:
com.squareup.moshi.JsonDataException: com.squareup.moshi.JsonDataException: Expected a string but was NULL at path $.data.Oceny[0].OcenyCzastkowe[0].DataOceny at $.data.Oceny[0].OcenyCzastkowe[0].DataOceny
zmienił?






















sdk, więc i tak by nawet contributora nie dali 







vim Konfiguracja.md (edited)

















































































Płynie w nas ta młoda krew 


























GitHub 





The transaction log for database 'tempdb' is full due to 'ACTIVE_TRANSACTION'.
The data for table-valued parameter "@idsLogin" doesn't conform to the table type of the parameter.
The statement has been terminated.
Nie można wysłać wiadomości do wybranego adresata ponieważ nie ma on aktywnego konta. W razie potrzeby prosimy o skontaktowanie się z innym pracownikiem szkoły.
Could not find stored procedure 'dbo.UP_PRC_V_Planowanie_PlanLekcjiZmiana'.



















io.github.wulkanowy.sdk.scrapper.exception.VulcanException: While preparing SELECT this_.Id as id1_311_0_, this_.NazwaIndeksu as nazwaindeksu2_311_0_, this_.InsertKom as insertkom3_311_0_, this_.DeleteKom as deletekom4_311_0_, this_.UniqueKom as uniquekom5_311_0_ FROM UP_KomunikatyIndeksow this_ an error occurred


kom3_3110
<div><span class='x-treelabel-ppl x-treelabel-inv'>testowanie i dokumentowanie projektu informatycznego</span> <span class='x-treelabel-ppl x-treelabel-inv'>A220</span><span class='x-treelabel-ppl x-treelabel-inv'> szerokopasmowa vacat</span>(nieobecność nauczyciela: uczniowie przychodzą później)</div>
<div><span class='x-treelabel-ppl x-treelabel-zas'>testowanie i dokumentowanie projektu informatycznego</span> <span class='x-treelabel-ppl x-treelabel-zas'>A220</span><span class='x-treelabel-ppl x-treelabel-zas'> szerokopasmowa vacat</span>(zastępstwo: Eggert Jolanta)</div>
<div><span class=''>testowanie i dokumentowanie projektu informatycznego</span> <span class=''>A220</span><span class=''> Jarosław Sikorski</span>(zastępstwo: Sikorski Jarosław)</div><div><span class='x-treelabel-ppl x-treelabel-inv'>Religia [rel]</span><span class='x-treelabel-ppl x-treelabel-inv'> </span><span class='x-treelabel-ppl x-treelabel-inv'> A3</span><span class='x-treelabel-ppl x-treelabel-inv'> Grzegorz Daroszewski</span>(nieobecność nauczyciela: uczniowie zwolnieni do domu)</div>

<div><span class='x-treelabel-ppl x-treelabel-inv'>testowanie i dokumentowanie projektu informatycznego</span> <span class='x-treelabel-ppl x-treelabel-inv'>A220</span><span class='x-treelabel-ppl x-treelabel-inv'> szerokopasmowa vacat</span>(nieobecność nauczyciela: uczniowie przychodzą później)</div>
<div><span class='x-treelabel-ppl x-treelabel-zas'>testowanie i dokumentowanie projektu informatycznego</span> <span class='x-treelabel-ppl x-treelabel-zas'>A220</span><span class='x-treelabel-ppl x-treelabel-zas'> szerokopasmowa vacat</span>(zastępstwo: Eggert Jolanta)</div>
<div><span class=''>testowanie i dokumentowanie projektu informatycznego</span> <span class=''>A220</span><span class=''> Jarosław Sikorski</span>(zastępstwo: Sikorski Jarosław)</div> 







<div><span class='x-treelabel-ppl x-treelabel-inv'>testowanie i dokumentowanie projektu informatycznego</span> <span class='x-treelabel-ppl x-treelabel-inv'>A220</span><span class='x-treelabel-ppl x-treelabel-inv'> szerokopasmowa vacat</span>(nieobecność nauczyciela: uczniowie przychodzą później)</div>
<div><span class='x-treelabel-ppl x-treelabel-zas'>testowanie i dokumentowanie projektu informatycznego</span> <span class='x-treelabel-ppl x-treelabel-zas'>A220</span><span class='x-treelabel-ppl x-treelabel-zas'> szerokopasmowa vacat</span>(zastępstwo: Eggert Jolanta)</div>
<div><span class=''>testowanie i dokumentowanie projektu informatycznego</span> <span class=''>A220</span><span class=''> Jarosław Sikorski</span>(zastępstwo: Sikorski Jarosław)</div> <div>
<span class='x-treelabel-ppl x-treelabel-inv'>testowanie i dokumentowanie projektu informatycznego</span>
<span class='x-treelabel-ppl x-treelabel-inv'>A220</span>
<span class='x-treelabel-ppl x-treelabel-inv'>szerokopasmowa vacat</span>
(nieobecność nauczyciela: uczniowie przychodzą później)
</div>
<div>
<span class='x-treelabel-ppl x-treelabel-zas'>testowanie i dokumentowanie projektu informatycznego</span>
<span class='x-treelabel-ppl x-treelabel-zas'>A220</span>
<span class='x-treelabel-ppl x-treelabel-zas'>szerokopasmowa vacat</span>
(zastępstwo: Eggert Jolanta)
</div>
<div>
<span class=''>testowanie i dokumentowanie projektu informatycznego</span>
<span class=''>A220</span>
<span class=''>Jarosław Sikorski</span>
(zastępstwo: Sikorski Jarosław)
</div> (edited)

<div><span class='x-treelabel-ppl x-treelabel-inv'>Religia [rel]</span><span class='x-treelabel-ppl x-treelabel-inv'> </span><span class='x-treelabel-ppl x-treelabel-inv'> A3</span><span class='x-treelabel-ppl x-treelabel-inv'> Grzegorz Daroszewski</span>(nieobecność nauczyciela: uczniowie zwolnieni do domu)</div> <div>
<span class='x-treelabel-ppl x-treelabel-inv'>Religia [rel]</span>
<span class='x-treelabel-ppl x-treelabel-inv'></span>
<span class='x-treelabel-ppl x-treelabel-inv'>A3</span>
<span class='x-treelabel-ppl x-treelabel-inv'>Grzegorz Daroszewski</span>
(nieobecność nauczyciela: uczniowie zwolnieni do domu)
</div> (edited)



to tam się pokazuje
<div>
<span class='x-treelabel-ppl'>praktyka zawodowa</span>
<span class='x-treelabel-ppl'></span>
<span class='x-treelabel-ppl'></span>
</div>"was nie interesuje

<div>
<span class='x-treelabel-ppl x-treelabel-zas'>Zajęcia z wychowawcą [niemiecki]</span>
<span class='x-treelabel-ppl x-treelabel-zas'> </span>
<span class='x-treelabel-ppl x-treelabel-zas'> 25</span>
<span class='x-treelabel-ppl x-treelabel-zas'> Lucyna Mastalerz</span>
(zastępstwo: Nasiłowska Dagmara)
</div>
<div>
<span class=''>Lekcja biblioteczna: Historia pisma. [niemiecki]</span>
<span class=''> </span>
<span class=''> </span>
<span class=''> Dagmara Nasiłowska</span>
</div> (edited)
























)( i wyciągać usuwać z tego te itemy które mają "poprzednio", a resztę łączyć i dawać do info



GitHub 







GitHub 

































GitHub 






GitHub 

Non-fatal Exception: java.net.ProtocolException: unexpected end of stream
at okhttp3.internal.http1.Http1ExchangeCodec$FixedLengthSource.read(Http1ExchangeCodec.java:371)
at okhttp3.internal.connection.Exchange$ResponseBodySource.read(Exchange.java:276)
at okio.internal.RealBufferedSourceKt.commonRead(RealBufferedSourceKt.java:39)
at okio.RealBufferedSource.read(RealBufferedSource.java:189)
at okio.RealBufferedSource.read(RealBufferedSource.java:189)
at okio.internal.RealBufferedSourceKt.commonExhausted(RealBufferedSourceKt.java:49)
...

na appstore










WidocznyPrzedmiot w Oceny.mvc? wszędzie jest false (edited)





















Fake123456 a on nie jest wyświetlany











organizationName to ja w mojej szkole mam tam TYLKO skrót







NowaWiadomosc.mvc/GetJednostkiUzytkownika ? Patrze do chuckera a tam zwykły GET bez żadnych parametrów ani headerów, a gdy sam taki robie to zwraca mi jakiś błąd


OcenyOpisowe ?

diary.semesters!![0].unitId








coś.map { it to innecoś }
albo
coś.apply { logger.debug("$this") } (edited)
map to znaczy że nigdy w js nie programowałeś ani w innym języku w którym się da pisać funkcyjnie



Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorHandlerTransformerKt.handleErrors(ErrorHandlerTransformer.kt:20)
Default ? Nie lepiej go pominąć i zaoszczędzić ten 1 request?







Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: Wymagana obsługa języka JavaScript Obsługa języka JavaScript jest wymagana. Ta przeglądarka sieci Web nie obsługuje języka JavaScript lub obsługa języka JavaScript nie została w niej włączona. Aby dowiedzieć się, czy przeglądarka sieci Web obsługuje język JavaScript, lub włączyć obsługę języka JavaScript, zapoznaj się z pomocą przeglądarki sieci Web. Wystąpił błąd Wystąpił błąd. Skontaktuj się z administratorem w celu uzyskania dodatkowych informacji. Szczegóły błędu Activity ID: 9b630287-a912-49a3-dde0-008001040zzz Relying party: CUFS Error time: Fri, 17 Dec 2021 14:11:07 GMT © 2016 Microsoft (edited)








// TODO: refactor
enum class LoginType {
AUTO,
STANDARD,
ADFS,
ADFSCards,
ADFSLight,
ADFSLightScoped,
ADFSLightCufs
}
Wytłumaczy mi ktoś tak po krótce czym sie te wszystkie adfs'y różnią?







































getLoginType ?




isDziennik jest ustawiona na false



@POST
@FormUrlEncoded
suspend fun sendADFSForm(@Url url: String, @FieldMap values: Map<String, String>): String
@POST
@FormUrlEncoded
suspend fun sendADFSMSForm(@Url url: String, @FieldMap values: Map<String, String>): String
One sie czymś różnią czy to są jakieś pozostałości gotowe na refactor?











GitHub 


|| ?




While preparing SELECT this_.Id as id1_118_3_, this_.Skrot as skrot4_118_3_, this_.Regon as regon10_118_3_, this_.Aktywna as aktywna11_118_3_, this_.Symbol as symbol5_118_3_, this_.SymbolInteg as symbolinteg9_118_3_, this_.GlobalKey as globalkey12_118_3_, this_.Nazwa as nazwa3_118_3_, this_.SyncO365 as synco14_118_3_, this_.DataModyfikacji as datamodyfikacji8_118_3_, jednostkis2_.IdJednostkaSprawozdawcza as idjednostkasprawozdawcza12_117_5_, jednostkis2_.Id as id1_117_5_, jednostkis2_.Id as id1_117_0_, jednostkis2_.GlobalKey as globalkey14_117_0_, jednostkis2_.DataUtworzenia as datautworzenia39_117_0_, jednostkis2_.ArkuszNazwa as arkusznazwa15_117_0_, jednostkis2_.GodzinaOd as godzinaod16_117_0_, jednostkis2_.GodzinaDo as godzinado17_117_0_, jednostkis2_.IdS1Typ as ids7_117_0_, jednostkis2_.IdS7KategoriaUczniow as ids20_117_0_, jednostkis2_.Aktywna as aktywna9_117_0_, jednostkis2_.Nazwa as nazwa4_117_0_, jednostkis2_.Skrot as skrot8_117_0_, jednostkis2_.Patron as patron13_117_0_, jednostkis2_.Regon as regon25_117_0_, jednostkis2_.Obwod as obwod10_117_0_, jednostkis2_.Notatka as notatka26_117_0_, jednostkis2_.NrEwidencyjny as nrewidencyjny27_117_0_, jednostkis2_.OrganProwadzacy as organprowadzacy28_117_0_, jednostkis2_.Uprawnienia as uprawnienia29_117_0_, jednostkis2_.NrDecyzji as nrdecyzji30_117_0_, jednostkis2_.DataUprawnien as datauprawnien31_117_0_, jednostkis2_.NazwaDopelniacz as nazwadopelniacz32_117_0_, jednostkis2_.NazwaBiernik as nazwabiernik33_117_0_, jednostkis2_.Numer as numer5_117_0_, jednostkis2_.Imienia as imienia6_117_0_, jednostkis2_.NazwaMiejscownik as nazwamiejscownik34_117_0_, jednostkis2_.JednostkaSamorzaduTerytorialnego as jednostkasamorzaduterytorialnego35_117_0_, jednostkis2_.Identyfikator as identyfikator36_117_0_, jednostkis2_.RodzajSzkoly as rodzajszkoly37_117_0_, jednostkis2_.NumerRSPO as numerrspo38_117_0_, jednostkis2_.PrzedrostekNazwySzkolyArtystycznej as przedrosteknazwyszkolyartystycznej40_117_0_, jednostkis2_.Rozdzial as rozdzial41_117_0_, jednostkis2_.NazwaAdresElegitymacja as na<truncated: 2387 chars>
The custom error module does not recognize this error. ?


doc.select("h2.error").let {
if (it.isNotEmpty()) throw AccountPermissionException(it.text())
}


ZebranieOnline w Zebrania.mvc gdy nie jest nullem ? (edited)
Any?



ZebranieOnline w Zebrania.mvc gdy nie jest nullem ? (edited)
DataSpotkania nie jest parsowana? @Transient
val date: LocalDateTime = LocalDateTime.now()
wyciąga date z tytułu?

DataSpotkania nie jest?DataSpotkania

ZebranieOnline ma wartość inną niż null























wresult jako parametr (edited)
<saml:AttributeValue>STAJELN56</saml:AttributeValue></saml:Attribute>
<saml:AttributeValue>STAJELN56@edu.gdansk.pl</saml:AttributeValue></saml:Attribute>
<saml:AttributeValue>STAJELN56@edu.gdansk.pl</saml:AttributeValue></saml:Attribute>

https://uonetplus.edu.gdansk.pl/gdansk/LoginEndpoint.aspx są tylko 2 wartości






LoginValue w permissions?



"LoginValue":"s.jelnicki@gmail.com" (edited)


















GitHub 


/Start.mvc/Index zamiast /LoginEndpoint.aspx, pomijając przez to 2 redirecty?

vulcan.net.pl
kto wie, może gdzie indziej nie zadziała (choć nie widze powodu dlaczego niemiałoby)

/Start.mvc/Index zamiast /LoginEndpoint.aspx, pomijając przez to 2 redirecty? VulcanException: Wystąpił nieoczekiwany błąd. Wystąpił błąd aplikacji. Prosimy zalogować się ponownie. Jeśli problem będzie się powtarzał, prosimy o kontakt z serwisem.
/symbol też działa, choć omija tylko 1 redirect
wctx jest niepotrzebny w etapie CUFS /FS/LS (edited)wtrealmhttps://cufs.vulcan.net.pl/a/FS/LS?wa=wsignin1.0&wtrealm=https://uonetplus.vulcan.net.pl/symbol/
taki url też działa (edited)

wtrealm powinno byc urlencoded

https://cufs.vulcan.net.pl/katowice/FS/LS?wa=wsignin1.0&wtrealm=https%3a%2f%2fuonetplus.vulcan.net.pl%2fkatowice%2fLoginEndpoint.aspx&wctx=https%3a%2f%2fuonetplus.vulcan.net.pl%2fkatowice%2fLoginEndpoint.aspx
no tamten troszke krótszy (edited)/FS/LS nie podamy wctx, to w hidden form też go nie będziewa i wresult

https://cufs.edu.gdansk.pl/a/Account/LogOn?ReturnUrl=%2Fa%2FFS%2FLS%3Fwa%3Dwsignin1.0%26wtrealm%3Dhttps%253A%252F%252Fuonetplus.edu.gdansk.pl%252Fgdansk






/?&/ nawet nie musi


= musi być





<div>
<span class='x-treelabel-ppl x-treelabel-zas'>Podstawy przedsiębiorczości</span>
<span class='x-treelabel-ppl x-treelabel-zas'>57</span>
<span class='x-treelabel-ppl x-treelabel-zas'> Ktoś</span>
(zastępstwo: Ktoś Inny)
</div>
<div>
<span class=''>Historia</span>
<span class=''>50</span>
<span class=''> Ktoś Inny</span>
(przeniesiona z lekcji 8, 21.09.2021)
</div>
Wulkanowy wyświetla to tak jakby ignorował dolnego diva - tylko pokazuje zmienionego nauczyciela
Wydaje mi się, że pisałem o tym kiedyś (edited)





<div>
<span class='x-treelabel-ppl x-treelabel-zas'>Podstawy przedsiębiorczości</span>
<span class='x-treelabel-ppl x-treelabel-zas'>57</span>
<span class='x-treelabel-ppl x-treelabel-zas'> Ktoś</span>
(zastępstwo: Ktoś Inny)
</div>
<div>
<span class=''>Historia</span>
<span class=''>50</span>
<span class=''> Ktoś Inny</span>
(przeniesiona z lekcji 8, 21.09.2021)
</div>
Wulkanowy wyświetla to tak jakby ignorował dolnego diva - tylko pokazuje zmienionego nauczyciela
Wydaje mi się, że pisałem o tym kiedyś (edited)<div>
<span class='x-treelabel-ppl x-treelabel-zas'>Język polski</span>
<span class='x-treelabel-ppl x-treelabel-zas'>60</span>
<span class='x-treelabel-ppl x-treelabel-zas'> MKP</span>(zastępstwo: MJ)
</div>
<div>
<span class=''>Język angielski</span>
<span class=''></span>
<span class=''> JM</span>
</div>



<div>
<span class='x-treelabel-ppl x-treelabel-zas'>Podstawy przedsiębiorczości</span>
<span class='x-treelabel-ppl x-treelabel-zas'>57</span>
<span class='x-treelabel-ppl x-treelabel-zas'> Ktoś</span>
(zastępstwo: Ktoś Inny)
</div>
<div>
<span class=''>Historia</span>
<span class=''>50</span>
<span class=''> Ktoś Inny</span>
(przeniesiona z lekcji 8, 21.09.2021)
</div>
Wulkanowy wyświetla to tak jakby ignorował dolnego diva - tylko pokazuje zmienionego nauczyciela
Wydaje mi się, że pisałem o tym kiedyś (edited)

<div>
<span class="x-treelabel-ppl x-treelabel-zas">Religia [Religia]</span>
<span class="x-treelabel-ppl x-treelabel-zas"></span>
<span class="x-treelabel-ppl x-treelabel-zas"> 47</span>
<span class="x-treelabel-ppl x-treelabel-zas"> TK</span>
(zastępstwo: PG)
</div>
<div>
<span class="">Zajęcia biblioteczne [Religia]</span>
<span class=""></span>
<span class=""></span>
<span class=""> GP</span>
</div>







<div>
<span class="x-treelabel-ppl x-treelabel-inv">Podstawy przedsiębiorczości</span>
<span class="x-treelabel-ppl x-treelabel-inv">57</span>
<span class="x-treelabel-ppl x-treelabel-inv"> ES</span>
(przeniesiona na lekcję 8, 14.12.2021)
</div>
<div>
<span class="">Historia</span>
<span class="">50</span>
<span class=""> GP</span>
(przeniesiona z lekcji 8, 14.12.2021)
</div>




<div>
<span class=\"\">Język angielski</span>
<span class=\"\">206</span>
<span class=\"\">Aleksandra Krajewska</span>
<span class=\"x-treelabel-rlz\">(zastępstwo: Jan Bytnar, sala 206)</span>
</div>
co to za dziwny format?

const val CLASS_REALIZED = "x-treelabel-rlz"

<div>
<span class=\"x-treelabel-inv\">Wychowanie fizyczne</span>
<span class=\"x-treelabel-inv\">S4</span>
<span class=\"x-treelabel-inv\">Aleksandra Wójtowicz</span>
<span class=\"x-treelabel-ppl x-treelabel-zas\">Wychowanie fizyczne</span>
<span class=\"x-treelabel-ppl x-treelabel-zas\">S4</span>
<span class=\"x-treelabel-ppl x-treelabel-zas\">Mateusz Kowal</span>
<span class=\"x-treelabel-rlz\">(zastępstwo: Anon Gałecki, sala S4)</span>
</div>
nawet nie wiem jak to rozumieć; tu są jakby 2 zmiany nauczycieli czy jak?


Nazwisko Imie na Imie Nazwisko no i mamy bug

(zastępstwo: Nowak - Kowalska Ewa)
sdk przy parsowaniu odwraca na
Ewa Kowalska - Nowak




wtrealm można podać https://cufs.vulcan.net.pl i też dostaniemy cert

GitHub 



<div>
<span class='x-treelabel-ppl x-treelabel-zas'>Eksploatacja urządzeń techniki komputerowej [t.infor.]</span>
<span class='x-treelabel-ppl x-treelabel-zas'></span>
<span class='x-treelabel-ppl x-treelabel-zas'>216</span>
<span class='x-treelabel-ppl x-treelabel-zas'></span>
<span class='x-treelabel-rlz'>(przeniesiona z lekcji 6, 06.12.2019)</span>
</div>
<div>
<span class='x-treelabel-ppl x-treelabel-inv'>Wiedza o kulturze [t.infor.]</span>
<span class='x-treelabel-ppl x-treelabel-inv'></span>
<span class='x-treelabel-ppl x-treelabel-inv'>010</span>
<span class='x-treelabel-ppl x-treelabel-inv'>[nauczyciel od WOK]</span>
<span class='x-treelabel-rlz'>(okienko dla uczniów)</span>
</div>
<div>
<span class='x-treelabel-ppl x-treelabel-inv'>Wiedza o kulturze</span>
<span class='x-treelabel-ppl x-treelabel-inv'>010</span>
<span class='x-treelabel-ppl x-treelabel-inv'></span>
<span class='x-treelabel-rlz'>(Podział na grupy)</span>
</div>
Status w Homework.mvc ?

Wykonane w wulkanowym

WYKONANE i ZAMKNIJ


<div>
<span class='x-treelabel-ppl x-treelabel-zas'>język angielski zawodowy [A 2]</span>
<span class='x-treelabel-ppl x-treelabel-zas'></span>
<span class='x-treelabel-ppl x-treelabel-zas'>36</span>
<span class='x-treelabel-ppl x-treelabel-zas'>M P - O</span>
(przeniesiona z lekcji 7, 22.09.2021)
</div>
<div>
<span class='x-treelabel-ppl x-treelabel-zas'>Geografia [A 2]</span>
<span class='x-treelabel-ppl x-treelabel-zas'></span>
<span class='x-treelabel-ppl x-treelabel-zas'>WS 18</span>
<span class='x-treelabel-ppl x-treelabel-zas'>A K</span>
(zastępstwo: P - O M)
</div>
Którą lekcje wasze SDK wybierze jako tą nową? (edited)



<div>
<span class='x-treelabel-ppl x-treelabel-zas'>język angielski zawodowy [A 2]</span>
<span class='x-treelabel-ppl x-treelabel-zas'></span>
<span class='x-treelabel-ppl x-treelabel-zas'>36</span>
<span class='x-treelabel-ppl x-treelabel-zas'>M P - O</span>
(przeniesiona z lekcji 7, 22.09.2021)
</div>
<div>
<span class='x-treelabel-ppl x-treelabel-zas'>Geografia [A 2]</span>
<span class='x-treelabel-ppl x-treelabel-zas'></span>
<span class='x-treelabel-ppl x-treelabel-zas'>WS 18</span>
<span class='x-treelabel-ppl x-treelabel-zas'>A K</span>
(zastępstwo: P - O M)
</div>
Którą lekcje wasze SDK wybierze jako tą nową? (edited)(przeniesiona z lekcji by określić że ta lekcja to ta nowa
<div>
<span class="">Język polski</span>
<span class=""></span>
<span class=""></span>
</div>
<div>
<span class=" x-treelabel-inv">Religia</span>
<span class=" x-treelabel-inv">Nauczyciel</span>
<span class=" x-treelabel-inv">23</span>
<span class="x-treelabel-ppl x-treelabel-zas">Geografia</span>
<span class="x-treelabel-ppl x-treelabel-zas">ktoś inny</span>
<span class="x-treelabel-ppl x-treelabel-zas">23</span>
<span class="x-treelabel-rlz">(zastępstwo)</span>
</div>



[
<UonetplusTileResponse name='SZK1' content=[<UonetplusTileResponse name='T' content=[<UonetplusTileResponse name='Szczęśliwy numer w dzienniku: 37' content=[]>]>]>,
<UonetplusTileResponse name='SZK2' content=[<UonetplusTileResponse name='ZSP' content=[<UonetplusTileResponse name='Szczęśliwy numer w dzienniku: 12' content=[]>]>]>
] (edited)
if (numbers.size == 1) {
return@withContext numbers.single()
}
if (numbers.size > 1) {
return@withContext numbers.first()
}first() (edited)


[
<UonetplusTileResponse name='SZK1' content=[<UonetplusTileResponse name='T' content=[<UonetplusTileResponse name='Szczęśliwy numer w dzienniku: 37' content=[]>]>]>,
<UonetplusTileResponse name='SZK2' content=[<UonetplusTileResponse name='ZSP' content=[<UonetplusTileResponse name='Szczęśliwy numer w dzienniku: 12' content=[]>]>]>
] (edited)T albo ZSP ? albo czy pojawia sie to gdzieś jeszcze ?

SZK1 ?
suspend fun getKidsLuckyNumbers(): List<LuckyNumber> {
val res = api.getKidsLuckyNumbers(getToken()).handleErrors().data
return requireNotNull(res).flatMap { unit ->
unit.content.flatMap { school ->
school.content.map { number ->
LuckyNumber(
unitName = unit.name,
school = school.name,
number = number.name.substringAfterLast(": ").toInt()
)
}
}
}
} (edited)


data: [] jeśli sesja wygasła

curl -X POST -d "" https://uonetplus.vulcan.net.pl/katowice/Start.mvc/GetKidsLuckyNumbers (edited)






[
<UonetplusTileResponse name='SZK1' content=[<UonetplusTileResponse name='T' content=[<UonetplusTileResponse name='Szczęśliwy numer w dzienniku: 37' content=[]>]>]>,
<UonetplusTileResponse name='SZK2' content=[<UonetplusTileResponse name='ZSP' content=[<UonetplusTileResponse name='Szczęśliwy numer w dzienniku: 12' content=[]>]>]>
] (edited)GetStudentDirectorInformations nie mają rozróżniania z której szkoły są? (edited)






















powiatwulkanowysymbol np. powiatwulkanowy i chce zalogować się do api a tego symbolu tam nie ma

VParam?












The custom error module does not recognize this error




1. Wysyła request'a POST do /Deflaut/Account/LogOn
2. Wysyła request'a POST do /symbol/LoginEndpoint.aspx
3. Wysyła request'a GET do /symbol/Start.mvc/Index
4. Wysyła request'a GET do /symbol/NowaWiadomosc.mvc/GetJednostkiUzytkowania
5. Wysyła request'a GET do /symbol/Account/LogOn
6. Wysyła request'a GET do /symbol/school_id/Start
7. Wysyła request'a GET do /symbol/school_id/UczenCache.mvc/Get
8. Wysyła request'a POST do /symbol/school_id/UczenDziennik.mvc/Get
Moje api (przy poprawnym symbolu):
1. Wysyła request'a POST do /Deflaut/Account/LogOn
2. Wysyła request'a POST do /symbol/LoginEndpoint.aspx
3. Wysyła request'a GET do /symbol/school_id/Start
4. Wysyła request'a GET do /symbol/school_id/UczenCache.mvc/Get
5. Wysyła request'a POST do /symbol/school_id/UczenDziennik.mvc/Getuonetplus-uzytkownik.vulcan.net.pl/symbol/NowaWiadomosc.mvc/GetJednostkiUzytkowania? (edited)







cufs.host/symbol/LogOn?

cufs tylko chcę to nie jest to wymagane?

http://uonetplus.fakelog.cf
http://cufs.fakelog.cf/Deflaut/Account/LogOn?ReturnUrl=%2FDeflaut%2FFS%2FLS%3Fwa%3Dwsignin1.0%26wtrealm%3Dhttp%253A%252F%252Fuonetplus.fakelog.cf
http://uonetplus.fakelog.cf/Default/LoginEndpoint.aspx
http://uonetplus.fakelog.cf/powiatwulkanowy/LoginEndpoint.aspx
https://uonetplus-uczen.fakelog.cf/powiatwulkanowy/123456/Start
https://uonetplus-uczen.fakelog.cf/powiatwulkanowy/123457/Start
https://uonetplus-uczen.fakelog.cf/powiatwulkanowy/123458/Start
http://uonetplus.fakelog.cf/warszawa/LoginEndpoint.aspx
http://uonetplus.fakelog.cf/asdf/LoginEndpoint.aspx
http://uonetplus.fakelog.cf/asdfsdf/LoginEndpoint.aspx
http://uonetplus-uczen.fakelog.cf/powiatwulkanowy/123456/UczenDziennik.mvc/Get
http://uonetplus-uczen.fakelog.cf/powiatwulkanowy/123457/UczenDziennik.mvc/Get
http://uonetplus-uczen.fakelog.cf/powiatwulkanowy/123458/UczenDziennik.mvc/Get

UczenDziennik.mvc/Get gdzie wywala The custom error module does not recognize this error




























<ID rick rolla>:<zaszyfrowany token>
warszawa/001015/EgzaminySemestralne.mvc/Get)





"Laczna": "Brak oceny",
"Proponowana": "Brak oceny",
"Ustna": "Brak oceny",
"Pisemna": "Brak oceny"
}, {
"Pozycja": 18,
"Nazwa": "Edukacja dla bezpieczeństwa",
"Laczna": "Brak oceny",
"Proponowana": "Brak oceny",
"Ustna": "Brak oceny",
"Pisemna": "Brak oceny"
}],
"success": true
}

Oceny.mvc/Get zwraca mi {'data': None, 'success': True} a wszystkie dane wysłane w requeście są poprawne? (edited)















ObywatelstwoPolskie z tymi numerami?
ObywatelstowPolskie się różni od Polak





















GitHub 
${ssl}uonetplus-uzytkownik.${host}/Wiadomosc.mvc/GetInboxMessageDetails z poprawnymi headersami, cookiesami i payloadem, status code jest 200 ale nic nie ma w response, nawet {"data": [], "success": true}? (edited)



<!DOCTYPE html><html><head><title></title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><div class="wrapper"><h1>Unexpected token " in JSON at position 0</h1><h2></h2><pre></pre></div><footer class="footer"><ul class="footer__nav"><li><a href="undefined://undefined">Start</a></li><li><a href="undefined://api.undefined">api</a></li><li><a href="undefined://cufs.undefined">cufs</a></li><li><a href="undefined://uonetplus.undefined/powiatwulkanowy/Start.mvc/Index">uonetplus</a></li><li><a href="undefined://uonetplus-uczen.undefined">uonetplus-uczen</a></li><li><a href="undefined://uonetplus-opiekun.undefined/powiatwulkanowy/123456">uonetplus-opiekun</a></li><li><a href="undefined://uonetplus-uzytkownik.undefined">uonetplus-uzytkownik</a></li></ul></footer></body></html>{"messageId": 54428}


https://uonetplus-uzytkownik.vulcan.net.pl/symbol/UzytkownikCache.mvc/GetCache?_dc=dc?

{
"data":
{
"roleUzytkownika":[],
"opcjeWysylaniaPowiadomien": 0,
"opcjeMailingow":false,
"oneDriveClientId":"",
"isMessagesOneDriveAttachmentsOn":false,
"isMessagesGoogleDriveAttachmentsOn":false,
"googleDriveClientId":"",
"googleDriveApiKey":"",
"isO365PassOff":false,
"rolesText": [
{
"value":"Nazwisko Imię - rola poziomsymbol (skrót jednostki sprawozdawczej)",
"display":"Nazwisko Imię - rola poziomsymbol (skrót jednostki sprawozdawczej)",
"data":{
"rola":0,
"jednostkaSprId":0
}
}
],
"ribbonSettings":null,
"uprawnienia":null,
"userRoles":null,
"currentUser": {
"Id":0,
"Imie":"",
"Nazwisko":"",
"Kod":""
},
"wychowawcaOddzialy":null,
"serverDate":"2022-09-45 67:06:69",
"dbId":"",
"przedszkolaSIO":false,
"wychowankowieSIO":false,
"isPrzedszkola":false,
"isBursa":false,
"isBursaAash":false,
"jednostkaZKed":false,
"jednostkaZKu":false,
"modulNawigacja":{
"BiezacyLinki":[],
"ModulyLinki":{
"tu_skrot_jednoski_sprawozdawczej":[
{
"Nazwa":"Uczeń",
"Link":"ssl://uonetplus-uczen.host/symbol_name/school_id/LoginEndpoint.aspx",
"Modul":0
}
]
},
"PokazPodzialJednostki":false
},
"isNadzorPlusEnabled":false,
"Id":0
},
"success":true,
"errorMessage":null,
"feedback":null
}



https://uonetplus-uczen.vulcan.net.pl/warszawa/000001/PodrecznikiLataSzkolne.mvc/Get{
"data": [
{
"Nazwa": "2021/2022",
"Id": 2021
}
],
"success": true
}https://uonetplus-uczen.vulcan.net.pl/warszawa/000001/PodrecznikiUcznia.mvc/Get (edited)


https://uonetplus-uczen.vulcan.net.pl/warszawa/000001/PodrecznikiUcznia.mvc/Get (edited){
"data": {
"IsZatwierdzone": false,
"Podreczniki": []
},
"success": true
}



















{
"data": {
"EgazminyZewnetrzne": [
{
"NazwaOgolna": "",
"WynikOgolny": "",
}
],
"UczenHasKwalifikacje": false,
"SwiadectwaKwalifikacjiZawodowych": [
{
"Wydany": "",
"NrSwiadectwa": "",
"RodzajKwalifikacji": ""
},
]
},
"success": true
}





















app.js w uonetplus-uczen coś się znajdzie





isDostepOffice (edited)






IsArtystyczna: NIC
IsArtystyczna13: NIC
IsSpecjalna: NIC
IsPolicealna: NIC
Is13: NIC
isPayButtonOn: NIC?

IsArtystyczna: NIC
IsArtystyczna13: NIC
IsSpecjalna: NIC
IsPolicealna: NIC
Is13: NIC
isPayButtonOn: NIC? 










































{
"data": {
"IsZatwierdzone": false,
"Podreczniki": []
},
"success": true
} {
"data": {
"IsZatwierdzone": true,
"Podreczniki": [
{
"Opis": "",
"Tytul": "Longman Repetytorium maturalne. Podręcznik wieloletni do języka angielskiego - poziom rozszerzony",
"Autor": "Marta Umińska, Bob Hastings, Dominika Chandler, Rod Fricker, Beata Trapnell",
"Wydawnictwo": "Pearson Central Europe Sp. z o.o.",
"Przedmiot": "Język angielski",
"Aktywny": false,
"Id": 66
}
]
},
"success": true
}



{
"data": {
"IsZatwierdzone": true,
"Podreczniki": [
{
"Opis": "",
"Tytul": "Longman Repetytorium maturalne. Podręcznik wieloletni do języka angielskiego - poziom rozszerzony",
"Autor": "Marta Umińska, Bob Hastings, Dominika Chandler, Rod Fricker, Beata Trapnell",
"Wydawnictwo": "Pearson Central Europe Sp. z o.o.",
"Przedmiot": "Język angielski",
"Aktywny": false,
"Id": 66
}
]
},
"success": true
} 




<div>
<span class="x-treelabel-inv">Język angielski</span>
<span class="x-treelabel-inv">206</span>
<span class="x-treelabel-inv">Sara Wierzbicka</span>
<span class="x-treelabel-ppl x-treelabel-zas">Język angielski</span>
<span class="x-treelabel-ppl x-treelabel-zas">206</span>
<span class="x-treelabel-ppl x-treelabel-zas">Aleksandra Wójtowicz</span>
<span class="x-treelabel-rlz">(zastępstwo: Jan Bytnar, sala 206)</span>
</div>



? (edited)
x-treelabel-rlz pokazuje że jest Jan Bytnar














rlz bo tego już nie ma


















GitHub 


GitHub 











<div>
<span class=''>Język polski</span>
<span class=''>5</span>
<span class=''>Polonistka Joanna</span>
</div>
<div>
<span class='x-treelabel-ppl x-treelabel-inv'>Religia</span>
<span class='x-treelabel-ppl x-treelabel-inv'>3</span>
<span class='x-treelabel-ppl x-treelabel-inv'>Polonistka Joanna</span>
</div>
O co tu chodzi?
x-treelabel-rlz są już nie potrzebne?

- base URL (Gdańsk): https://uonetplus-wiadomosciplus.edu.gdansk.pl/gdansk/api/
Endpointy
GET OdebraneNowe
- Pobiera nowe odebrane wiadomości
GET WyslaneNowe
- Pobiera nowe wysłane wiadomości (nieużywane na stronie)
Request (Query String)
- idTopWiadomosc: int (0)
Response (JSON)
- nie wiem pusta lista
GET LiczbyNieodczytanych
- Pobiera liczbę nieodebranych wiadomości
Response (JSON)
- nie wiem pusta lista
GET OdebraneSkrzynka
- Pobiera odebrane wiadomości wybranego użytkownika
GET WyslaneSkrzynka
- Pobiera wysłane wiadomości wybranego użytkownika
GET UsunieteSkrzynka
- Pobiera usunięte wiadomości wybranego użytkownika
Request (Query String)
- globalKeySkrzynka: str ("a4408f53-e2e1-47b0-be8d-049160a3da11")
- idLastWiadomosc: int (0)
- pageSize: int (50)
Response (JSON)
- nie wiem pusta lista
GET DdsArchive
- Ekran "Pobieranie plików"
Response (JSON)
- nie wiem pusta lista
GET Odebrane
- Pobiera odebrane wiadomości
GET Wyslane
- Pobiera wysłane wiadomości
GET Usuniete
- Pobiera usunięte wiadomości
Request (Query String)
- idLastWiadomosc: int (0)
- pageSize: int (50)
Response (JSON)
- nie wiem pusta lista (edited)







GitHub 



















antiForgeryToken a go nie używają













The redirect URI 'https://uonetplus-wiadomosciplus.edu.gdansk.pl/OneDrive.mvc' specified in the request does not match the redirect URIs configured for the application




WyslaneWydruk


























odbiorcy vs. adresaci



WiadomoscOdbiorcy








[{"apiGlobalKey":"klucz","korespondenci":"Wielu adresatów (0)","temat":"test","data":"2022-08-12T15:01:48.967+02:00","skrzynka":"Jan Kowalski - U - (SP 1)","hasZalaczniki":false,"przeczytana":true,"nieprzeczytanePrzeczytanePrzez":null,"wazna":false,"uzytkownikRola":1,"id":11}]

[{"apiGlobalKey":"klucz","korespondenci":"Wielu adresatów (0)","temat":"test","data":"2022-08-12T15:01:48.967+02:00","skrzynka":"Jan Kowalski - U - (SP 1)","hasZalaczniki":false,"przeczytana":true,"nieprzeczytanePrzeczytanePrzez":null,"wazna":false,"uzytkownikRola":1,"id":11}] ??? (nieznany typ)






















NowaWiadomość jest jakiś response pokazany



2022-08-15T10:27:17.48+02:00
[{"apiGlobalKey":"e7a6708e-7bc4-4a6f-90fb-9312a6969a34","korespondenci":"Małgorzata Dostojewska - P - (000077)","temat":"Informacyjnie","data":"2022-08-15T10:27:17.48+02:00","skrzynka":"Mateusz Idziejczak - U - (000077)","hasZalaczniki":false,"przeczytana":true,"nieprzeczytanePrzeczytanePrzez":null,"wazna":false,"uzytkownikRola":2,"id":18}]
Request URL: https://uonetplus-wiadomosciplus.vulcan.net.pl/poznan/api/Odebrane?idLastWiadomosc=0&pageSize=50

{"data":"2022-08-15T10:27:17.48+02:00","apiGlobalKey":"e7a6708e-7bc4-4a6f-90fb-9312a6969a34","nadawca":"Małgorzata Dostojewska - P - (000077)","odbiorcy":["Mateusz Idziejczak - U - (000077)"],"temat":"Informacyjnie","tresc":"<p>Dzień dobry, Mateuszu,</p><p>wizualnie poczta wygląda rzeczywiście inaczej.</p><p><br></p><p>Miłego dnia</p><p>Małgorzata Dostojewska</p>","odczytana":true,"zalaczniki":[],"id":18}
Request URL: https://uonetplus-wiadomosciplus.vulcan.net.pl/poznan/api/WiadomoscSzczegoly?apiGlobalKey=e7a6708e-7bc4-4a6f-90fb-9312a6969a34
Mateusz Idziejczak - U - (000077)




Mateusz Idziejczak - U - (000077) P to pracownikN to będzie nauczyciel?






























Mateusz Idziejczak - U - (000077) Mateusz Idziejczak - U - (000077) Gdzie na końcu jest jakiś numer w nawiasach

Jan Kowalski - U - (SP 1)

{
"apiGlobalKey": "25fda2ea-0462-4bb8-b782-7528de02d211",
"korespondenci": "Karolina Kłosek - P - (000056)",
"temat": "Informacja o podręcznikach",
"data": "2022-08-12T16:27:17.48+02:00",
"skrzynka": "Mateusz Morawiec - U - (000054)",
"hasZalaczniki": false,
"przeczytana": true,
"nieprzeczytanePrzeczytanePrzez": null,
"wazna": true,
"uzytkownikRola": 2,
"id": 14
},"apiGlobalKey"

apiGlobalKeyapiGlobalKey były podczas wysyłania (edited)

Mateusz Idziejczak - U - (000077) Gdzie na końcu jest jakiś numer w nawiasach 

















{"stopka":"<p><div> <label for=\"search\">Szukaj</label> <input id=\"search\" type=\"text\" value=\"{{payload}}\" /> </div></p>","trybWysylaniaPowiadomien":3}

































"list": 1234567














{
"message": "The request is invalid.",
"messageDetail": "The parameters dictionary contains a null entry for parameter 'globalKeySkrzynka' of non-nullable type 'System.Guid' for method 'System.Collections.Generic.List`1[Vulcan.Efeb.Model.Vo.WiadomosciPlus.Adresaci.AdresatVo] Get(System.Guid)' in 'Vulcan.Efeb.WiadomosciPlus.Web.Controllers.Api.Adresaci.PracownicyController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."
}




















io.github.wulkanowy.sdk.scrapper.exception.VulcanException: SHUTDOWN is in progress.
Login failed for user 'RODOS\paEfebUczen'. Only administrators may connect at this time.
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorHandlerTransformerKt.handleErrors(ErrorHandlerTransformer.kt:20)

io.github.wulkanowy.sdk.scrapper.exception.VulcanException: SHUTDOWN is in progress.
Login failed for user 'RODOS\paEfebUczen'. Only administrators may connect at this time.
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorHandlerTransformerKt.handleErrors(ErrorHandlerTransformer.kt:20) 

Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanClientError: 401: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;}
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
<div class="content-container"><fieldset>
<h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>
<h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>
</fieldset></div>
</div>
</body>
</html>
at io.github.wulkanowy.sdk.scrapper.interceptor.HttpErrorInterceptor.intercept(HttpErrorInterceptor.kt:20)



















Wersja aplikacji: 1.7.5-play
Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanClientError: 403: {"message":"Na liście odbiorców znajdują się pracownicy nieaktywni lub spoza jednostki sprawozdawczej"}



Wersja aplikacji: 1.7.5-play
Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanClientError: 403: {"message":"Na liście odbiorców znajdują się pracownicy nieaktywni lub spoza jednostki sprawozdawczej"} 











cufs.uonetplus.vulcan.net.pl: nodename nor servname provided, or not known
vulcan.net.pl jest poprawnym bazowym (edited)




GitHub 





Ext.define('Vulcan.Efeb.Opiekun.model.VAttachmentModel')
Ext.define('Vulcan.Efeb.Opiekun.model.FeedbackModel')
Ext.define('Vulcan.Efeb.Opiekun.model.PoryLekcjiModel')
Ext.define('Vulcan.Efeb.Opiekun.model.UczenDziennikModel')
Ext.define('Vulcan.Efeb.Opiekun.model.VAttachmentHomeworksModel')
Ext.define('Vulcan.Efeb.Opiekun.model.common.RokSzkolnyModel')
Ext.define('Vulcan.Efeb.Opiekun.model.daneUcznia.DaneUczniaModel')
Ext.define('Vulcan.Efeb.Opiekun.model.dostepMobilny.TokenModel')
Ext.define('Vulcan.Efeb.Opiekun.model.dostepMobilny.ZarejestrowaneUrzadzeniaModel')
Ext.define('Vulcan.Efeb.Opiekun.model.egzaminySemestralne.EgzaminSemestralnyModel')
Ext.define('Vulcan.Efeb.Opiekun.model.ewidencjaObecnosci.EwidencjaObecnosciModel')
Ext.define('Vulcan.Efeb.Opiekun.model.ewidencjaObecnosci.ZgloszoneNieobecnosciModel')
Ext.define('Vulcan.Efeb.Opiekun.model.formularze.FormularzSzablonModel')
Ext.define('Vulcan.Efeb.Opiekun.model.formularze.FormularzWyslanyModel')
Ext.define('Vulcan.Efeb.Opiekun.model.frekwencja.FrekwencjaDniModel')
Ext.define('Vulcan.Efeb.Opiekun.model.frekwencja.FrekwencjaModel')
Ext.define('Vulcan.Efeb.Opiekun.model.frekwencja.FrekwencjaStatystykiTypuFrekwencjiModel')
Ext.define('Vulcan.Efeb.Opiekun.model.frekwencja.FrekwencjaStatystykiModel')
Ext.define('Vulcan.Efeb.Opiekun.model.frekwencja.FrekwencjaStatystykiPrzedmiotyModel')
Ext.define('Vulcan.Efeb.Opiekun.model.frekwencja.FrekwencjaUsprawiedliwieniaWyslaneModel')
Ext.define('Vulcan.Efeb.Opiekun.model.frekwencja.FrekwencjaWpisyModel')
Ext.define('Vulcan.Efeb.Opiekun.model.jadlospis.DietyModel')
Ext.define('Vulcan.Efeb.Opiekun.model.jadlospis.JadlospisModel')
Ext.define('Vulcan.Efeb.Opiekun.model.oceny.OcenyModel')
Ext.define('Vulcan.Efeb.Opiekun.model.ogloszenia.OgloszeniaModel')
Ext.define('Vulcan.Efeb.Opiekun.model.oplaty.OkresyUmowOplatModel')
Ext.define('Vulcan.Efeb.Opiekun.model.oplaty.OplatyModel')
Ext.define('Vulcan.Efeb.Opiekun.model.oplaty.PlatnosciNaliczoneModel')Ext.define('Vulcan.Efeb.Opiekun.model.planZajec.PrzedmiotyModel')
Ext.define('Vulcan.Efeb.Opiekun.model.podreczniki.PodrecznikUczniaModel')
Ext.define('Vulcan.Efeb.Opiekun.model.scalanieKont.ScaloneKontaModel')
Ext.define('Vulcan.Efeb.Opiekun.model.statystyki.StatystykiOcenyCzastkoweModel')
Ext.define('Vulcan.Efeb.Opiekun.model.statystyki.StatystykiOcenyRoczneModel')
Ext.define('Vulcan.Efeb.Opiekun.model.statystyki.StatystykiPunktyModel')
Ext.define('Vulcan.Efeb.Opiekun.model.szkolaINauczyciele.NauczycielUczenModel')
Ext.define('Vulcan.Efeb.Opiekun.model.szkolaINauczyciele.SzkolaUczenModel')




new AjaxRequest.FunkcjonalnoscStatystyka().Post(a)
new AjaxRequest.ZgloszoneNieobecnosci().Get()
new AjaxRequest.Autoryzacja().Post(b)
new AjaxRequest.FrekwencjaStatystyki().Get(a.get('Id'))
new AjaxRequest.Frekwencja().Get(b.get('value'), c)
new AjaxRequest.FrekwencjaStatystykiPrzedmioty().Get()
new AjaxRequest.EwidencjaObecnosci().Get(a.data.dzien.getMonth() + 1)
new AjaxRequest.Jadlospis().Get(d, b)
new AjaxRequest.Diety().Get()
new AjaxRequest.FormularzeSzablony().Get()
new AjaxRequest.FormularzeWysylanie().Get()
new AjaxRequest.ZarejestrowaneUrzadzenia().Delete(c.device.get('Id'))
new AjaxRequest.RejestracjaUrzadzeniaToken().Get()
new AjaxRequest.RejestracjaUrzadzeniaTokenCertyfikat()
new AjaxRequest.RejestracjaUrzadzeniaToken()
new AjaxRequest.ZarejestrowaneUrzadzenia().Get()
new AjaxRequest.Uczen().Get()
new AjaxRequest.UczenZdjecie().Get()
new AjaxRequest.DostepOffice().Get()
new AjaxRequest.EgzaminySemestralne().Get()
new AjaxRequest.EgzaminyZewnetrzne().Get()
new AjaxRequest.ZgloszoneNieobecnosci()
new AjaxRequest.Usprawiedliwienia().Post(e)
new AjaxRequest.LekcjeZaplanowane().GetPrzedmioty()
new AjaxRequest.LekcjeZaplanowane().GetZaplanowane(a.get('poczatek'), a.get('koniec'), b && b.data ? b.data.IdPrzedmiot : null)
new AjaxRequest.LekcjeZrealizowane().GetPrzedmioty()
new AjaxRequest.LekcjeZrealizowane().GetZrealizowane(a.get('poczatek'), a.get('koniec'), b && b.data ? b.data.IdPrzedmiot : null)
new AjaxRequest.Oceny().Get(a.get('selOkres').Id)
new AjaxRequest.Ogloszenia().Get()
new AjaxRequest.Oplaty().Get()
new AjaxRequest.Oplaty().Get()
new AjaxRequest.Platnosci().Get(a)
new AjaxRequest.Platnosci()
new AjaxRequest.PlanZajec().Get(a.get('data'))
new AjaxRequest.PodrecznikiLataSzkolne().Get()
new AjaxRequest.PodrecznikiUcznia().Get(b)
new AjaxRequest.Pomoc().Get()
new AjaxRequest.ScalanieKont().UnmergeAccounts(c.Id)
new AjaxRequest.ScalanieKont().GetMergedAccounts()
new AjaxRequest.ScalanieKont().GetToken(c)new AjaxRequest.ScalanieKont().MergeAccounts(d, e)
new AjaxRequest.UczenDziennik().Get()
new AjaxRequest.Sprawdziany().Get(f, e)
new AjaxRequest.Homework().Get(f, e, d || - 1)
new AjaxRequest.Homework().Post(a)
new AjaxRequest.Homework().Post(c)
new AjaxRequest.Statystyki().GetOcenyCzastkowe(a.Id)
new AjaxRequest.Statystyki().GetOcenyRoczne(a.Id)
new AjaxRequest.Statystyki().GetPunkty(b.Id)
new AjaxRequest.SzkolaINauczyciele().Get()
new AjaxRequest.UwagiIOsiagniecia().Get()
new AjaxRequest.Zebrania().Get()
new AjaxRequest.ZebraniaObecnosc().Post(a.data.Id)
new AjaxRequest.UczenCache().Get()UczenCache().Get() to UczenCache.mvc/Get
[{"globalKey":"Klucz UUID4","liczbaWiadomosci":1}]/LiczbyNieodczytanych


GitHub 

GitHub 
/OdebraneWydruk{"esbPrintoutParams":{"guid":"Numer skrzynki?","friendlyName":"Wiadomości odebrane"},"input":{"globalKeys":["klucz","klucz"]}}
https://dds.edu.gdansk.pl/Download/Status/<uuid wydruku>?callback=jsonp_1663707841134_46021{
"success": false,
"code": 404,
"message": "[dokument nieznany]"
}




WiadomoscOdpowiedzPrzekaz












nieprzeczytanePrzeczytanePrzez zaczyna się od 0/








nieprzeczytanePrzeczytanePrzez zaczyna się od 0/ 






























POST LekcjeZaplanowane.mvc/GetZaplanowane RESPONSE (edited){
"data": {
"02.11.2022": [
{
"IdLekcja": 1000000,
"Data": "2022-11-02 00:00:00",
"Przedmiot": "Przedmiot",
"NrLekcji": 2,
"Temat": "Temat",
"Nauczyciel": "Nazwisko Imie [NI]",
"Zastepstwo": "",
"Nieobecnosc": "",
"PseudonimUcznia": null,
"ZasobyPubliczne": "",
"LekcjaZdalna": "",
"KolekcjePoLekcji": [],
"PrzedmiotDisplay": "Przedmiot"
}
]
},
"success": true
}{"poczatek":"2022-11-01T21:25:07","koniec":"2022-11-30T21:25:07","idPrzedmiot":-1}














lis 10, 2022 8:56:23 PM okhttp3.internal.platform.Platform log
INFO: --> GET https://uonetplus-wiadomosciplus.vulcan.net.pl/powiatdabrowski/api/Odebrane?idLastWiadomosc=0&pageSize=50 h2
lis 10, 2022 8:56:23 PM okhttp3.internal.platform.Platform log
INFO: <-- 200 https://uonetplus-wiadomosciplus.vulcan.net.pl/powiatdabrowski/api/Odebrane?idLastWiadomosc=0&pageSize=50 (126ms, 1772-byte body)
Exception in thread "main" java.time.format.DateTimeParseException: Text '2022-10-12T09:27:06.7+02:00' could not be parsed, unparsed text found at index 0
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2055)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1954)
at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:494)
at io.github.wulkanowy.sdk.scrapper.adapter.CustomDateAdapter.deserialize(CustomDateAdapter.kt:25)
at io.github.wulkanowy.sdk.scrapper.adapter.CustomDateAdapter.deserialize(CustomDateAdapter.kt:11)
at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:70)
at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43)
at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70)
at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableElement(StreamingJsonDecoder.kt:162)
at io.github.wulkanowy.sdk.scrapper.messages.MessageMeta$$serializer.deserialize(MessageMeta.kt:8)
at io.github.wulkanowy.sdk.scrapper.messages.MessageMeta$$serializer.deserialize(MessageMeta.kt:8)
Podczas pobieranie informacji na temat wiadomości sdk.getMessages(Folder.RECEIVED) pojawia się powyższy błąd.



sdk 16, kotlin("jvm") version "1.7.20"







fun getReceivedMessages() : List<Message> = runBlocking {
return@runBlocking sdk.getMessages(Folder.RECEIVED)
}
final Vulcan vulcan = new Vulcan();
vulcan.login("mail", System.getenv("PASSWORD"));
vulcan.getReceivedMessages().forEach(message -> {
System.out.println(message.component6());
});

2/4 czy ocena jest punktowa np. 37/60?







{
"Nauczyciel": "Nazwisko Imię",
"Wpis": "3/5",
"Waga": 1,
"NazwaKolumny": "Sprawdzian z działu 4",
"KodKolumny": "SPR",
"DataOceny": "29.02.2021",
"KolorOceny": 7261447
}


2/4 czy ocena jest punktowa np. 37/60? 





1(4) czy coś takiego








123/600/5/600




modifier w Grade?

PokazPunkty w uwagach ma jakiś sens?





Punkty nie są puste to PokazPunkty to true



35.5 punktów?
Is13 w UczenDziennik.mvc/Get oznacza czy uczeń jest w klasie 1 - 3 szkoły podstawowej

IsArchiwalny blokuje zmianę zdjęcia ucznia

statics: {
KategoriaFrekwencjiEnum: {
Obecnosc: 1,
NieobecnoscNieusprawiedliwiona: 2,
NieobecnoscUsprawiedliwiona: 3,
SpoznienieNieusprawiedliwione: 4,
SpoznienieUsprawiedliwione: 5,
NieobecnoscZPrzyczynSzkolnych: 6,
Zwolnienie: 7,
},
StatusUsprawiedliwieniaEnum: { Nowe: 0, Zatwierdzone: 1, Odrzucone: 2 },
FormularzSzablonFormatEnum: { None: 0, Pdf: 1, Doc: 2 },
TypOcenEnum: {
BiezaceOpisowe: 1,
ZwykleOkresowe: 2,
ZwykleRoczne: 3,
Specjalne: 4,
Zwykle: 5,
BiezaceOpisoweArtystyczne: 6,
OpisoweKsztalcenieSpecjalne: 7,
},
ExcuseAllDayModeEnum: { Off: 0, AllDay: 1, AllDayMultipleLessons: 2 },
StatusZadaniaEnum: {
PrzeslaneDoUcznia: 1,
OdpowiedzPrzeslana: 2,
ProsbaOPonownePrzeslanie: 3,
ZadanieZaakceptowane: 4,
},
MergeModeEnum: { GenerateToken: 1, MergeAccounts: 2 },
ObywatelstwoEnum: { Obcokrajowiec: 0, Polak: 1, ObcokrajowiecZPeselem: 2 },
RodzajUczniaEnum: { Uczen: 1, Przedszkolak: 2, Wychowanek: 3 },
FunkcjonalnoscEnum: {
U_Ucze_I_ZasobyUruchomienieLinku: 61,
U_Ucze_I_ZadanieDomoweZDydaktykiUruchomienieLinku: 62,
U_Ucze_I_ZadanieDomoweOdpowiedzZDydaktykiUruchomienieLinku: 63,
U_Ucze_I_SprawdzianyZDydaktykiUruchomienieLinku: 64,
},
}, może się przyda
Ext.define("Vulcan.Efeb.Opiekun.model.planZajec.PrzedmiotyModel", {
extend: Vulcan.Common2015.base.model.VModel,
fields: [
{ name: "Id", type: "int" },
{ name: "IdDziennik", type: "int" },
{ name: "IdJednostkaSprawozdawcza", type: "int" },
{ name: "IdPrzedmiot", type: "int" },
{ name: "IdUczen", type: "int" },
{ name: "InformacjeArkuszowe", type: "int" },
{ name: "Nazwa", type: "string" },
{ name: "Pozycja", type: "int" },
],
});



Is13 w UczenDziennik.mvc/Get oznacza czy uczeń jest w klasie 1 - 3 szkoły podstawowej 
Get nie wchodzi




Przedmioty.mvc istniejePoryLekcji.mvc ale też nie znam końcówki





Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: Invalid column name 'Nieobecnosc'.
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorHandlerTransformerKt.handleErrors(ErrorHandlerTransformer.kt:20)
at io.github.wulkanowy.sdk.scrapper.repository.StudentRepository.getTimetableFull(StudentRepository.kt:198)

Treść zgłoszenia:
io.github.wulkanowy.sdk.scrapper.exception.VulcanException: Invalid column name 'Nieobecnosc'.
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorHandlerTransformerKt.handleErrors(ErrorHandlerTransformer.kt:20)
at io.github.wulkanowy.sdk.scrapper.repository.StudentRepository.getTimetableFull(StudentRepository.kt:198) 










{id_ucznia}-{id_dziennika}-{rodzaj_dziennika}

1 nie może znaczyć chyba nic innego





IdPrzedszkoleDziennik ma wartość inną niż 0 to IdDziennik ma wartość 0


app_guid, request_verification_token i app_version, bo wydaje mi się że jak user z edoune wejdzie do uczeń to przekieruje go do ucznia+?
















by to ogólnie delegatura a lazy to klasa, która się tą delegacją zajmuje

















./gradlew build to sypie mi build failed:
VulcanAuth-0.0.1-SNAPSHOT/lib/sdk-1.8.1.jar is a duplicate but no duplicate handling strategy has been set.
SDK mam w dependencies tak o:
implementation("io.github.wulkanowy:sdk:1.8.1")
stack nie pomaga :(

mavenCentral()
maven { url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots/") }
maven { url = uri("https://jitpack.io") }











- implementation("io.github.wulkanowy:sdk:1.8.1")
+ implementation("io.github.wulkanowy.sdk:build:1.8.1")



























Student .studentName zwraca jedno pierwsze imię czy jeśli uczeń ma dwa to oba?


Student .studentName zwraca jedno pierwsze imię czy jeśli uczeń ma dwa to oba? Opiekun1 lub Opiekun2 w FullName jest też podawane drugie imię?
uonetplus-uczen.vulcan.net.pl/symbol/123456/Przedmioty.mvc/Delete











No supported student found in diaries podczas logowania ucznia, nic to nie psuje ale w konsoli mnie kuje XD

Wystąpił nieoczekiwany błąd. Wystąpił błąd aplikacji. Prosimy zalogować się ponownie. Jeśli problem będzie się powtarzał, prosimy o kontakt z serwisem.




























HomeworkId, a czym jest Id?


HTML od CF
[...]cufs.vulcan.net.pl needs to review the security of your connection before proceeding.













fun main() {
println("Dziękuję obu braciom")
}

OcenaRoczna i ProponowanaOcenaRoczna w https://uonetplus-uczen.fakelog.cf/powiatwulkanowy/123456/Oceny.mvc/Get powinne być puste?

OcenaRoczna i ProponowanaOcenaRoczna będzie zawsze pusto?


EfebSsoAuthCookie














val loginSelectors = when (loginType) {
STANDARD -> doc.select(SELECTOR_STANDARD)
ADFS -> doc.select(SELECTOR_ADFS)
ADFSLight, ADFSLightCufs, ADFSLightScoped -> doc.select(SELECTOR_ADFS_LIGHT)
ADFSCards -> doc.select(SELECTOR_ADFS_CARDS)
else -> Elements()
}
if (loginSelectors.isNotEmpty()) {
throw NotLoggedInException("User not logged in")
}
val emailAddress = cert.select("[AttributeName=\"emailaddress\"] samlAttributeValue").text()
na fakelogu to nie wyrzuca błędu?

























Aplikacja nie został odnaleziony

DzienniczekPlus2.0


encodeDefaults bo jako wartość domyślna miałem to ustawione (edited)




1 ) ( 2

( 1 ) ( 2 )

(nieobecny oddział: coś np wycieczka) (nieobecność nauczyciela: uczniowie przychodzą później)


<div data-qoverflow="true" class="x-body-el x-gridcell-body-el" id="ext-element-2827" data-qtip=""><div><span class="x-treelabel-ppl x-treelabel-inv">Przedmiot [Grupa]</span><span class="x-treelabel-ppl x-treelabel-inv"> </span><span class="x-treelabel-ppl x-treelabel-inv"> 1</span><span class="x-treelabel-ppl x-treelabel-inv"> Kowalski Jan</span>(nieobecny oddział: coś np wycieczka)<br>(nieobecność nauczyciela: uczniowie przychodzą później)</div></div> (edited)




<div>
<span class="x-treelabel-ppl x-treelabel-inv">Przedmiot [Grupa]</span>
<span class="x-treelabel-ppl x-treelabel-inv"></span>
<span class="x-treelabel-ppl x-treelabel-inv">1</span>
<span class="x-treelabel-ppl x-treelabel-inv">Kowalski Jan</span>(nieobecny oddział: coś np wycieczka)
<br>(nieobecność nauczyciela: uczniowie przychodzą później)</div>
</div>



<div>
<span class="x-treelabel-ppl x-treelabel-inv">Przedmiot [Grupa]</span>
<span class="x-treelabel-ppl x-treelabel-inv"></span>
<span class="x-treelabel-ppl x-treelabel-inv">1</span>
<span class="x-treelabel-ppl x-treelabel-inv">Kowalski Jan</span>(nieobecny oddział: coś np wycieczka)
<br>(nieobecność nauczyciela: uczniowie przychodzą później)</div>
</div> 


return "; ".join(comment.removeprefix("(").removesuffix(")").split(")("))







https://uonetplus-uczen.vulcan.net.pl/XYZ/XYZ/Jadlospis.mvc/Get
{
"data": "2023-04-27T00:00:00"
} (edited)















pageSize=1






































gradlew check przechodziło


getUserSubjectsFromScrapper













Exception in thread "main" io.github.wulkanowy.sdk.scrapper.exception.VulcanException: HTTP Error 404. Wystąpił nieoczekiwany wyjątek. Jeśli problem będzie się powtarzał prosimy o kontakt z serwisem.
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorInterceptor.checkForError(ErrorInterceptor.kt:43)
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorInterceptor.intercept(ErrorInterceptor.kt:34)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:831)
implementation ("io.github.wulkanowy:sdk:1.9.2")
implementation("com.squareup.okhttp3:okhttp:4.10.0")
fun login(email: String, password: String): Sdk = runBlocking {
val student = sdk.getStudentsFromScrapper(
email = email,
password = password,
scrapperBaseUrl = "https://vulcan.net.pl/",
symbol = "moj_powiacik"
).single()
sdk.apply {
mode = Sdk.Mode.SCRAPPER
loginType = Sdk.ScrapperLoginType.STANDARD
studentId = student.studentId
classId = student.classId
schoolSymbol = student.schoolSymbol
scrapperBaseUrl = "https://vulcan.net.pl/"
diaryId = student.semesters[0].diaryId
}
}
Mam pytanie dlaczego taki błąd mi wyrzuca?
Czy wersja API Sdk się zmieniła i bibliotek?

fun login(email: String, password: String): Sdk = runBlocking {
val student = sdk.getUserSubjectsFromScrapper(
email = email,
password = password,
scrapperBaseUrl = "https://vulcan.net.pl/",
symbol = "powiatdabrowski"
)
sdk.apply {
mode = Sdk.Mode.SCRAPPER
loginType = Sdk.ScrapperLoginType.STANDARD
studentId = student.studentId
classId = student.classId
schoolSymbol = student.schoolSymbol
scrapperBaseUrl = "https://vulcan.net.pl/"
diaryId = student.semesters[0].diaryId
}
} (edited)





fun login(email: String, password: String): Sdk = runBlocking {
val student = sdk.getUserSubjectsFromScrapper(
email = email,
password = password,
scrapperBaseUrl = "https://vulcan.net.pl/",
symbol = "powiatdabrowski"
)
sdk.apply {
mode = Sdk.Mode.SCRAPPER
loginType = Sdk.ScrapperLoginType.STANDARD
studentId = student.studentId
classId = student.classId
schoolSymbol = student.schoolSymbol
scrapperBaseUrl = "https://vulcan.net.pl/"
diaryId = student.semesters[0].diaryId
}
} (edited)


~ ❯❯❯ curl -sX POST https://uonetplus-uczen.vulcan.net.pl/Default/123456/UczenCache.mvc/Get -H "Content-Type: application/json" -d '{}' | jq
{
"success": false,
"feedback": {
"Handled": false,
"FType": "Error",
"Message": "Begin failed with SQL exception",
"ExceptionType": null,
"ExceptionMessage": "",
"InnerExceptionMessage": "",
"Action": null,
"data": null,
"success": false,
"requestId": null
}
}
dziwne














val registerUser: RegisterUser = sdk.getUserSubjectsFromScrapper(
email = userEmail,
password = userPassword,
scrapperBaseUrl = "https://vulcan.net.pl/",
symbol = "powiat"
) (edited)

fun getGrades(): Grades = runBlocking {
return@runBlocking sdk.getGrades(sdk.getSemesters()[1].semesterId)
}

private val sdk = Sdk()
fun login(userEmail: String, userPassword: String): Unit = runBlocking {
val registerUser: RegisterUser = sdk.getUserSubjectsFromScrapper(
email = userEmail,
password = userPassword,
scrapperBaseUrl = "https://vulcan.net.pl/",
symbol = "powiat"
)
val registerSymbol = registerUser.symbols
.filter { it.schools.isNotEmpty() }
.first { it.schools.all { school -> school.subjects.isNotEmpty() } }
val registerUnit = registerSymbol.schools.first()
val registerStudent = registerUnit.subjects.filterIsInstance<RegisterStudent>().first()
val semester = registerStudent.semesters.last()
sdk.apply {
email = userEmail
password = userPassword
scrapperBaseUrl = "https://vulcan.net.pl/"
loginType = Sdk.ScrapperLoginType.valueOf(registerUser.loginType?.name!!)
symbol = registerSymbol.symbol
schoolSymbol = registerUnit.schoolId
studentId = registerStudent.studentId
diaryId = semester.diaryId
classId = registerStudent.classId
}
} (edited)



fun getSubjects() : List<Subject> = runBlocking {
return@runBlocking sdk.getSubjects()
}

class Vulcan {
private val sdk = Sdk()
fun login(userEmail: String, userPassword: String): Unit = runBlocking {
val registerUser: RegisterUser = sdk.getUserSubjectsFromScrapper(
email = userEmail,
password = userPassword,
scrapperBaseUrl = "https://vulcan.net.pl/",
symbol = "powiatdabrowski"
)
val registerSymbol = registerUser.symbols
.filter { it.schools.isNotEmpty() }
.first { it.schools.all { school -> school.subjects.isNotEmpty() } }
val registerUnit = registerSymbol.schools.first()
val registerStudent = registerUnit.subjects.filterIsInstance<RegisterStudent>().first()
val semester = registerStudent.semesters.last()
sdk.apply {
email = userEmail
password = userPassword
scrapperBaseUrl = "https://vulcan.net.pl/"
loginType = Sdk.ScrapperLoginType.valueOf(registerUser.loginType?.name!!)
symbol = registerSymbol.symbol
schoolSymbol = registerUnit.schoolId
studentId = registerStudent.studentId
diaryId = semester.diaryId
classId = registerStudent.classId
}
}
fun getInformation() : StudentInfo = runBlocking {
return@runBlocking sdk.getStudentInfo()
}
fun getGrades(): Grades = runBlocking {
return@runBlocking sdk.getGrades(sdk.getSemesters()[1].semesterId)
}
fun getSubjects() : List<Subject> = runBlocking {
return@runBlocking sdk.getSubjects()
}
}
private final Vulcan vulcan = new Vulcan();
public Application() {
vulcan.login(System.getenv("MAIL"), System.getenv("PASSWD"));
vulcan.getGrades();
} public static void main(String[] args) {
new Application();
LockSupport.park();
}



Exception in thread "main" java.lang.IllegalArgumentException: Expected URL scheme 'http' or 'https' but no scheme was found for /00037...
at okhttp3.HttpUrl$Builder.parse$okhttp(HttpUrl.kt:1261)
at okhttp3.HttpUrl$Companion.get(HttpUrl.kt:1634)
at okhttp3.HttpUrl.get(HttpUrl.kt)
at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:506)
at io.github.wulkanowy.sdk.hebe.repository.RepositoryManager.getStudentRepository(RepositoryManager.kt:54)
at io.github.wulkanowy.sdk.hebe.Hebe$studentRepository$2.invoke(Hebe.kt:83)
at io.github.wulkanowy.sdk.hebe.Hebe$studentRepository$2.invoke(Hebe.kt:82)
at io.github.wulkanowy.sdk.hebe.ResettableLazy$makeInitBlock$1.invoke(ResettableLazyManager.kt:46)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at io.github.wulkanowy.sdk.hebe.ResettableLazy.getValue(ResettableLazyManager.kt:36)
at io.github.wulkanowy.sdk.hebe.Hebe.getStudentRepository(Hebe.kt:82)
at io.github.wulkanowy.sdk.hebe.Hebe.getGrades(Hebe.kt:124)
at io.github.wulkanowy.sdk.Sdk$getGrades$2.invokeSuspend(Sdk.kt:379)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:115)
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:100)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684)















?mode=2 do url











?mode=2 do url 
MEETINGS w capabilities + dostajesz nową listę skrzynek wychowawców
Exception in thread "main" io.github.wulkanowy.sdk.scrapper.exception.ScrapperException: 404:
at io.github.wulkanowy.sdk.scrapper.interceptor.HttpErrorInterceptor.intercept(HttpErrorInterceptor.kt:19)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
at io.github.wulkanowy.sdk.scrapper.interceptor.UserAgentInterceptor.intercept(UserAgentInterceptor.kt:35)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
at io.github.wulkanowy.sdk.scrapper.interceptor.AutoLoginInterceptor.intercept(AutoLoginInterceptor.kt:59)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
at io.github.wulkanowy.sdk.scrapper.interceptor.ErrorInterceptor.intercept(ErrorInterceptor.kt:31)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:831) co oznacza ten blad?



fun getHomework(): List<Homework> = runBlocking {
return@runBlocking sdk.getHomework(LocalDate.MIN, LocalDate.MAX)
}












































val sdk = Sdk()
val registerUser = runBlocking {
try {
sdk.getStudentsHybrid(
email = body.email!!,
password = body.password!!,
scrapperBaseUrl = config.url,
startSymbol = config.symbol)
} catch (e: BadCredentialsException) {
model.addAttribute("error", e.message)
return@runBlocking null
}
} ?: return null
val registerSymbol = registerUser.symbols
.filter { it.schools.isNotEmpty() }
.first { it.schools.all { school -> school.subjects.isNotEmpty() } }
val school = registerSymbol.schools.first()
val registerStudent = school.subjects.filterIsInstance<RegisterStudent>().first()







janpawel2 albo na xddddd




















NoSuchElementException: Collection contains no element matching the predicate.
chcę aby sprawdzało tylko w jednej szkole z symbol = config.symbol
fun login(body: LoginForm, model: Model): StudentResponse? {
val sdk = Sdk()
val registerUser: RegisterUser = runBlocking {
try {
sdk.getUserSubjectsFromScrapper(
email = body.email!!,
password = body.password!!,
scrapperBaseUrl = config.url,
symbol = config.symbol)
} catch (e: BadCredentialsException) {
model.addAttribute("error", e.message)
return@runBlocking null
}
} ?: return null
val registerSymbol = registerUser.symbols
.filter { it.schools.isNotEmpty() }
.first { it.schools.all { school -> school.subjects.isNotEmpty() } }
val registerUnit = registerSymbol.schools.first()
val registerStudent = registerUnit.subjects.filterIsInstance<RegisterStudent>().first()
val semester = registerStudent.semesters.first()



2023-09-26 16:56:44.416 ERROR 167719 --- [nio-8888-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.util.NoSuchElementException: Collection contains no element matching the predicate.] with root cause
java.util.NoSuchElementException: Collection contains no element matching the predicate.
at pl.elektronplus.elektronvulcanauth.service.VulcanAuthService.login(VulcanAuthService.kt:82) ~[classes!/:na]
at pl.elektronplus.elektronvulcanauth.controller.VulcanAuthController.getStudent(VulcanAuthController.kt:26) ~[classes!/:na]
at jdk.internal.reflect.GeneratedMethodAccessor49.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.23.jar!/:5.3.23]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.23.jar!/:5.3.23]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.23.jar!/:5.3.23]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.23.jar!/:5.3.23]



registerUser.symbols
.filter { it.schools.isNotEmpty() }
.first { it.schools.all { school -> school.subjects.isNotEmpty() } }














Sdk musisz ustawić symbol na gdansk


kotlinx.serialization.MissingFieldException: Field 'LinkedAccountUids' is required for type with serial name 'io.github.wulkanowy.sdk.scrapper.register.AuthInfo', but it was missing at path: $.AuthInfos[0]



















{
"ocenyPrzedmioty": [{
"przedmiotNazwa": "Zajęcia artystyczne",
"pozycja": 13,
"nauczyciele": ["Jan Kowalski [JK]"],
"ocenyCzastkowe": [{
"wpis": "6",
"dataOceny": "25.02.2024",
"kategoriaKolumny": "Bieżące",
"nazwaKolumny": "",
"waga": 0.00,
"kolorOceny": 0,
"nauczyciel": "Jan Kowalski [JK]",
"zmienionaOdOstatniegoLogowania": true
}],
"egzaminFormaPraktyczna": null,
"egzaminFormaUstna": null,
"egzaminOcenaProponowana": null,
"egzaminOcenaLaczna": null,
"sumaPunktow": "",
"srednia": 0.0,
"proponowanaOcenaOkresowa": null,
"proponowanaOcenaOkresowaPunkty": null,
"ocenaOkresowa": null,
"ocenaOkresowaPunkty": null,
"podsumowanieOcen": null
}, {
"przedmiotNazwa": "Zajęcia dodatkowe",
"pozycja": 0,
"nauczyciele": null,
"ocenyCzastkowe": null,
"egzaminFormaPraktyczna": null,
"egzaminFormaUstna": null,
"egzaminOcenaProponowana": null,
"egzaminOcenaLaczna": null,
"sumaPunktow": null,
"srednia": 0.0,
"proponowanaOcenaOkresowa": " ",
"proponowanaOcenaOkresowaPunkty": null,
"ocenaOkresowa": " ",
"ocenaOkresowaPunkty": null,
"podsumowanieOcen": " "
}],
"ustawienia": {
"isPunkty": false,
"isSrednia": false,
"isDorosli": false,
"isOcenaOpisowa": true,
"isOstatniOkresKlasyfikacyjny": true
}
}

nazwaKolumnykategoriaKolumny
ocenaOkresowapodsumowanieOcen











































[{
"typ": 1,
"przedmiotNazwa": "Zajęcia artystyczne",
"data": "2024-03-T00:00:00+01:00",
"hasAttachment": false,
"id": 127
}]{
"typ": 1,
"data": "2024-03-20T00:00:00+01:00",
"przedmiotNazwa": "Zajęcia artystyczne",
"nauczycielImieNazwisko": "Jan Kowalski",
"opis": "Opis sprawdzianu",
"sprawdzianModulDydaktyczny": false,
"linki": [],
"id": 231
}

[{
"typ": 2,
"przedmiotNazwa": "Zajęcia artystyczne",
"data": "2024-03-19T00:00:00+01:00",
"hasAttachment": false,
"id": 127
}, {
"typ": 4,
"przedmiotNazwa": "Zajęcia artystyczne",
"data": "2024-03-19T00:00:00+01:00",
"hasAttachment": false,
"id": 129
}]



{
"typ": 4,
"data": "2024-03-20T00:00:00+01:00",
"terminOdpowiedzi": "2024-03-20T00:00:00+01:00",
"przedmiotNazwa": "Zajęcia artystyczne",
"nauczycielImieNazwisko": "Jan Kowalski",
"opis": "opis zadania",
"zalaczniki": [],
"linki": [],
"status": 0,
"odpowiedzWymagana": false,
"zadanieModulDydaktyczny": false,
"odpowiedz": {
"id": 231,
"status": 1,
"odpowiedz": null,
"komentarzNauczyciela": null,
"linkiUcznia": [],
"zalaczniki": [],
"data": null,
"zadanieModulDydaktyczny": false
},
"id": 123
}


Exam.kt mam dodać JsonNames tam gdzie są dane z ogólnego endpointa i stworzyć ExamDetailsPlus.kt, dodać endpointy w service i później pobawić się w StudentPlusRepository.kt i na końcu dodać eduone do Scrapper.kt?








response.copy(teacher = "dupa")






























implementation 'com.squareup.okhttp3:okhttp-bom:4.12.0'







implementation 'com.squareup.okhttp3:okhttp-bom:4.12.0' 











































1970-01-01T00:00:00+01:00 zwraca 1970-01-01T00:00:00+00:00




UnknownHostException: uonetplus-uczen.fakelog.localhost
127.0.0.1 adfs.fakelog.localhost
127.0.0.1 adfslight.fakelog.localhost
127.0.0.1 fakelog.localhost
127.0.0.1 cufs.fakelog.localhost
127.0.0.1 uonetplus.fakelog.localhost
127.0.0.1 uonetplus-uzytkownik.fakelog.localhost
127.0.0.1 uonetplus-uczen.fakelog.localhost
127.0.0.1 uonetplus-uczenplus.fakelog.localhost
127.0.0.1 uonetplus-wiadomosciplus.fakelog.localhost











createFinalSdk(email password schoolsymbol ...): FinalSdk i createInitialSdk(email password): InitialSdk; fun InitialSdk.initialize(schoolsymbol ...): FinalSdk (nazwy tylko ilustracyjne)







chain.proceed(chain.request().newBuilder().build()) co to robi? rozumiem ze to jest jakas kopia requestu, ale dlaczego? zeby odswiezyc cookiesy w requescie?


Add additional module login before every *sensitive* endpoint call: https://github.com/wulkanowy/sdk/commit/78fda15f02ae6449268e40f949f6bb3530a64f27. Te sensitive endpoint calle przechodzą przez OkHttpClient, w którym jest już AutoLoginInterceptor, czyli ta funkcjonalność logowania powinna automatycznie już być obsługiwana??
















permissions ze strony głównej<script type="text/javascript">
var VParam = {
rootUrl: 'https://uonetplus.vulcan.net.pl/',
clientSymbol: 'lodz',
appVersion: '24.3.0.58345',
permissions: 'eyJVbml0cy... (edited)<script type="text/javascript">
var VParam = {
rootUrl: 'https://uonetplus.edu.gdansk.pl/',
clientSymbol: 'gdansk',
appVersion: '24.4.1.58566',
dbId: ... (edited)










































































































