/passport

Passport allows users to prove their identity through a secure, decentralized UI

Primary LanguageTypeScriptOtherNOASSERTION

Gitcoin Passport

What is Passport?

Many social organizations, online particularly, have difficulty ensuring that every participant is a unique human and does not have multiple participating accounts. Most existing digital identity solutions are either centralized (e.g., national identity cards) or individualistic (e.g., most “self-sovereign” identity models). However, identity is naturally intersectional and social; everybody shares different data and relationships with a unique set of others. The Gitcoin Passport aims to provide a more collaborative and secure infrastructure for digital identity by capturing the richness of our diversely shared lives.

The Gitcoin Passport is an identity verification application. We have written software enabling people to grow personal collections of verifiable credentials about themselves and organizations to assess their identities to coordinate rights and responsibilities. The institutions define, verify, and utilize identity as functions of the networked records of the individuals. While we build the Passport agnostic to specific applications, we are actively exploring its benefits for personhood proofs and plurality in organizational designs.

Documentation

Check out our documentation at https://docs.passport.gitcoin.co

Contributing to Passport

We welcome everyone to contribute to the Passport project.

You can join our Discord and specifically the passport-builders channel (just be sure to select the builder role when you join the discord) to get help and discuss the project with the rest of the community.

You can also familiarize yourself with our near term project roadmap in the passport project backlog

Reviewing Changes

Once a pull request is sent, the Passport team will review your changes. We outline our process below to clarify the roles of everyone involved.

All pull requests must be approved by two committers before being merged into the repository. If any changes are necessary, the team will leave appropriate comments requesting changes to the code. Unfortunately, we cannot guarantee a pull request will be merged, even when modifications are requested, as the Passport team will re-evaluate the contribution as it changes.

Committers may also push style changes directly to your branch. If you would rather manage all changes yourself, you can disable the "Allow edits from maintainers" feature when submitting your pull request.

The Passport team may optionally assign someone to review a pull request. If someone is assigned, they must explicitly approve the code before another team member can merge it.

When the review finishes, your pull request will be squashed and merged into the repository. If you have carefully organized your commits and believe they should be merged without squashing, please mention it in a comment.

Bug Bounty

If you think you've found a security vulnerability, we maintain an open bounty on Gitcoin to help reward community members who report these issues. Check it out here: passportxyz#133

Quick Start

Prerequisites: Node (v16 LTS) plus Yarn and Git

  1. Install Gitcoin Passport (this will install all packages within the passport monorepo):
git clone https://github.com/gitcoinco/passport.git
cd passport
npm install --global lerna
lerna init
lerna bootstrap
  1. Create environment files, and replace environment variables with your own values
cp ./app/.env-example.env ./app/.env
cp ./iam/.env-example.env ./iam/.env
cp ./schemas/.env-example.env ./schemas/.env
  1. Start iam, app, and ceramic services concurrently:
# remember to create .env files first
yarn start
  1. Run the Passport Scorer API locally. Set up instructions are here

Passport Data

A passport has two sources of data. The primary source is a postgres database that is hosted by gitcoin. To run the passport application locally you will need spin up the Scorer API. All relevant instructions to run the scorer api can be found here. The sample environment variables in the .env-example.env files are configured to make requests to the scorer api running locally. Once the scorer api is running locally, you should have a reliable data source for development.

The second source of data is the ceramic network. No steps are needed to run the ceramic network locally. The sample environment variables in the .env-example.env files are configured to make requests to a test version of the ceramic network.

Background Knowledge

  • Know what a wallet is, how to create one, etc.
  • Know what a Verifiable Credential is
  • Know basics of Ceramic Network - interacting with DIDDatastore, Self.ID

Packages

app

The web app allowing users to interact with their Gitcoin Passport. README

database-client

Contains database connection implementations. Currently supports Ceramic Network. README

iam

The server handling incoming requests to issue credentials and process verifications. README

identity

This is a helper package to compile Spruce DIDKit and export functions for use in iam and app packages.

infra

Holds the Pulumi deployment configuration for this repository. README

schemas

Ceramic schemas and model definitions, and scripts for creating and publishing these to the Ceramic Network. README

types

Shared type definitions. README