250 lines
6.5 KiB
Markdown
250 lines
6.5 KiB
Markdown
# Contributing
|
|
|
|
We're so excited you're interested in helping with Authorizer! We are happy to help you get started, even if you don't have any previous open-source experience :blush:
|
|
|
|
## New to Open Source?
|
|
|
|
1. Take a look at [How to Contribute to an Open Source Project on GitHub](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github)
|
|
2. Go through the [Authorizer Code of Conduct](https://github.com/authorizerdev/authorizer/blob/main/.github/CODE_OF_CONDUCT.md)
|
|
|
|
## Where to ask questions?
|
|
|
|
1. Check our [Github Issues](https://github.com/authorizerdev/authorizer/issues) to see if someone has already answered your question.
|
|
2. Join our community on [Discord](https://discord.gg/Zv2D5h6kkK) and feel free to ask us your questions
|
|
|
|
As you gain experience with Authorizer, please help answer other people's questions! :pray:
|
|
|
|
## What to work on?
|
|
|
|
You can get started by taking a look at our [Github issues](https://github.com/authorizerdev/authorizer/issues)
|
|
If you find one that looks interesting and no one else is already working on it, comment on that issue and start contributing 🙂.
|
|
|
|
Please ask as many questions as you need, either directly in the issue or on [Discord](https://discord.gg/Zv2D5h6kkK). We're happy to help!:raised_hands:
|
|
|
|
### Contributions that are ALWAYS welcome
|
|
|
|
1. More tests
|
|
2. Improved Docs
|
|
3. Improved error messages
|
|
4. Educational content like blogs, videos, courses
|
|
|
|
## Development Setup
|
|
|
|
### Prerequisites
|
|
|
|
- OS: Linux or macOS or windows
|
|
- Go: (Golang)(https://golang.org/dl/) >= v1.15
|
|
|
|
### Familiarize yourself with Authorizer
|
|
|
|
1. [Architecture of Authorizer](http://docs.authorizer.dev/)
|
|
2. [GraphQL APIs](https://docs.authorizer.dev/core/graphql-api/)
|
|
|
|
### Project Setup for Authorizer core
|
|
|
|
1. Fork the [authorizer](https://github.com/authorizerdev/authorizer) repository (**Skip this step if you have access to repo**)
|
|
2. Clone repo: `git clone https://github.com/authorizerdev/authorizer.git` or use the forked url from step 1
|
|
3. Change directory to authorizer: `cd authorizer`
|
|
4. Create Env file `cp .env.sample .env`. Check all the supported env [here](https://docs.authorizer.dev/core/env/)
|
|
5. Build Dashboard `make build-dashboard`
|
|
6. Build App `make build-app`
|
|
7. Build Server `make clean && make`
|
|
> Note: if you don't have [`make`](https://www.ibm.com/docs/en/aix/7.2?topic=concepts-make-command), you can `cd` into `server` dir and build using the `go build` command. In that case you will have to build `dashboard` & `app` manually using `npm run build` on both dirs.
|
|
8. Run binary `./build/server`
|
|
|
|
### Updating GraphQL schema
|
|
|
|
- Modify `server/graph/schema.graphqls` file
|
|
- Run `make generate-graphql` this will update the models and required methods
|
|
- If a new mutation or query is added
|
|
- Write the implementation for the new resolver in `server/resolvers/NEW_RESOLVER.GO`
|
|
- Update `server/graph/schema.resolvers.go` with the new resolver method
|
|
|
|
### Adding support for new database
|
|
|
|
- Run `make generate-db-template dbname=NEW_DB_NAME`
|
|
eg `make generate-db-template dbname=dynamodb`
|
|
|
|
This command will generate a folder in server/db/providers/ with name specified in the above command.
|
|
One will have to implement methods present in that folder.
|
|
|
|
> Note: Connection for database and schema changes are written in `server/db/providers/DB_NAME/provider.go` > `NewProvider` method is called for any given db based on the env variables present.
|
|
|
|
### Testing
|
|
|
|
Make sure you test before creating PR.
|
|
|
|
If you want to test for all the databases that authorizer supports you will have to run `mongodb` & `arangodb` instances locally.
|
|
|
|
Setup mongodb & arangodb using Docker
|
|
|
|
```
|
|
docker run --name mongodb -d -p 27017:27017 mongo
|
|
|
|
// -e ARANGO_ROOT_PASSWORD=root
|
|
docker run --name arangodb -d -p 8529:8529 -e ARANGO_NO_AUTH=1 arangodb/arangodb:3.8.4
|
|
```
|
|
|
|
> Note: If you are not making any changes in db schema / db operations, you can disable those db tests [here](https://github.com/authorizerdev/authorizer/blob/main/server/__test__/resolvers_test.go#L14)
|
|
|
|
If you are adding new resolver,
|
|
|
|
1. create new resolver test file [here](https://github.com/authorizerdev/authorizer/tree/main/server/__test__)
|
|
Naming convention filename: `resolver_name_test.go` function name: `resolverNameTest(t *testing.T, s TestSetup)`
|
|
2. Add your tests [here](https://github.com/authorizerdev/authorizer/blob/main/server/__test__/resolvers_test.go#L38)
|
|
|
|
**Command to run tests:**
|
|
|
|
```sh
|
|
make test
|
|
```
|
|
|
|
**Manual Testing:**
|
|
|
|
For manually testing using graphql playground, you can paste following queries and mutations in your playground and test it
|
|
|
|
```gql
|
|
mutation Signup {
|
|
signup(
|
|
params: {
|
|
email: "lakhan@yopmail.com"
|
|
password: "test"
|
|
confirm_password: "test"
|
|
given_name: "lakhan"
|
|
}
|
|
) {
|
|
message
|
|
user {
|
|
id
|
|
family_name
|
|
given_name
|
|
email
|
|
email_verified
|
|
}
|
|
}
|
|
}
|
|
|
|
mutation ResendEamil {
|
|
resend_verify_email(
|
|
params: { email: "lakhan@yopmail.com", identifier: "basic_auth_signup" }
|
|
) {
|
|
message
|
|
}
|
|
}
|
|
|
|
query GetVerifyRequests {
|
|
_verification_requests {
|
|
id
|
|
token
|
|
expires
|
|
identifier
|
|
}
|
|
}
|
|
|
|
mutation VerifyEmail {
|
|
verify_email(params: { token: "" }) {
|
|
access_token
|
|
expires_at
|
|
user {
|
|
id
|
|
email
|
|
given_name
|
|
email_verified
|
|
}
|
|
}
|
|
}
|
|
|
|
mutation Login {
|
|
login(params: { email: "lakhan@yopmail.com", password: "test" }) {
|
|
access_token
|
|
expires_at
|
|
user {
|
|
id
|
|
family_name
|
|
given_name
|
|
email
|
|
}
|
|
}
|
|
}
|
|
|
|
query GetSession {
|
|
session {
|
|
access_token
|
|
expires_at
|
|
user {
|
|
id
|
|
given_name
|
|
family_name
|
|
email
|
|
email_verified
|
|
signup_methods
|
|
created_at
|
|
updated_at
|
|
}
|
|
}
|
|
}
|
|
|
|
mutation ForgotPassword {
|
|
forgot_password(params: { email: "lakhan@yopmail.com" }) {
|
|
message
|
|
}
|
|
}
|
|
|
|
mutation ResetPassword {
|
|
reset_password(
|
|
params: { token: "", password: "test", confirm_password: "test" }
|
|
) {
|
|
message
|
|
}
|
|
}
|
|
|
|
mutation UpdateProfile {
|
|
update_profile(params: { family_name: "samani" }) {
|
|
message
|
|
}
|
|
}
|
|
|
|
query GetUsers {
|
|
_users {
|
|
id
|
|
email
|
|
email_verified
|
|
given_name
|
|
family_name
|
|
picture
|
|
signup_methods
|
|
phone_number
|
|
}
|
|
}
|
|
|
|
mutation MagicLinkLogin {
|
|
magic_link_login(params: { email: "test@yopmail.com" }) {
|
|
message
|
|
}
|
|
}
|
|
|
|
mutation Logout {
|
|
logout {
|
|
message
|
|
}
|
|
}
|
|
|
|
mutation UpdateUser {
|
|
_update_user(
|
|
params: {
|
|
id: "dafc9400-d603-4ade-997c-83fcd54bbd67"
|
|
roles: ["user", "admin"]
|
|
}
|
|
) {
|
|
email
|
|
roles
|
|
}
|
|
}
|
|
|
|
mutation DeleteUser {
|
|
_delete_user(params: { email: "signup.test134523@yopmail.com" }) {
|
|
message
|
|
}
|
|
}
|
|
```
|