LifeFiles

==============

The LifeFiles application is secure document storage solution designed to help people experiencing homelessness to store and share their important documents, such as IDs and medical forms. The hope of this product is to make signing up for services and housing easier for people experiencing homelessness, by reducing the delays caused by lost or damaged documents.

Getting Started

First launch the backend server

Change the env.template to be a .env file and update to your values

$ cp env.template .env

Install dependencies:

$ yarn

Start the server:

$ yarn start

Hit the api endpoints at: http://localhost:5000/api/

One Click Heroku Deployment

Alternativly you can deploy the backend to heroku with one click:

Image of Heroku One Click Deploy Deploy to Heroku

Next Launch the React Frontend

The Frontend for this project can be found at: https://github.com/cityofaustin/lifefiles-frontend

Project Info

This project is funded by the Robert Wood Johnson Foundation and developed by the Innovation Office at the City of Austin. Kerry O'Connor is the lead investigator, and Daniel Culotta is the Co-investigator on this project. This project is a prototype to test the design considerations around serving a displaced population, and the technology considerations around permanent document management, distributed ledger technology, and the conference of e-notarization.

The project timeline can be found here: Timeline

LifeFiles Features

See the README.md files for respective notes in the server and webclient folders.

Authentication Flows

Helper with private key

sequenceDiagram
Frontend ->> Frontend: User enters private key for secure login
Frontend ->> Frontend: Frontend derives public key from private key EthCrypto.publicKeyByPrivateKey
Frontend ->> Backend: Get unique message for signing req = {publicAddress}
Backend ->> Backend : Store GUID this account needs to sign to be authenticated - updateAccountSignMessage
Backend->> Frontend: Give GUID as message to sign to frontend res = {messageToSign}
Frontend->>Frontend: Sign message with private key - EthCrypto.sign
Frontend->>Backend: Send signature as proof of private key ownership req={publicaddress, signature}
Backend ->> Frontend: Give JWT Auth Token

Helper with email / password

sequenceDiagram
Frontend ->> Backend: post to /login with creds req{ email, password }
Backend ->> Backend : Checks if password is valid with account password hash + salt
Backend ->> Frontend: Give JWT Auth Token