WebDAV – práce se zámky
Možnost zamknout soubor a zabránit tak úpravě jiným uživatelem je jednou z nejdůležitějších funkcí, které od software pro kolektivní spolupráci požadujeme. Jelikož byl WebDAV vyvíjen hlavně pro zajištění vzdálené spolupráce, byla podpora zámků do standardu zabudována.
Předem bych rád upozornil, že problematika zámků a jejich použití je relativně komplikovaná a já se nemohu věnovat všem detailům. Bližší informace najdete v dokumentu RFC 2518.
Specifikace WebDAVu nám umožňuje, jak už jsme zmínili v prvním díle, použít pro tyto účely dva typy zámků, Shared a Exclusive. Specifikace WebDAVu upravuje pouze chování takzvaného Write Lock (zámek proti zápisu). Nicméně syntaxe všech příkazů a XML elementů je značně variabilní a umožňuje tak vytvoření vlastních typů zámků. Soubor se specifikovaným zámkem proti zápisu může být čten jakýmkoliv uživatelem. Ovšem pokud se uživatel neprokáže platným klíčem, neumožní mu jej server uložit.
Ještě jednou upozorňuji, že server kompatibilní s technologií WebDAV nemusí zámky podporovat. Před jejich použitím si proto pečlivě prostudujte možnosti vámi používaného serveru.
Zámky jsou ovládány dvěma příkazy, LOCK
a UNLOCK
. Názvy napovídají, že první příkaz slouží k vytvoření zámku a druhý k jeho zrušení.
Každý zámek je jednoznačně určen zvláštním řetězcem (klíčem), tzv. Lock Token (hodnota elementu locktoken
), který server vrátí v odpovědi na příkaz LOCK
, nebo jej najdete v rámci vlastnosti lockdiscovery
. Zde by se mohli někteří z vás pozastavit. Takto definované klíče lze totiž zjistit velmi jednoduchým způsobem a i neoprávněný uživatel by mohl ukládat uzamčené soubory. Klíče sami o sobě totiž nezaručují žádná zvláštní přístupová práva. To, zda k souboru bude mít přístup pouze oprávněný uživatel, musí zajistit server prostřednictvím svých autorizačních mechanismů. Pokud by server žádnou autorizaci nevyžadoval, mohl by si jakýkoliv uživatel zjisti hodnotu klíče odesláním příkazu PROPFIND
.
Pro zámky obecně platí, že každému uživateli, který má ke zdroji přístup, musí být vygenerován zvláštní klíč. Pokud tedy vytvoříme Shared Lock pro tři uživatele, pak pro daný zdroj musí existovat tři klíče.
Write Lock
Zámek proti zápisu je jediným, který specifikace WebDAVu popisuje. Vytvoření zámku tohoto typu pro daný zdroj musí zabránit úspěšnému vykonání příkazů PUT, POST, PROPPATCH, LOCK, UNLOCK, MOVE, DELETE, MKCOL
. Ostatní příkazy můžeme využít bez ohledu na existující zámek.
LOCK
Příkaz LOCK
, jak už jsme se zmínili dříve, nám umožňuje vytvořit zámek pro soubor či kolekci. Samo použití příkazu LOCK je poněkud složitější a tak si jej nejdříve ukážeme na příkladu.
Hlavičky
Pouze s příkazem LOCK lze použít novou hlavičku Timeout
, jejíž hodnota sděluje serveru, kdy má vytvořený zámek vypršet. Hlavička Timeout
se zapisuje v následujícím tvaru:
Timeout: „Infinite“, „Second-„počet sekund nebo „Extend>“
V hlavičce můžeme uvést i více hodnot oddělených čárkami, přičemž by měly být seřazeny podle priority zleva doprava. Server nemusí akceptovat hned první zadanou hodnotu, což je možné vidět i na výše uvedeném příkladě. Server akceptuje až hodnotu stanovenou počtem sekund.
Pokud chceme uzamknout kolekci, můžeme chování příkazu LOCK
ovlivnit odesláním hlavičky Depth
, jejíž popis jsme si uvedli v předchozím článku.
Poslední hlavičkou, kterou jsme v příkladě použili, je Authorization
. Server používá metodu Digest
jako metodu autorizace. Popis této hlavičky i použité metody je nad rámec článku, takže se jím nebudeme zabývat. Detaily najdete v dokumentech RFC 2616
(HTTP protokol) a RFC 2069
(Přístupová autentifikace Digest).
XML dokument
S příkazem LOCK
musí být spojený XML dokument, popisující charakter a typ zámku. Kořenovým elementem je element lockinfo
, který v elementech lockscope
, locktype
a owner
obsahuje informace o typu zámku a jeho majiteli. Následující tabulka obsahuje seznam elementů a hodnot, které lze při popisu zámku použít:
Element | Popis | Hodnota |
---|---|---|
lockinfo | kořenový element | element lockscope , locktype a owner |
lockscope | určuje rozsah zámku | jeden z prázdných elementů exclusive , shared |
locktype* | specifikuje přístupový typ zámku | prázdný element write |
owner | informace o majiteli zámku | jakýkoliv element např. href |
* lze použít i jiný typ zámku pokud jej zdroj podporuje. Podporované typy zámků zjistíme z hodnoty vlastnosti suportedlock
(resp. vlastností locktype
a lockscope
).
Odpověď serveru obsahuje element prop
a výpis vlastnosti lockdiscovery
, který popisuje vlastnosti zámku (přístupový typ, rozsah působnosti, majitele, čas vypršení zámku, a klíč) v odpovídajících elementech. Hodnota klíče je obsahem elementu locktoken
(resp. href
). Klíč je uveden slovem opaquelocktoken
, které pouze popisuje použité schéma při vytváření klíče.
Pokud celá akce proběhla v pořádku, pak server vrátí stavový kód 200 (OK). V případě, že zdroj je již zamknutý, pak server vrátí stavový kód 423 (Locked).
Jak použít příkaz LOCK pro obnovení zámku (stanovení časový limit je dán opět hodnotou hlavičky Timeout
) ukazuje následující příklad.
UNLOCK
Příkaz UNLOCK
slouží k odebrání existujícího zámku. Klíč se neodesílá prostřednictvím XML dokumentu, ale jako hodnota hlavičky Lock-Token
, jejíž syntaxe je následující:
Lock-Token: <klíč>
Následující příklad ilustruje použití příkazu UNLOCK. Standardní hodnotou stavového kódu, který server v případě úspěšného použití příkazu UNLOCK vrátí, je 204 (No Content).
Odkazy, zdroje
- rfc-2518.rfc-index.com (RFC 2518 – WebDAV)
- rfc-2616.rfc-index.com (RFC 2616 – HTTP 1.1)
- software.formiginal.com/webdav/ (další materiály týkající se WebDAVu)
Mohlo by vás také zajímat
-
Vlastní web pomocí AI už může vytvořit opravdu každý
8. srpna 2024 -
4 tipy, jak na efektivní úsporu při rozjezdu podnikání
3. ledna 2023 -
Proč je důležité tvořit obsah na váš web?
29. srpna 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024