Giter Club home page Giter Club logo

voteit's Introduction

VoteIT Build Status

A voting system for student Division Meeting (Sektionsmöte).

Features

  • Anonymous voting.
  • Allows set amount of options to be accepted (eg, allow 3 options out of 5 to be accepted). So if the amount of allowed options is 2 and the options are "Agda", "Haskell" and "Erlang" both "Agda" and "Haskell" could be chosen. (personinval där en kommitté har limiterat antal platser)

Physical requirements

  • Scissor
  • Own printer

Technical requirements of the project

  • Anonymity
  • Security for man in the middle.
  • Security for session hijacking.

Usage

Setup Instructions

User Instructions

Server on heroku needs to be kept alive (sleeps after 30 mins of inactivity by default) using something like the following script:

SERVERNAME="sektionsmote-2015-12-07"
while true; do
	curl -s https://${SERVERNAME}.herokuapp.com/health-check
	sleep 60
done

Development

Software requirements

  • node
  • npm

Build

  • npm start
  • gulp

How to use Docker (optional)

  • docker build -t cthit/voteit .
  • docker run cthit/voteit

voteit's People

Contributors

bark avatar dr-horv avatar edholm avatar jonathanthunberg avatar kirayatail avatar krabban91 avatar lindskogen avatar mattiasnilsen avatar portals avatar sveningsonrobin avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

voteit's Issues

Warn when clicking "Start session"

Accidentally clicking this button after having already generated codes will cause a lot of wasted time. The same applies for "Start session" when creating a new voting session

TL;DR: I want a confirmation popup

Investigate usability concerns

For example, long codes should be formatted with dashes in between each group of n digits:

geaj-du3e-28eb-87ga-83vd

And the user input method should be customized for this:

____-____-____-____-____

How are we preventing people for buying and selling votes?

A common problem with digital voting (especially if not done through dedicated hardware) is the vastly increased possibility for buying votes, if you can't identify that the physical person with authority to cast the vote is in fact the person casting the vote you also allow for vote buying with both ease and confirmation.

If a fraudulent party intend to buy ones vote in order to cast an illicit vote.

  • What prevents one from selling ones access code for third party use?
    • Access codes could easily be distributed through various digital communication services.
    • A potential buyer would gain access to confirmation that vote is in fact cast to their intended precipitant.
  • What prevents one from letting a third party buy access to the electors computer and cast the vote
    • The third party could use various remote control principles such as VNC, RDP, X11 forwarding, SSH, etc.

These are just some of many concerns surrounding electronic elections, especially online/network-based ones without dedicated hardware. If digital network based voting paves the path for increased feasibility in electoral fraud, then do we really want to adopt this technology?

I am not yet convinced that network or even digital voting at all is a good idea.

Test vote logic thoroughly

In routes.js:

if(server.codeAnsweredQuestion()) {
res.end('anweredError');
} else if(server.validAnswers(answers)) {
server.register(code, answers);
res.end('success');
} else {
res.end('corruptError')
}

Unable to vote

Pressing the number keys does nothing! NOTHING I TELL YOU!

Tried Firefox and Chrome. Nothing logged in the js console.

Printouts are inconsistent

Printing with number of codes per user being something other than 20 breaks formatting and causes code lists to be split by page breaks.

Furthermore, printing using Google Chromes printing interface causes the same thing to happen even with 20 codes per user.

Person leaving early may vote remotely

A person who attends the beginning of a meeting and is issued a code card may leave the meeting and keep the card, still knowing the URL and agenda index.

Solution proposal:
Provide a second factor of auth - a common token which is replaced for each vote and only displayed in the meeting room. By revealing that token only when the vote takes place, each voter must be present or have a rogue accomplice present to transmit the code.

Write a Java wrapper for the server

With a nice GUI. Could have some of the following features:

  • A list of connected sockets
  • A log over incoming answers, connections etc.
  • GUI for handling questions, accessCodes, restart, etc.

Allow more keys than 1-9

When posting an answer via keypresses we want to be able to have more than 9 different answers at a time. Start using q,w,e,r,t,y etc. after 1-9 have been used.

Error message for already used code

When trying to vote with a code that has already been used the error message is still "invalid code" . Could be useful if the error message could indicate if there's a spelling error or a already used code.

Display aggregated vote count data for admin

Allow admin to se summerized vote data. The amount of votes for each candidate.
To easier verify the result and allow draws (if not "personval") in a simple sense.

Probably to be done together with #43

Final results are incorrect

In a hypothetical scenario where one option receives between 100 and 199 votes, the option is ordered in the results as having 1 vote. This issue could potentially be relevant to the results of a hypothetical election.

Everything is sent in plaintext allows for sniping access codes

When enter first entering the access code it is sent in plain text to server. This enables for malicious users to automatically grab access codes and vote before the intended user has the possibility to do so.

Also since votes are sent in plain text which allows for users to count votes and gather statistics on the result before presented.

This is especially true if any user is connected to nomad, since the network is unprotected.

We propose the use of public encryption scheme with padding to hide the answers of the users.

// @Edholm && @Rawa

Heroku timeout

When no web requests are made to heroku the instances "sleeps" and the state is lost and new code have to be generated.

Use different method for access code generation

At the moment we generate our own access codes using Math.random known to be predictable as shown in: http://franklinta.com/2014/08/31/predicting-the-next-math-random-in-java/

We should make use of some hashing method such as base64 to generate the accessCodes and include a secret part which should be unkown to others aswell as perhaps include the time of generation so:

hash64(accessCodePart1 ++ SECRET ++ accessCodePart2 ++ TimeRightNow)
-> YWNjZXNzQ29kZVBhcnQxU0VDUkVUYWNjZXNzQ29kZVBhcnQyMTQyODIzNzk2OA==

Save the enviroment

When generating new codes, the votesession should reset to not print unusable codes.

You cant vote for vacants

In app.js the amount you can vote for i set on votesCount=Array.apply(null, Array(optionsarr.length)).map(function (x, i) { return 0; }); and should have vacoptions length too.

Sneak a peek on other users votes

As the UI is designed today it is (in my opinion) to easy to sneak a peak on other users (in front of you) screens during voting. Is there any plans of using forbidden color combinations (blue, black) to make it harder to see, or any similar solutions. Hopefully this is something we don't need, everyone is hopefully honest at IT.

Make commands generic

All commands must have a list of expected parameter types, so that the server can convert all parameters to the correct type before sending them to the command-methods.

Must also check for basic things like commas where there aren't supposed to be any.

Automatic checks that makes sure that each command get's enough parameters.

The symbols Il1 are very similar

Why don't we remove the characters I, L, 1 (both lower and uppercase) (Lima, India, One) from the generated voting codes. It is easily possible to get the mixed up. The reduced security is minimal in comparison to the increased usabillity.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.