Preskočiť na obsah

Cloudová záloha

Cloudová záloha v aplikácii Pozor Dozor slúži na manuálne uloženie a obnovenie dátového priečinka aplikácie cez cloudové úložisko. Funkcia je voliteľná a používa sa iba vtedy, keď je cloudový režim povolený v konfigurácii aplikácie.

Technicky je cloudová záloha riešená triedami CloudBackupService a CloudBackupResult. Samotné spustenie cloudovej operácie zabezpečuje používateľské rozhranie cez triedu AppRobot.


Základný princíp

Aplikácia nepracuje s cloudom priebežne ani automaticky. Cloudová záloha je manuálna operácia, ktorú používateľ spustí z menu aplikácie.

Používateľ má k dispozícii dve základné akcie:

Akcia Význam
Uložiť na cloud odošle lokálne súbory aplikácie na cloud
Načítať z cloudu stiahne súbory z cloudu do lokálneho dátového priečinka

Manuálna cloudová záloha

Cloudová záloha nie je automatická synchronizácia. Aplikácia sama nerozhoduje, kedy má prepísať lokálne alebo cloudové dáta. Používateľ spúšťa upload aj download ručne.

Načítanie z cloudu môže prepísať lokálne súbory

Pri načítaní z cloudu sa lokálne súbory v dátovom priečinku aplikácie môžu nahradiť cloudovou verziou. Preto je dôležité, aby používateľ vedel, ktorá verzia dát je aktuálna.


Povolenie cloudového režimu

Cloudové položky v menu sa zobrazujú iba vtedy, keď je v konfigurácii zapnutý cloudový režim.

Informácia o používaní cloudu je uložená v konfiguračnom súbore config.cfg pod kľúčom usingCloud.

Konfiguračný prepínač

Ak je hodnota usingCloud nastavená na true, aplikácia v menu zobrazí položky Uložiť na cloud a Načítať z cloudu. Ak je hodnota false, aplikácia funguje iba lokálne.


Kód školy

Cloudová záloha používa hodnotu schoolID, ktorá je uložená v konfigurácii aplikácie. V tomto riešení slúži schoolID ako identifikátor cloudového priestoru.

Hodnota sa zadáva pri prvom spustení aplikácie alebo neskôr v nastaveniach.

Úloha schoolID

Hodnota schoolID určuje, s ktorým cloudovým priestorom má aplikácia pracovať. Pri cloudovej zálohe sa používa na zostavenie vzdialenej WebDAV adresy.

schoolID je citlivý údaj

Ak schoolID slúži ako prístupový token k verejnému cloudovému zdieľaniu, nemal by sa zverejňovať. Osoba s týmto kódom môže získať prístup k príslušnému cloudovému priestoru.


WebDAV endpoint

Cloudová záloha používa verejné WebDAV rozhranie Nextcloudu. Vzdialená adresa sa skladá z pevného základu a hodnoty schoolID.

Základný tvar adresy je:

https://cloud.milpet.eu/public.php/dav/files/<schoolID>/

Použitie WebDAV

WebDAV umožňuje aplikácii nahrávať a sťahovať súbory pomocou štandardných HTTP požiadaviek. Upload používa metódu PUT, download používa GET a zoznam vzdialených súborov sa získava pomocou PROPFIND.


Trieda CloudBackupService

Trieda CloudBackupService zabezpečuje samotnú komunikáciu s cloudovým úložiskom. Obsahuje logiku pre upload, download, zostavenie vzdialenej adresy, validáciu názvov súborov a spracovanie WebDAV odpovedí.

Zodpovednosť triedy CloudBackupService

Trieda CloudBackupService načíta kód školy, pripraví vzdialenú WebDAV adresu, prejde lokálny dátový priečinok aplikácie, nahrá alebo stiahne súbory a vráti výsledok operácie ako objekt CloudBackupResult.


Výsledok cloudovej operácie

Výsledok cloudovej operácie reprezentuje trieda CloudBackupResult.

Táto trieda obsahuje počet spracovaných súborov a kód školy použitý pri operácii.

Položka Význam
fileCount počet nahratých alebo stiahnutých súborov
schoolID kód školy použitý pri cloudovej operácii

Jednoduchý výsledkový objekt

CloudBackupResult je jednoduchá dátová trieda. Slúži na odovzdanie informácie o tom, koľko súborov sa pri cloudovej operácii spracovalo.


Upload dát na cloud

Upload odošle súbory z lokálneho dátového priečinka aplikácie na cloud.

Aplikácia prejde dátový priečinok a nahrá iba bežné súbory. Priečinky sa nenahrávajú.

Zjednodušený postup uploadu

Pri uložení na cloud aplikácia načíta schoolID, zostaví vzdialenú WebDAV adresu, otvorí lokálny dátový priečinok, prejde súbory v tomto priečinku a každý vhodný súbor odošle na cloud pomocou HTTP metódy PUT.


Súbory ignorované pri uploade

Pri uploade sa zámerne ignorujú dočasné súbory, ktoré nemajú byť súčasťou zálohy.

Prípona Dôvod ignorovania
.download dočasný súbor vznikajúci pri sťahovaní
.tmp dočasný pracovný súbor

Filtrovanie dočasných súborov

Do cloudovej zálohy sa majú dostať iba reálne pracovné súbory aplikácie. Dočasné súbory môžu byť neúplné alebo iba pomocné, preto sa pri uploade vynechávajú.


HTTP upload

Každý súbor sa na cloud nahráva samostatnou požiadavkou PUT.

Pri úspešnom nahratí aplikácia akceptuje odpovede HTTP 200, 201 alebo 204.

Stav Význam
200 požiadavka bola úspešne spracovaná
201 súbor bol vytvorený
204 požiadavka bola úspešná bez tela odpovede
Neúspešný upload

Ak server vráti iný stav než očakávanú úspešnú odpoveď, aplikácia vyhodí chybu. Chybové hlásenie obsahuje názov súboru, HTTP stav a odpoveď servera.


Download dát z cloudu

Download stiahne súbory z cloudového úložiska do lokálneho dátového priečinka aplikácie.

Pred samotným sťahovaním aplikácia najprv získa zoznam vzdialených súborov pomocou WebDAV požiadavky PROPFIND.

Zjednodušený postup downloadu

Pri načítaní z cloudu aplikácia načíta schoolID, zostaví vzdialenú WebDAV adresu, cez PROPFIND získa zoznam vzdialených súborov, overí ich názvy a každý bezpečný súbor stiahne pomocou HTTP požiadavky GET.


WebDAV PROPFIND

Požiadavka PROPFIND slúži na získanie zoznamu položiek vo vzdialenom cloudovom priečinku.

Aplikácia používa hĺbku Depth: 1, čo znamená, že načíta položky priamo v danom priečinku, ale neprechádza vnorené podpriečinky.

Zoznam súborov

Odpoveď WebDAV servera obsahuje XML dokument so zoznamom položiek. Aplikácia z neho vyberie iba súbory a priečinky ignoruje.

Download nepoužíva podpriečinky

Cloudová záloha pracuje so súbormi priamo v jednom vzdialenom priečinku. Neprechádza vnorené adresáre. Je to jednoduchšie a bezpečnejšie riešenie pre malý dátový priečinok aplikácie.


Spracovanie XML odpovede

Odpoveď z PROPFIND je XML dokument. Aplikácia ho spracuje cez DocumentBuilderFactory.

Pri spracovaní XML sú vypnuté nebezpečné vlastnosti, ktoré by mohli viesť k problémom typu XXE.

Bezpečnejšie XML spracovanie

XML parser má zakázané DTD a externé entity. Tým sa znižuje riziko, že by škodlivá alebo neočakávaná XML odpoveď mohla spôsobiť načítanie externých zdrojov.

XML z cloudu sa nesmie spracovať bez ochrany

WebDAV odpoveď pochádza zo vzdialeného servera. Preto je vhodné XML parser nastaviť bezpečne a nepovoľovať funkcie, ktoré aplikácia nepotrebuje.


Validácia názvov súborov

Pri sťahovaní zoznamu vzdialených súborov aplikácia kontroluje, či názvy súborov neobsahujú nebezpečné znaky alebo cesty.

Bezpečný názov súboru nesmie obsahovať lomky, spätné lomky ani hodnoty . alebo ...

Ochrana pred path traversal

Aplikácia povoľuje iba jednoduché názvy súborov. Tým zabraňuje tomu, aby vzdialený súbor mohol byť uložený mimo dátového priečinka aplikácie.

Neplatné názvy súborov sa ignorujú

Ak názov vzdialeného súboru nie je bezpečný, aplikácia ho nestiahne. Je to ochrana pred prepísaním súborov mimo určeného dátového priečinka.


Bezpečné ukladanie stiahnutých súborov

Pri sťahovaní sa súbor najprv uloží ako dočasný súbor s príponou .download.

Až po úspešnom stiahnutí sa tento dočasný súbor presunie na finálnu cestu. Aplikácia sa najprv pokúsi použiť atomický presun. Ak ho súborový systém nepodporuje, použije obyčajné nahradenie súboru.

Dočasný súbor pri downloade

Zápis do .download súboru znižuje riziko poškodenia existujúceho súboru. Ak by sa sťahovanie prerušilo, pôvodný súbor sa nemusí hneď prepísať neúplným obsahom.

Pri úspešnom downloade sa súbor prepíše

Po úspešnom stiahnutí sa dočasný súbor presunie na finálne miesto. Ak tam už existuje súbor s rovnakým názvom, môže byť nahradený cloudovou verziou.


Sanitizácia kódu školy

Pred použitím v URL sa hodnota schoolID očistí. Aplikácia odstráni lomky, spätné lomky, pokusy o rodičovskú cestu a nepovolené znaky.

Povolené zostávajú iba bežné znaky vhodné pre token, napríklad písmená, číslice, bodka, podčiarkovník a pomlčka.

Očistenie schoolID

Sanitizácia bráni tomu, aby sa schoolID použil ako nebezpečná časť URL cesty. Aplikácia z neho odstráni znaky, ktoré by mohli meniť štruktúru vzdialenej adresy.

Neplatný kód školy

Ak po očistení zostane kód školy prázdny, aplikácia cloudovú operáciu nespustí a vyhodí chybu.


HTTP klient

Na komunikáciu so serverom používa aplikácia Java HttpClient.

Klient má nastavený časový limit pripojenia, povoľuje bežné presmerovania a používa vlastný User-Agent podľa názvu aplikácie.

Nastavenie Význam
timeout pripojenia ochrana pred príliš dlhým čakaním
redirecty podpora bežných presmerovaní servera
User-Agent identifikácia aplikácie voči serveru

Timeouty

Timeouty sú dôležité preto, aby aplikácia nečakala donekonečna pri probléme so sieťou alebo cloudovým serverom.


Cloudové operácie a používateľské rozhranie

Cloudové operácie sa spúšťajú z triedy AppRobot. Keďže upload alebo download môže trvať dlhšie, operácie bežia vo vlastnom vlákne.

Po dokončení sa výsledok zobrazí používateľovi späť v používateľskom rozhraní.

Operácie mimo hlavného vlákna

Upload a download bežia mimo hlavného používateľského vlákna. Vďaka tomu by aplikácia nemala počas cloudovej operácie zamrznúť.

Návrat do Swing vlákna

Výsledné hlásenie sa zobrazuje cez SwingUtilities.invokeLater, aby sa používateľské rozhranie aktualizovalo bezpečne zo správneho vlákna.


Potvrdenie pred cloudovou operáciou

Pred uploadom aj downloadom sa aplikácia používateľa pýta na potvrdenie.

Pri uložení na cloud upozorňuje, že cloudová záloha bude prepísaná aktuálnymi lokálnymi súbormi. Pri načítaní z cloudu upozorňuje, že lokálne súbory môžu byť prepísané cloudovou verziou.

Cloudové operácie môžu prepísať dáta

Upload môže prepísať staršiu cloudovú verziu lokálnymi dátami. Download môže prepísať lokálne dáta cloudovou verziou. Preto aplikácia pred operáciou vyžaduje potvrdenie používateľa.


Chybové situácie

Cloudová záloha môže zlyhať z viacerých dôvodov. Môže ísť o chýbajúci alebo neplatný kód školy, problém s internetovým pripojením, nedostupný server, neúspešný HTTP stav alebo problém so zápisom súborov.

Typické príčiny chyby

Pri chybe cloudovej zálohy je vhodné skontrolovať internetové pripojenie, správnosť kódu školy, dostupnosť cloudového servera a oprávnenia na zápis do dátového priečinka aplikácie.

Chyba neznamená úspešnú zálohu

Ak cloudová operácia skončí chybou, používateľ by nemal predpokladať, že všetky súbory boli správne uložené alebo obnovené. Je potrebné riadiť sa hlásením aplikácie.


Súbory zahrnuté do cloudovej zálohy

Cloudová služba pracuje s dátovým priečinkom aplikácie. Nahrávajú sa iba bežné súbory, ktoré nie sú ignorované ako dočasné.

Súbor Typická úloha
teachers.csv zoznam učiteľov
calendar.csv nastavenie kalendára
config.cfg konfigurácia aplikácie
teachers.pdf pracovný PDF výstup
teachers_preview.png pracovný PNG náhľad

Najdôležitejšie súbory

Z pohľadu obnovy dát sú najdôležitejšie teachers.csv, calendar.csv a config.cfg. PDF a PNG sú výstupné súbory, ktoré možno vygenerovať znova.


Obmedzenia riešenia

Cloudová záloha je navrhnutá ako jednoduchá manuálna záloha pre malú desktopovú aplikáciu. Nie je to plnohodnotná synchronizačná služba s históriou verzií, riešením konfliktov alebo súbežnou prácou viacerých používateľov.

Bez riešenia konfliktov

Ak viac počítačov pracuje s rovnakým cloudovým priestorom, aplikácia automaticky nerieši konflikty medzi verziami. Posledný upload alebo download môže prepísať inú verziu dát.

Vhodné používanie

Cloudovú zálohu je vhodné používať ako manuálne uloženie aktuálneho stavu alebo ako spôsob prenosu dát na iný počítač. Pri práci z viacerých zariadení je potrebné dávať pozor na to, ktorá verzia dát je najnovšia.


Zjednodušený tok uploadu

Upload dát možno zjednodušene opísať takto:

používateľ zvolí Uložiť na cloud
aplikácia požiada o potvrdenie
načíta sa schoolID
zostaví sa WebDAV adresa
prejde sa lokálny dátový priečinok
ignorujú sa .download a .tmp súbory
každý vhodný súbor sa odošle cez PUT
aplikácia zobrazí výsledok operácie

Výsledok uploadu

Po úspešnom uploade aplikácia zobrazí, koľko súborov sa podarilo nahrať na cloud.


Zjednodušený tok downloadu

Download dát možno zjednodušene opísať takto:

používateľ zvolí Načítať z cloudu
aplikácia požiada o potvrdenie
načíta sa schoolID
zostaví sa WebDAV adresa
cez PROPFIND sa získa zoznam súborov
názvy súborov sa overia
súbory sa stiahnu cez GET
najprv sa uložia ako .download
po úspechu sa presunú na finálne miesto
aplikácia zobrazí výsledok operácie

Výsledok downloadu

Po úspešnom downloade aplikácia zobrazí, koľko súborov sa podarilo stiahnuť z cloudu.