Code Monkey home page Code Monkey logo

keytree's People

Contributors

davidlazar avatar jbangert avatar jellevandenhooff avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

keytree's Issues

Write a simple spec

All parts of the protocol should be documented. Update and lookup rules are the most critical.

Add rate-limiting to server

The server currently will accept as many updates as its CPU can handle. To prevent abuse, rate-limit updates per-IP, per-domain, per-username.

Additionally, we should rate-limit (and size-limit) updates coming in from mirroring other servers. A malicious server could trick a follower into downloading a very large tree and fill up its memory. However, because servers pick what trees to mirror manually, this is a less pressing issue.

Should have a JavaScript client

Barebones lookup verification code exists in web/client.js.

Ideally, we expose a simple API for lookup up a specific kind of key from a user, and if the lookup fails, you get a human-friendly error message.

Later on, we could also expose a simple API for updating for users that do not have a Keytree lock key configured. Then apps could use Keytree without requiring users to install a new app. For users that do have a lock key configured, the update API can forward users to the full-blown key management client.

Make running your own server super easy

Starting your own server should be a very-low friction operation. Ideally, you download the code, compile it, and start it, and you're done. Step 2 is configuring your client to use the local server (should be a one step action as well), and publishing your server to other servers. Perhaps keytree.io can mirror servers automatically?

Add status display to server

The server website should display basic statistics (number of entries stored, memory used, number of servers mirrored, size of each mirror).

JavaScript object type-checking library

The JavaScript client will handle untrusted JSON input. To make reasoning about the code easier, we should type-check the returned JSON in a centralized place.

Have a plan for configurations (default configurations, client-app supplied, library-supplied)

For security, each user should be able to configure their own quorum. For convenience, you should not have to configure your own quorum.

Ideally, Keytree ships with a standard configuration built into the code, but will read from (something like) ~/.keytree/config to support user-supplied quorum configurations.

Apps using the Keytree library should be able to override the standard configuration (or extend it) with their own server to not depend on anyone else.

We also need a format for configurations. Ideally, we allow arbitrary nesting of quorums.

Multiplex HTTP requests over a single connection

Right now, the mirroring API requires parallel requests for reasonable performance. This keeps the API simple, but does not scale well (one TCP connection per outstanding request). Either HTTP2 or some kind of TCP multiplexing would be the easiest way to solve this problem.

Should investigate if multiplexing gives acceptable performance, or if we need batching of multiple requests in a single HTTP request as well.

Audit code

The code needs to be audited and tested.

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.