GithubHelp home page GithubHelp logo

server's Introduction

org.ballots

server's People

Contributors

agao2 avatar mtcrowley avatar samulus avatar

Watchers

 avatar

server's Issues

UML diagram

As a developer, I would a UML diagram to document show the object structure of the application

Acceptance criteria:

  • a uml diagram showing object designs for implementing the logic.

Client/Server API Mining of new blocks

As a developer I want API for the block chain to ensure easy access

Needs to provide some form of authentication in order to mine blocks.
Needs authentication as well to cast votes.
Needs an endpoint that allows any user to view the block-chain.

User Authentication

As a server I want to be able to authenticate registered users upon log in.

  • Verify that all log in request comes through server
  • Verify that a username and password pair matches to one in the database
  • Apply a limit to number of password attempts

Blockchain

As a developer, I want the votes to be stored on a block chain to ensure that they are immutable once added.

  • Create a single node block chain for prototyping
  • can mine new blocks for this block chain
  • Users can verify their own votes on the block chain
  • I can add votes to each block

API draft

As a developer I want an API draft to plan what functionalities we need to expose

Acceptance criteria:

  • first draft of API requirements
  • map specific functionalities to end points
  • for review, consider if we're missing any critical functionalities

Encryption/Decryption of votes

As a developer, I want all votes to be encrypted using a set of user keys so that the client can remain anonymous.

  • Server side logic to encrypt the user who cast the vote
  • Server side logic to encrypt the selected candidate
  • Able to retrieve and release private keys to the selected candidates to tally votes when election ends

Search Bar Functionality

As as user I want to be able to utilize the search bar to filter elections in real time as I type so that I can find elections to participate in easier.

  • There is a search bar in every tab. Have the search bar filter the elections based on the name

Note : The place to start doing is most likely on the electionList component and put an onChange listener on the DOM element.

Developer Standardized Client / Server API

As a developer, I want the ability to communicate with the server using a restful API:

I've started working on a mock RESTFul API using CherryPy to facilitate communication between the client and the server.

We need to agree upon a standardized API so that the frontend and backend of the application can be developed independently of each other. To inspire ideas here is a list of basic functionality we need:

  • Registering to Vote
  • Casting a Vote
  • Getting the Blockchain

etc. Post in this thread if you have more ideas.

Add Clock to Election View

As a Voter, on Upcoming Election view add a clock that show sthe user when and the election will begin. On the Current Election View add a clock that show the time remaining to submit votes.

Database

As a developer I would like a database that can be accessed on the serverside so that I can store and verify information.

  • List of information that needs to be recoreded in a comment below

Workflow integration test on intermediary server

As a developer I want a unit test (integration test) that demonstrates everything the user would be able to do using the front end UI .
Below is the tasks that should be done:
- 1 .Send request to server to create an election with user_a
- 2 .user_b joins the election, receives a set of public private keys
- 3 .user_b downloads a ballot schema for this particular election
- 4 .user_b fills out the ballot schema with their voting choices
- 5 .user_b casts their ballot cementing it in the voting ledger / db
- 6. user_b redownloads the blockchain / db and manually verifies that their
encrypted ballot was included.

Loading Indicator

As a user I want a loading indicator to be extended to all tabs

Acceptance Criteria :

  • Spinner shown in both the election results tab and upcomming election tab while awaiting response from request

Create Election Integration

As a user I want my created elections on the front end forwarded to the API server so that voters can vote in them

Acceptance Criteria :

  • On the API server, accept a post request with details about the election
  • When a user hits a button like create election, submit this request

QR Code

As a user I want the option to manage a private key that I used to sign my vote.

Acceptance Criteria :

  • generate a key on vote
  • export key as a QR code for better management
  • option to import key into web app via web cam

Create transactions to facilitate election workflow

As a developer I want all blockchain functionalities through as self-defined transaction

Functions for the following items

  • Create Organizer
  • Create Voter
  • Create Election
  • Create Ballot (subscribe)
  • Modify unmarked exiting ballot (vote) and set "marked" to true

Hyperledger

As a developer I want to store my votes on a distributed ledger to ensure immutability.

  • use hyperledger composer to define a business network
  • set up fabric and install composer runtime
  • start network and deploy business network
  • expose rest server and have it live

System Integeration

As a developer, I would like the user interface on the front end to have functionalities behind the components so that users can interact with the system.

  • Deploy server components, the intermediary server that essentially proxies request to the hyperleder server.
  • Integrate the front end with the server side components, adding in functionalities for the front end.
  • The front end should be able to view all the ballots to an election in which the user holds a subscription for.
  • The submit button should save the checked options to the hyperledger by making a request to the intermediary server.

Note : As more front end components are added, more items will need to be integrated. This is just the initial set of functionalities that are being tied into the front end.

Front end workflow

As a voter I want to be able to do all of the following using the front end web application.

Acceptance Criteria:

  1. Login
  2. Join an election
  3. Cast my vote on an election
  4. See past, current, and upcomming elections
  5. View results of passed elections

Some context: Number 3 is essentially finished, 1,2,4 and 5 needs to be done. Upon logging in, the system should remember that the user has logged in and treat it as a session for some time so a user does not have to log in. View the ReactApp improvements issue to view some general usability improvements.

These items are on the front end, the backend BallotBlockAPI need to have the same functionality implemented in order to hook up the front end.

Hyperledger Access Token

As a developer I would like the hyperledger composer rest server to support authentication so we can limit client access.

Acceptance Criteria:

  • Using passport-github configure the rest server to accept an access token on a per request basis
  • Requests without an access token should be denied
  • Using github, anyone in our github organization should be able to authenticate into the hyperledger rest server and retrieve the access token.

Note : The tutorial at https://hyperledger.github.io/composer/integrating/enabling-rest-authentication might be particulary helpful.

Key Mapping

As a user I would like to be able to the hit the enter key on my key board in lew of hit the the submit button on certain forms

AC:

  • When I hit enter after typing my password I login

Documentation

As a developer I want documentation to for hyperledger composer

Acceptance Criteria:

  • document the structure of all objects and what they mean
  • document how to use the access token
  • document data is being passed in and out
  • any other general stuff that may be userful can be added too

URL Routing

As a user I want to be able to know where I am located on the site by the URL.

Acceptance Criteria:
The url displays a path that indicates which page you are on

Organizer view and signup view (mockup)

  • Interface for organizer for the following functionalities
  1. ) Create election
  2. ) View results
  • Add another tab on the voter page for voters to search and join for an elections. For now all users can join any elections.

Poster Final

As the developer we want a poster to demonstrate the work done through a poster.

Acceptance Criteria:

  • Include Title of project
  • Include list of team members and project sponsor
  • Project Abstract : an overview of the project in roughly 300 words
  • List project requirements
  • Design and Justification section
  • Results
  • Future Work
  • All of the above listed sections should contain a decent amount of detail excluding the title and list of team members of course

Api Server - Create Election

Add Functionality to the API server end point 'api/election/POST' to alow for creating new elections on the block chain.

Database

As a developer I would like a SQL database to store user account information outside of the blockchain.

Create a database for account information.
Currently a users information are stored using a SQLlite in memory, in order for it be more reliable and persistence switch the source to a SQL database deployed somewhere.

API Server Access token

As a developer I want the API server to validate an access token on a per request basis

Acceptance Criteria:

  • Have the registration server generate an access token for the user on the front end when loggin in
  • The server should than validate that token
  • The token should include the account_type and username so the server can use that token to identify the user
  • The token should be encrypted symmetrically as it will be stored in the browser.

SSL Support

As a user I would like SSL support so that I can have secure transmissions of data to the server.

We should integrate SSL support so that users can register for accounts and have secure transmissions between their clients and the server without being susceptible to MITM attacks.

Client Side Session

As a user I want to stay logged in for a certain amount of time (15 minutes?) after I have logged in with my username and password.

Acceptance Criteria:

  • Once a user has logged in, keep that user authorized
  • Once the client side session expires , any buttons that gets clicked should redirect to login page
  • On the top right, instead of a welcome page, have a drop down box that allows the user to logout

Front end ReactApp improvements

Usability improvements to the design on the front end application. The front end should have the following

  • Submit button on the bottom of the page used for submitting votes needs to be made smaller.
  • Confirmation page when user hits submit, asking for final confirmation before sending the vote to the blockchain.
  • Remove radio buttons, rather just highlight the entire row when a user clicks anywhere inside that row. The highlighted row will count as the selected candidate.
  • On the top right, where it displays username. Rather than just having the username, put some sort of welcome message in it. Furthermore, turn it into a drop down box that allows the user to navigate to a page to change their password as well as a sign out option.
  • Have some form of " loading" signal as requests are being made and responses are in the processes of coming back. The context of this is so users don't go clicking around which might interrupt the flow of the requests.

Reorganize git repo setup

  • Finalize our n tier architecture into our document
  • A separate repo for each tier in the n tier architecture of our application

Election Result Integration

As a developer I would like election results to be returned from the API server so that they can be forwarded to the front end

Acceptance Criteria:

  • Pull results of past elections from the API server
  • Use those results to construct the charts so they can be displayed to the voter.

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.