Giter Club home page Giter Club logo

dukkhalessclient's Introduction

Build Status Known Vulnerabilities

Dukkhaless Self-Care Client

A safe place to write your thoughts, and track the progress of mental health recovery.

Planned Features

  1. Secure Diaries
  2. Configurable Calendars with support for mood/diet logging.
  3. Secure Tagging of items for searching/filtering. The tags will be stored in a hashed format so they can be queried and searched without recording their text.
  4. Secure sharing of diaries/calendars with explicitly whitelisted parties.
  5. Support for creating and visualising timelines of events.
  6. DBT Template for analysing pros/cons of a possible decision
  7. CBT ABCD template with saving X. More to come, these are just the initial steps. User feedback and information will play a major role in where we go in the future.

Privacy System

The Dukkhaless Self-Care platform identifies three key security concerns.

  1. The user must be able to encrypt data for themselves and only themselves to read.
  • Secretbox algorithm is used to secure user data for their own viewing
  • Secretbox makes use of your symmetric key.
  1. The user must be able to send data to a specific individual (ie. their physician such that only that individual can read it.)
  • Box algorithm is used to send data between users.
  • Box makes use of your private key and the recipient's public key
  1. Only the owner of the user data should be able to change it.
  • This goal is achieved via typical sign-in credentials, ie username and password.

Technical notes on addressing these concerns

  • The program uses the tweetnacl-js library to handle client-side encryption
  • The program introduces a concept of a keyring, a block of text which the user must keep private and secure
    • The keyring is used to send data privately to specific individuals (like your physician) AND to encrypt your data so that ONLY you can read it.
    • Even the Dukkhaless Self-Care servers cannot read the contents of your data except for the minimum metadata to make sure it only gets sent to you. (i.e. the username that goes with a diary entry, and the info needed to sort them by most recent.)
  • The keyring has three keys within it.
    • A public key which the server keeps a copy of so that people can encrypt their data for only you to read it. A public key is safe to share without reducing privacy.
    • The private key that is paired to the public key. This is used to read messages that are sent to you.
    • The symmetric key that is used to encrypt your data for you to read. This key should be treated as securely as the private key as it represents your personal access to your data.

Problems That Still Require Solving

  • User password recovery without invading user privacy (i.e. demanding an email address)
  • Risk of user data loss when they key is lost.

Software Licensing

This program is licensed under the GNU General Public License Version 3. For details consult the LICENSE file.

Some source files are special cases and licensed under more permissive licenses such as Apache Version 2. This is done where the code is copied whole or in part from another individual who has licensed the software as such. Licenses are preserved so that authorship and rights do not be confused, and to protect and thank those authors who made this work possible. Such special files will have a license notice at the top of each file clearly demarking them as licensed differently from GPLv3.

Setting Up Your Development Environment

  • Download latest stable nodejs from here
  • npm install --global yarn
  • From the project directory: yarn setup
  • Run the program in dev mode: yarn dev
  • Additional scripts for it can be found in package.json's scripts object.
  • To create a new feature branch to do development, use git checkout -b MYBRANCHNAME
  • To contribute your feature back, please simply create a pull request with a description of its intent.

Getting oriented.

  • The project uses purescript-halogen For rendering
  • It's important to note that the documentation for halogen on pursuit is not up to date.

Contributing Guidelines

  • Cotribution guidelines can be found here

Working with the bulma design stuff

  • Once set up, run yarn dev to load the auto-reloading browser.
  • Edit styles/styles.scss to define appropriate style sheets to be used in the application, and configure bulma variables
  • View the work on localhost:3000/designPage.html

dukkhalessclient's People

Contributors

alexadewit avatar andy5995 avatar dependabot[bot] avatar

Stargazers

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

Watchers

 avatar  avatar

dukkhalessclient's Issues

Decide on a project name

  • Decide on a real name for this project that it can be released under
  • Update source code to reflect this name
  • Update localisation tables
  • Register domain under this name

Provide feature suggestions, such as mental health exercises.

Anyone interested, please comment in this Issue with suggested exercise activities and a link to how they are typically done or a description that would provide enough guidance to implement them in practice.

Suggestions are welcome from anyone, and those with the most support from others will receive prioritisation.

Be able to create and account and log in

  • Download Key Button
  • Copy key Button
  • Key state update on paste
  • Split Register and Login routes
  • Add functionality for route nesting.
  • Validation for registration
  • Send login/register requests to backend

Implement Session Cashing in Session Storage (Not cookies or local storage)

Is your feature request related to a problem? Please describe.
It's rather tedious as a developer and user that any page reload will entirely knock you out of the application context. This is rather contrary to the wish to have meaningful uris.

Describe the solution you'd like
Sessions should be possible to persist a time while the user is present in the application. A reasonable timeout where the session is left open should be implemented, and closing the application should result in the end of the session.

Describe alternatives you've considered
Primarily just session storage, as local storage is not as "fragile"(I forget the word I want here).

Cookies are also inappropriate. In memory store is insufficient for a positive user experience. Session store should be looked into further. Perhaps a background worker would be needed to guarantee a session wipe.

Application UX

We need a desired look and feel to work towards when it comes to application usability.

Right now features and links/navigation are merely thrown together to ensure that functionality is built. We need a design proposal for how the application should actually look when being used, at least on desktop for starters.

Implement language preference switching

Currently language resolution is done entirely using the browser language settings, with no option for an override in the appliaction, ie a dropdown or routing parameter that provides an explicit preference.

A better approach would allow the user to switch language without concern for their global browser settings.

Rename Application

Given existing trademarks and registration of the name of "My Selfcare", move localisation and project file naming to a new name.

A currently registered domain of dukkahless.com exists for this project.

This is a mixed sanskrit-english word, meant to approximately mean "Without suffering", or "Suffer Less". The pun is intentional.

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.