Electronic Voting Protocol
The code is laid out as a monorepo with the following subdirectories:
/server
- Code for REST API server/mediator
- Code for the collector mediator/collector
- Code for collector/notifications
- Code for websocket notification server/frontend
- TypeScript code for single-page application
See the README.md
file in each subdirectory for directions on compiling and running the code.
- API Server - REST server that manages various website details such as user accounts, election details, registrations, etc.
- Collector Mediator - Facilitates WebSocket communication between the different collectors
- Collectors - Verifies the ballots, uses WebSocket messages for communication
- Notification Server - Pushes real-time updates to the frontend using WebSocket messages
- Frontend Client - Single-page application running in the browser
Authentication and authorization is handled using JSON Web Tokens. The API server, mediator, and collectors connect to PostgreSQL Databases for storage. NGINX is used as a gateway between the backend services and the frontend. NGINX also communicates with the mediator to proxy a collector UUID directly to the service (dotted line). See the frontend README.md file for details on properly configuring NGINX.
The TruBallot frontend, backend, collectors, and notification server have been programmed by Bryan McClain for his senior capstone project. The voting protocol comes from a 2017 Paper by Zou et al. Bryan worked with Dr. Zou (capstone advisor) during this project to ensure the math was implemented correctly. The TruBallot icon and logo were designed by Nathan McClain.