-
Notifications
You must be signed in to change notification settings - Fork 9
Home
Il programma si basa sull'architettura client/server utilizzando un API rest per la comunicazione fra client e server.
Il server, costruito tramite il framework Flask gestisce l’attivazione degli utenti e le HTTP Requests da parte del client (metodi GET, POST, PUT, DELETE).
Il client a sua volta è diviso in due parti ovvero client_cmdmanager che rappresenta l'interfaccia con l'utente finale e client_daemon che si occupa del monitoraggio di una cartella, della sincronizzazione con il server e di trasmettere i messaggi ricevuti dal cmdmanager instradandoli al server se necessario.
Il client_cmdmanager a 2 modalità:
- modalita interattiva avviando il programma con il comando python
client_cmdmanager.py
si potrà eseguire i comandi 'register', 'activate', 'login' e 'recoverpass', per dettagli relativi ai comandi guardare l'help relativo chiamabile in modalità interativa scrivendohelp <nomecomando>
- la seconda modalita da linea di comando permette di lanciare comandi direttamente da console, per usarla bisogna scrivere
python client_cmdmanager -ni -<nomecomando> <parametricomando>
per informazioni aggiuntive sui comandi da console lanciare il client_cmdmanager in modalita helppython client_cmdmanager.py
#client_daemon.py Il file client_daemon invece è composto principalmente dalla classe daemon che contiene al suo interno tutte le funzionalità per il monitoraggio e la comunicazione con client_cmdmanager e la sincronizzazione.
All'avvio l'inizializzazione avviene controllando che i path relativi alla sharing_path e al config siano validi, in caso contrario o nel caso non siano presenti valori custom verrano inizializati ai valori di default, cioè:
- sharing_path --> ~username/sharing_folder
- cfg_path --> ~username/.PyBox/daemon_config
Se il cfg è corrotto/non valido viene sovrascritto con le impostazioni di default.
Inizialmente il daemon parte non autenticato e finchè non viene registrato e autenticato un utente sul server non verrà fattà alcuna sincronizzazione con il server. In caso l'utente esista già sul server è possibile effettuare il login attraverso l'apposito comando dal client_cmdmanager.py
Le operazioni di registrazione, autenticazione e login vengono sempre effettuate attraverso il client_cmdmanager e il daemon oltre a trasmettere il messaggio al server intercetta la risposta ricevuta dal server e nel caso abbia avuto successo utilizza i dati contenuti nella risposta per attivare l'utente.
Lo stato attivo del client_daemon viene salvato sul cfg quindi al successivo riavvio il daemon rimarrà attivo senza necessitare autenticazioni successive.
N.B: Quando il daemon è attivato non potranno più essere fatti operazioni di registrazione, autenticazione e login a meno che non si cancelli il file cfg.
Dal momento che l'utente è attivato il daemon inizia a monitorare la cartella relativa al path 'sharing_path' e mantiene aggiornata la sincronizzazione con il server utilizzando il metodo sync_with_server che viene effettuato ogni 3 secondi circa.
In caso sia necessario effettuare modifiche sulla cartella locale viene usato il metodo skip della classe SkipObserver per evitare un ciclo infinito di modifiche locali che rimbalzano tra client e server.
La logica relativa alla gestione degli eventi sui file della cartella monitorata dal daemon è contenuta nei metodi 'on_created', 'on_moved', 'on_deleted', 'on_modified' i quali a seconda del caso eseguono le modifiche agli snapshot necessarie al caso e inviano le modifiche da effettuare al server.
Per gestire le modifiche ai file vengono creati 2 snapshot, uno relativo alla cartella sharing_path chiamato 'client_snapshot' mentre l'altro relativo solo ai file ricevuti in modalita share chiamato 'share_snapshot'.
Con la modalità share è possibile condividere dei file agli altri utenti in modalità esclusivamente READ only. Cioè gli utenti aggiunti allo share non potranno modificare la cartella di share e in caso lo facciano i file verranno ripristinati alla versione contenuta sul server. Solo il proprietario dello share può modificare la sua relativa cartella di share.
All'interno della cartella di share si avrà una cartella relativa a ogni share a cui si è stati aggiunti con il nome dell'account proprietario.
Per informazioni aggiuntive sullo share vedere l'API relativa.
Le informazioni relative alle operazioni effettuate dal client_daemon vengono salvate in un file di log dentro la cartella ./log. E' possibile modificare il dettaglio dei messaggi di log su file o su console, per maggiori dettagli controllare l'help scrivendo:
python client_daemon.py -h
Il server è stato sviluppato in un solo modulo e comprende 5 classe che gestiscono gli utenti e i loro files seguendo la struttura delle API. Tutti i dati relativi agli utenti vengono salvati in un file JSON 'userdata.json' la cui struttura viene descritta nel file 'user_data_structure.txt'.