Code Monkey home page Code Monkey logo

ipfs-social-proof's Introduction

ipfs-social-proof

Identity and social proof serverlessly via IPFS

Create an online identity peer 2 peer, generate proof(s) that can be validated by peers to verify your identity. No walled garden neccesary.

Warning: alpha software with alpha dependencies

THIS IS VERY MUCH A Work In Progress

Requirements

  • js-ipfs (browser mode)
  • node.js 10
  • Chrome / Firefox

First time install & launch client

  • git clone / fork this repo
  • copy src/example-auth.js to src/auth.js
  • edit the githubToken property to be a READ-ONLY personal GH token, see: github tokens
  • npm run make
  • Subsequent runs:
  • npm run client

Build Bundle

  • npm run bundle
  • This will produce a bundle one can consume in a web/electron app at bundle.js

Example client Identity DApp: Autonomica

Identity management & peer discovery

Alt Identity

Plan

  • See PLAN.md (preliminary plan & ideas scratchpad)

Contributing

ipfs-social-proof's People

Contributors

cdeng001 avatar daviddahl avatar imgbotapp avatar johnwalicki avatar kant avatar tyleryasaka avatar uniconstructor avatar

Stargazers

 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  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  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

Watchers

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

ipfs-social-proof's Issues

refactor/standardize remote proof workflow

It would be nice to create a standard class with standard methods to allow for easy adding of social proof published sites.

So, extract out the Gist code and reddit code and make a standard class that can be implemented for additional sources of proofs.

I imagine the interface implements something like:

  • getRawData(url)
  • extractProof(rawData)

Then the proof can just be handled generically

IPFS DDC - Exchange of ideas / collaborate

I've came across this project and we, at the IPFS DDC working group, will be doing something very similar. To give you some context, the IPFS DDC works towards offering libraries for developers to build DApps. Having an Identity solution is something we have been researching in the past few months. We have actually made a RFC for people to read and give feedback: https://github.com/ipfs-shipyard/peer-star/blob/rfc-identity/docs/rfc-identity.md (PR here). The RFC culminates with the proposal of creating the IDM (Identity Manager):

  • Allows to create/import identities
  • Allows managing identities, including attaching social proofs to them
  • Allows typical login workflows for users to login to DApps by choosing one identity
  • Allow signing workflows between the DApps and the logged in identity
  • Embraces open standards, such as DIDs, DID-Auth and Verifiable Claims

I would kindly ask you to read the RFC and comment on the project similarities/differences.
Also, have you looked into https://github.com/jonnycrunch/ipid? It's a DID method implemented on top of IPFS.

There's a lot of similarities between this project and IDM. I wonder if we could exchange ideas and perhaps even share code. Looking forward to see where this project is going and how we could collaborate!

[API] ASCII armor for signatures & pub keys

edit Looks like a lot of this issue is confusion of key types and not understanding all formats

I have spent a little bit of time figuring out the round trip of RSAPubKey -> Uint8Array -> 'base64' string.

For whatever reason, when TextEncoder - and pretty much all of the base64 -> Uint8Array Array libraries I have found on npm, the returned Uint8Array has the wrong prototype (TypedArray) or the Uint8Array is too short (288 vs 299 length).

I kind of think there is a base64 encoder/ decoder inside IPFS code somewhere, I just have not found it yet.

In the mean time I have declared the public keys as Dehydrated Public Keys and they are merely created like this: plaintext = JSON.stringify([Uint8Array] rsaKeyBytes)

Subs / Channels API

each peer can create new channels for peers to subscribe to

The channel names should be unique hashes - the channels can be advertised to followers perhaps?

A channel's meta data should resemble the metadata of a newsgroup or subreddit:

{
  name: 'My Discussion Forum',
  id: 'Qmhash-unique-id-ofsomekind',
  description: 'Blah blah blah'
  'locale': 'na' // en-uk, de-de, etc 
}

Syncing the log of post hashes needs to be worked out, but I imagine each post could include the previous post ipns hash and the original ipns hash so clients could potentially re-create the history (albeit slowly)... I have yet to look into CRDT code like orbit-db, etc

[META] Test Suites

There is a test for signature verification in test/index.js, but a full on test suite needs to be created at least for the code in src/index.js

[API] Consume remote ProofUrl content to verify proof on the fly

It is not enough to just just a peer's locally stored proofs (this is fine for the POC) - we need to pull down a remote proof json doc, validate what HTTPS url it came from (github, reddit, etc) and verify the signature on the fly.

In the client this would be run every time a user examines the 'publicKeyCard' of a peer. I know Keybase does this as you see the verification icons chnage state when looking at another user's profile.

Proofs class

A proofs class that mints proofs as a more "standard" JSON format, with a version and a JSON schema to validate them is a pretty good idea

Add a DID method for this?

For context, I'm referring to the Decentralized Identifiers (DIDs) spec. https://w3c-ccg.github.io/did-spec/

Probably a bit early, but I think it's worth mentioning: would be great if this could be defined as a formal DID method.

I would be glad to help make this happen.

One example of a DID method: https://github.com/WebOfTrustInfo/rebooting-the-web-of-trust-spring2018/blob/master/topics-and-advance-readings/DID-Method-erc725.md

Current list of DID methods: https://w3c-ccg.github.io/did-method-registry/

Check local contacts DB after `peer joined` for display data

When peer joined is triggered, we immediately update the profile in the peers view with the generic IPFS peerId, sometimes the peer broadcast to the room takes a bit to update the peer with handle, etc.

We should check our local contactsDB for the peerId and use the cached data to update the peers UI.

Also, we should look for handle / bio / etc changes and upsert our contactsDB as we see these changes.

db test update error

Error: {"status":409,"name":"conflict","message":"Document update conflict"}

Not sure what is going on see: test/db.spec.js

Update PLAN.md

PLAN.md is a stream-of-consciousness-like document - it needs to be re-organized and updated with the latest thoughts and completed tasks.

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.