# Gateway

Gataway je zariadenie nachádzajúce sa vo velebnej miestnosti. V miestnosti sa nachádza vždy len jeden gateway. Zabezpečuje komunikáciu medzi volebnými terminálmi a serverom. Gateway obsahuje lokálnu databázu pre hlasy aj tokeny, takže dokáže fungovať aj bez pripojenia k internetu a vie urobiť synchronizáciu na inom mieste, kde je internet dostupný.

Gataway sa má nachádzať na chránenom mieste a pristupovať k nemu smú iba členovia volebnej komisie napríklad pri spustení alebo zastavení volieb alebo nahrávaní autorizačných tokenov na NFC tagy.

# Architektúra

Systém je rozdelený na niekoľko mikroslužieb. Konkrétne sú všetky realizované ako Docker kontajnery a orchestrované pomocou Docker Compose. Každá služba by mala mať na starosti jeden logický celok vo volebnom procese. Na obrázku je znázornená softvérová architektúra gateway-u s prepojeniami medzi mikroslužbami a popisom ich hlavných funkcií.

Nad tým všetkým je nasadený jeden NGINX reverse proxy, cez ktorý prichádza všetka komunikácia na gateway. Iba 3 služby sú volané mimo gateway-u a to voting service pre prijímanie hlasov z volebných terminálov, voting process manager pre obslužnú komunikáciu s volebnými terminálmi a admin frontend bežiaci priamo na dotykovom displeji gateway-u. Cez internet so serverom komunikujú iba synchornization service pre odosielanie hlasov a report manager pre odosielanie zápisnice. Token writer priamo komunikuje s USB NFC zapisovačkou, pomocou ktorej zapisuje nové tokeny na NFC tagy. O tieto tokeny sa pritom stará token manager. Statevector je trochu atypická služba, ktorá iba uchováva stav niekoľkých atribútov a poskytuje ich ostatným službám. Voting porcess manager je síce jeden kontajner, ale dali by sa z neho ešte oddeliť local keys manager, ktorý registruje a spravuje kľúče k terminálom v miestnosti, a report manager, ktorý má na starosti generovanie a distribúciu zápisnice. Gateway DB je kontajner MongoDB, v ktorom beží niekoľko databáz.

# Mikroslužby a ich smerovanie

V nasledujúcej tabuľke uvádzame zoznam mikroslužieb a statických súborv na gateway-i a ich smerovanie za spomínaným reverse proxy.

Service Path
Voting service /voting-service-api/
Synchronization service /synchronization-service-api/
Voting process manager /voting-process-manager-api/
Token manager /token-manager-api/
State vector /statevector/
config.json /statevector/config/config.json
datamodels.yaml /statevector/config/datamodels.yaml