Portál AbcLinuxu, 1. května 2025 11:31
Přidávám do knihovny libisds funkce implementující nové služby, které zavedl Provozní řád ISDS vydaný 28. listopadu 2010 (velký archiv ZIP) a opět se nestačím divit.
Ne, dnes nejde o bezpečnostní chybu. Jen o ukázku kvalitní dokumentace a kvalitní implementace.
Konkrétně služba GetMessageStateChanges umí vrátit seznam změn stavů odchozích zpráv (například dodána, doručena, nelze doručit). Na vstup se uvede rozpětí času a na výstup vyleze (prázdný) seznam změn.
Rozpětí času se zadává jako počáteční a koncový čas ve formátu ISO, každý do vlastního elementu – dmFromTime a dmToTime.
Specifikace (provozní řád) nabízí podobnou službu, která ale vrací celé obálky datových zpráv, což je těžkopádné a pomalé. Na druhou stranu interval může být otevřený (i z obou stran). Dnes probíraná služba na hrátky s časem jde od lesa:
Časový interval zadaný na vstupu musí ležet v nepříliš vzdálené minulosti (v současné verzi 15 dnů). Starší události se evidují pouze „starým“ způsobem, ne tedy pomocí této WS.
A sice přímo nepřipouští, že by interval mohl být otevřený, nicméně v XML schématu uvádí, že oba elementy mohou být prázdné:
<xs:complexType name="tGetStateChangesInput"> <xs:sequence> <xs:element name="dmFromTime" nillable="true" type="xs:dateTime"> <xs:annotation> <xs:documentation>čas dodání od</xs:documentation> </xs:annotation> </xs:element> <xs:element name="dmToTime" nillable="true" type="xs:dateTime"> <xs:annotation> <xs:documentation>čas dodání do</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType>
A tak jsem si řekl, že za zkoušku nic nedám. Zkusil jsem takto službu GetMessageStateChanges zavolat:
<?xml version="1.0"?> <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <GetMessageStateChanges xmlns="http://isds.czechpoint.cz/v20"> <dmFromTime/> <dmToTime/> </GetMessageStateChanges> </Body> </Envelope>
A knihovna mi vynadala, že v odpovědi serveru chybí návratový kód volání. Návratový kód je běžně uschován v podstromu /Envelope/Body/*/dmStatus, tentokrát ale byl jinde:
<?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <q:GetMessageStateChangesResponse xmlns:q="http://isds.czechpoint.cz/v20" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <q:dmRecords> <q:dmStatus> <q:dmStatusCode>9005</q:dmStatusCode> <q:dmStatusMessage>Internal error</q:dmStatusMessage> </q:dmStatus> </q:dmRecords> </q:GetMessageStateChangesResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Pro porovnání ukázková odpověď z dokumentace:
<?xml version="1.0"?> <q:GetMessageStateChangesResponse xmlns:q="http://isds.czechpoint.cz/v20" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <q:dmRecords> <q:dmRecord> <q:dmID>169100</q:dmID> <q:dmEventTime>2010-10-11T11:18:17.308+02:00</q:dmEventTime> <q:dmMessageStatus>4</q:dmMessageStatus> </q:dmRecord> <q:dmRecord> <q:dmID>169100</q:dmID> <q:dmEventTime>2010-10-11T11:18:23.249+02:00</q:dmEventTime> <q:dmMessageStatus>6</q:dmMessageStatus> </q:dmRecord> </q:dmRecords> <q:dmStatus> <q:dmStatusCode>0000</q:dmStatusCode> <q:dmStatusMessage>Provedeno úspěšně.</q:dmStatusMessage> </q:dmStatus> </q:GetMessageStateChangesResponse>
Jak můžete vidět, kód se lepí i jinde než jen ve studentských projektech.
Systémové datové zprávy:
- 9
- Trvalé znepřístupnění schránky typu PFO, PO, PO_ZAK, OVM, OVM_NOTAR, OVM_EXEK při ukončení činnosti nebo výmazu z evidence.
- 10
- Dočasné znepřístupnění schránky typu FO a PFO z důvodu úmrtí majitele DS, zjištěné z ISEO při doručení datové zprávy fikcí.
Zajímalo by mě, kdy je podle autorů specifikace fyzická osoba dost mrtvá na to, aby její datová schránka byla znepřístupněna trvale, na rozdíl od schránky osoby právnické, jejíž činnost byla ukončena.
Tiskni
Sdílej:
Zajímalo by mě, kdy je podle autorů specifikace fyzická osoba dost mrtvá na to, aby její datová schránka byla znepřístupněna trvaleTřeba je to připraveno pro reinkarnaci. Nebo pro návrat (oživlé mrtvoly) ze záhrobí
'cesky'
) a napůl anglický SOAP vypadá obludně?
v normalnej krajine by to uz asi bolo za hranicou unosnostiI v "normálních zemích" to občas trochu skřípe
Vývojáři odpověděli, že chybu opravili a spravenou verzi nasadí 19. prosince.
Dále prozradili, že nedefinované hraniční časy ve smyslu neomezeného intervalu budou podporovány a že se o tom zmíní ve specifikaci. Na otázku, zda výstupní seznam záznamů je seřazen, řekli, že nikoliv.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.