Digital voting system for Abakus' generral assembly
Irrelevant blog post
vote assumes you have a MongoDB-server running on mongodb://localhost:27017/vote and a redis-server running as localhost:6379. To change the URL, export MONGO_URL and REDIS_URL as an environment variable.
# Start MongoDB and Redis, both required for development and production
$ docker-compose up -d
# Install all dependencies
$ yarn && yarn startInitially you will need to create a moderator and or admin user in order to login
# Create a user via the CLI. You are prompted to select usertype.
$ ./bin/users create-user <username> <cardKey>vote uses a RFID-reader to register and activate/deactivate users. This is done to make sure that only people that are at the location can vote. The RFID-reader needs to be connected to the computer that is logged in to the moderator panel. See section about using the card reader further down this readme.
Check docs for the environment variable
ETHEREALif you intend to develop email related features
$ yarn startMONGO_URL- Url to the database connection
default:mongodb://localhost:27017/vote
REDIS_URL- Hostname of the redis server
default:localhost
ICON_SRC(optional)- Url to the main icon on all pages
default:/static/images/Abakule.jpg
COOKIE_SECRET- IMPORTANT to change this to a secret value in production!!
default: in dev:localsecret, otherwise empty
FRONTEND_URL- The site where vote should run
defualt:http://localhost:3000
FROM- The name we send mail from
default:Abakus
FROM_MAIL- The email we send mail from
default:[email protected]
SMTP_URL- An SMTP connection string of the form
smtps://username:[email protected]/?pool=true
- An SMTP connection string of the form
GOOGLE_AUTH- A base64 encoded string with the json data of a service account that can send mail.
See app.js and env.js for the rest
For a production deployment example, see deployment in the
deploymentfolder
$ yarn build
$ ICON_SRC=https://some-domain/image.png NODE_ENV=production GOOGLE_AUTH=base64encoding yarn startMake sure you have enabled Experimental Web Platform features and are using Google Chrome. Experimental features can be enabled by navigating to: chrome://flags/#enable-experimental-web-platform-features. Please check that the USB card reader is connected. When prompted for permissions, please select the card reader (CP210x).
When using the card readers on a linux based system there can be permission problems with google-chrome. Chrome needs access to the ports, and often the ports are controlled by another group, so chrome cannot use them. Therefore you must do one of the following:
- Run google-chrome as
root
$ sudo google-chromeOR
- Add your user to the
dialoutgroup.- Check what group the tty(USBPORT) is:
$ ls -al /dev/ttyUSB* | cut -d ' ' -f 2`- Check what groups your user is added to:
$ groups
- Normally the
ttyis in thedialoutgroup, so add your user to that group with:
$ sudo usrmod -a -G dialout $USER
You need to sign in and out to get the new privileges!
vote uses mocha for the backend tests and cucumber.js/protractor for the frontend tests. To run them all you can do:
$ yarn test
# To run in headless mode:
$ HEADLESS=true yarn testWe have a list of every occasion vote has been used. If you or your organization use vote for your event we would love if you made a PR where you append your event to the list.
The list is located at ./usage.yml. Just create a new entry at the bottom. Then run yarn lint to see if your YAML is correct.
MIT © webkom, Abakus Linjeforening