{"id":15651331,"url":"https://github.com/grokify/goauth","last_synced_at":"2026-05-11T16:01:45.486Z","repository":{"id":37885064,"uuid":"94632819","full_name":"grokify/goauth","owner":"grokify","description":"Utility libraries for Go (aka Golang) API auth including OAuth 2, JWT, TLS Client Authentication and Basic Auth.","archived":false,"fork":false,"pushed_at":"2026-05-10T18:20:35.000Z","size":1629,"stargazers_count":67,"open_issues_count":2,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-10T20:21:09.920Z","etag":null,"topics":["golang","oauth2","utilities"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/grokify.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-06-17T15:36:51.000Z","updated_at":"2026-05-10T18:19:27.000Z","dependencies_parsed_at":"2023-07-13T16:32:40.645Z","dependency_job_id":"7ec2d5a7-917b-460f-9c86-7813433a18fc","html_url":"https://github.com/grokify/goauth","commit_stats":{"total_commits":629,"total_committers":3,"mean_commits":"209.66666666666666","dds":"0.10651828298887123","last_synced_commit":"618a8ff0823585dfafc0287055d12afbc905581f"},"previous_names":["grokify/oauth2util","grokify/oauth2-util-go","grokify/oauth2more","grokify/oauth2util-go"],"tags_count":146,"template":false,"template_full_name":null,"purl":"pkg:github/grokify/goauth","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grokify%2Fgoauth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grokify%2Fgoauth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grokify%2Fgoauth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grokify%2Fgoauth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grokify","download_url":"https://codeload.github.com/grokify/goauth/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grokify%2Fgoauth/sbom","scorecard":{"id":326078,"data":{"date":"2025-08-11","repo":{"name":"github.com/grokify/goauth","commit":"4141af6a3c93089b7873081d287f862ee032f913"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.4,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yaml:1","Warn: no topLevel permission defined: .github/workflows/lint.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/6 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/grokify/goauth/ci.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yaml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/grokify/goauth/ci.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yaml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/grokify/goauth/lint.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yaml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/grokify/goauth/lint.yaml/master?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T02:30:46.956Z","repository_id":37885064,"created_at":"2025-08-18T02:30:46.956Z","updated_at":"2025-08-18T02:30:46.956Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32902254,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-10T13:40:02.631Z","status":"online","status_checked_at":"2026-05-11T02:00:05.975Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","oauth2","utilities"],"created_at":"2024-10-03T12:37:58.921Z","updated_at":"2026-05-11T16:01:45.450Z","avatar_url":"https://github.com/grokify.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GoAuth\n\n[![Build Status][build-status-svg]][build-status-url]\n[![Lint Status][lint-status-svg]][lint-status-url]\n[![Go Report Card][goreport-svg]][goreport-url]\n[![Docs][docs-godoc-svg]][docs-godoc-url]\n[![License][license-svg]][license-url]\n\nGoAuth is a comprehensive Go authentication library designed to simplify OAuth 2.0, JWT, and other authentication methods for API services. It provides a unified configuration system for handling multiple authentication types and services, making it easy to create authenticated `*http.Client` instances from a single JSON configuration file.\n\n## Features\n\n- **Unified Credentials Management**: Single JSON configuration format for multiple authentication types and services\n- **Multiple Authentication Types**: OAuth 2.0, JWT, Basic Auth, GCP Service Account, and custom header/query authentication\n- **40+ OAuth 2.0 Providers**: Pre-configured endpoints for popular services\n- **Multiple Grant Types**: Authorization Code, Client Credentials, Password, JWT Bearer, SAML2 Bearer, and Refresh Token\n- **PKCE Support**: Proof Key for Code Exchange for enhanced security\n- **SCIM User Model**: Canonical user information retrieval across services using [SCIM](http://www.simplecloud.info/) schema\n- **CLI Tools**: Command-line utilities for token generation and API requests\n- **Multi-Service OAuth**: Support for applications using multiple OAuth providers (e.g., \"Login with Google\" and \"Login with Facebook\")\n\n## Installation\n\n```bash\ngo get github.com/grokify/goauth\n```\n\n**Requirements**: Go 1.24+\n\n## Supported OAuth 2.0 Providers\n\nGoAuth includes pre-configured OAuth 2.0 endpoints for the following services:\n\n| Service | Service Key | Notes |\n|---------|-------------|-------|\n| Aha | `aha` | Requires subdomain |\n| Asana | `asana` | |\n| Atlassian | `atlassian` | |\n| eBay | `ebay` | Production |\n| eBay Sandbox | `ebaysandbox` | Sandbox |\n| Facebook | `facebook` | |\n| GitHub | `github` | |\n| Google | `google` | |\n| HubSpot | `hubspot` | |\n| Instagram | `instagram` | |\n| Lyft | `lyft` | |\n| Mailchimp | `mailchimp` | |\n| Monday.com | `monday` | |\n| PagerDuty | `pagerduty` | |\n| PayPal | `paypal` | Production |\n| PayPal Sandbox | `paypalsandbox` | Sandbox |\n| Pipedrive | `pipedrive` | |\n| Practicesuite | `practicesuite` | |\n| RingCentral | `ringcentral` | Production |\n| RingCentral Sandbox | `ringcentralsandbox` | Sandbox |\n| Shippo | `shippo` | |\n| Shopify | `shopify` | Requires subdomain |\n| Slack | `slack` | |\n| Stack Overflow | `stackoverflow` | |\n| Stripe | `stripe` | |\n| Todoist | `todoist` | |\n| Uber | `uber` | |\n| WePay | `wepay` | Production |\n| WePay Sandbox | `wepaysandbox` | Sandbox |\n| Wrike | `wrike` | |\n| Wunderlist | `wunderlist` | |\n| Zoom | `zoom` | |\n\nAdditional service-specific packages are available for: Auth0, Metabase, Salesforce, SuccessFactors, Visa, SparkPost, and Zendesk.\n\n## Authentication Types\n\nGoAuth supports the following authentication types:\n\n| Type | Type Key | Description |\n|------|----------|-------------|\n| Basic Auth | `basic` | HTTP Basic Authentication |\n| OAuth 2.0 | `oauth2` | OAuth 2.0 with multiple grant types |\n| JWT | `jwt` | JSON Web Token generation |\n| GCP Service Account | `gcpsa` | Google Cloud Platform Service Account |\n| Google OAuth 2.0 | `googleoauth2` | Google-specific OAuth 2.0 |\n| Header/Query | `headerquery` | Custom header or query parameter authentication |\n\n### OAuth 2.0 Grant Types\n\n- `authorization_code` - Authorization Code flow\n- `client_credentials` - Client Credentials flow\n- `password` - Resource Owner Password Credentials\n- `urn:ietf:params:oauth:grant-type:jwt-bearer` - JWT Bearer\n- `urn:ietf:params:oauth:grant-type:saml2-bearer` - SAML2 Bearer\n- `refresh_token` - Refresh Token\n- `account_credentials` - Account Credentials (Zoom Server-to-Server)\n\n## Configuration\n\n### Credentials Set (Multiple Accounts)\n\nGoAuth uses a JSON configuration format that supports multiple credentials:\n\n```json\n{\n  \"credentials\": {\n    \"my-google-app\": {\n      \"service\": \"google\",\n      \"type\": \"oauth2\",\n      \"oauth2\": {\n        \"clientID\": \"your-client-id\",\n        \"clientSecret\": \"your-client-secret\",\n        \"redirectURL\": \"https://example.com/callback\",\n        \"scope\": [\"email\", \"profile\"],\n        \"grantType\": \"authorization_code\"\n      }\n    },\n    \"my-ringcentral-app\": {\n      \"service\": \"ringcentral\",\n      \"type\": \"oauth2\",\n      \"oauth2\": {\n        \"clientID\": \"your-client-id\",\n        \"clientSecret\": \"your-client-secret\",\n        \"grantType\": \"password\",\n        \"username\": \"your-username\",\n        \"password\": \"your-password\"\n      }\n    },\n    \"my-api-key\": {\n      \"type\": \"headerquery\",\n      \"headerquery\": {\n        \"serverURL\": \"https://api.example.com\",\n        \"header\": {\n          \"X-API-Key\": \"your-api-key\"\n        }\n      }\n    }\n  }\n}\n```\n\n### Credential Types\n\n#### OAuth 2.0 Credentials\n\n```json\n{\n  \"service\": \"github\",\n  \"type\": \"oauth2\",\n  \"oauth2\": {\n    \"serverURL\": \"https://api.github.com\",\n    \"clientID\": \"your-client-id\",\n    \"clientSecret\": \"your-client-secret\",\n    \"redirectURL\": \"https://example.com/callback\",\n    \"scope\": [\"repo\", \"user\"],\n    \"grantType\": \"authorization_code\",\n    \"pkce\": false\n  }\n}\n```\n\n#### Basic Auth Credentials\n\n```json\n{\n  \"type\": \"basic\",\n  \"basic\": {\n    \"username\": \"your-username\",\n    \"password\": \"your-password\",\n    \"serverURL\": \"https://api.example.com\",\n    \"allowInsecure\": false\n  }\n}\n```\n\n#### JWT Credentials\n\n```json\n{\n  \"type\": \"jwt\",\n  \"jwt\": {\n    \"issuer\": \"your-issuer\",\n    \"privateKey\": \"your-private-key\",\n    \"signingMethod\": \"HS256\"\n  }\n}\n```\n\nSupported signing methods: `ES256`, `ES384`, `ES512`, `HS256`, `HS384`, `HS512`\n\n#### Header/Query Credentials\n\n```json\n{\n  \"type\": \"headerquery\",\n  \"headerquery\": {\n    \"serverURL\": \"https://api.example.com\",\n    \"header\": {\n      \"Authorization\": \"Bearer your-token\",\n      \"X-Custom-Header\": \"value\"\n    },\n    \"query\": {\n      \"api_key\": \"your-api-key\"\n    }\n  }\n}\n```\n\n## Usage\n\n### Creating an HTTP Client\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"github.com/grokify/goauth\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    // From credentials file with account key\n    client, err := goauth.NewClient(ctx, \"credentials.json\", \"my-google-app\")\n    if err != nil {\n        panic(err)\n    }\n\n    // Use client for API requests\n    resp, err := client.Get(\"https://api.example.com/resource\")\n}\n```\n\n### Loading Credentials Set\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"github.com/grokify/goauth\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    // Load credentials set from file\n    set, err := goauth.ReadFileCredentialsSet(\"credentials.json\", true)\n    if err != nil {\n        panic(err)\n    }\n\n    // Get specific credentials\n    creds, err := set.Get(\"my-google-app\")\n    if err != nil {\n        panic(err)\n    }\n\n    // Create client from credentials\n    client, err := creds.NewClient(ctx)\n    if err != nil {\n        panic(err)\n    }\n\n    // List all account keys\n    accounts := set.Accounts()\n}\n```\n\n### CLI-based Token Retrieval\n\nFor authorization code flow without a web server:\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"github.com/grokify/goauth\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    creds, _ := goauth.NewCredentialsFromSetFile(\"credentials.json\", \"my-app\", false)\n\n    // This will print the authorization URL and prompt for the code\n    client, err := creds.NewClientCLI(ctx, \"random-state\")\n    if err != nil {\n        panic(err)\n    }\n}\n```\n\n### Canonical User Information (SCIM)\n\nGoAuth provides `ClientUtil` implementations that satisfy the `OAuth2Util` interface for retrieving canonical user information:\n\n```go\ntype OAuth2Util interface {\n    SetClient(*http.Client)\n    GetSCIMUser() (scim.User, error)\n}\n```\n\n#### Google\n\n```go\nimport \"github.com/grokify/goauth/google\"\n\ngoogleClientUtil := google.NewClientUtil(googleOAuth2HTTPClient)\nscimUser, err := googleClientUtil.GetSCIMUser()\n```\n\n#### Facebook\n\n```go\nimport \"github.com/grokify/goauth/facebook\"\n\nfbClientUtil := facebook.NewClientUtil(fbOAuth2HTTPClient)\nscimUser, err := fbClientUtil.GetSCIMUser()\n```\n\n#### RingCentral\n\n```go\nimport \"github.com/grokify/goauth/ringcentral\"\n\nrcClientUtil := ringcentral.NewClientUtil(rcOAuth2HTTPClient)\nscimUser, err := rcClientUtil.GetSCIMUser()\n```\n\nAlso available for: Aha, Zoom, Metabase, Zendesk, and Salesforce.\n\n## CLI Tools\n\nGoAuth includes command-line tools for authentication tasks:\n\n### goauth\n\nMain token retrieval tool supporting all authentication types:\n\n```bash\ngo run cmd/goauth/main.go --credentials credentials.json --account my-app\n```\n\n### goapi\n\nMake authenticated API requests:\n\n```bash\ngo run cmd/goapi/main.go --credentials credentials.json --account my-app --url https://api.example.com/resource\n```\n\n## Package Structure\n\n| Package | Description |\n|---------|-------------|\n| `goauth` | Core credentials management and client creation |\n| `authutil` | Low-level authentication utilities (BasicAuth, OAuth2, JWT, scope management) |\n| `endpoints` | Pre-configured OAuth 2.0 endpoints for 30+ services |\n| `scim` | SCIM schema user/group models for canonical user representation |\n| `multiservice` | Multi-provider OAuth2 management for applications |\n| `google` | Google-specific OAuth2 and GCP service account handling |\n| `ringcentral` | RingCentral API integration |\n| `facebook` | Facebook OAuth2 and user data retrieval |\n| `aha`, `zoom`, `metabase`, `zendesk`, `salesforce`, `hubspot` | Service-specific implementations |\n\n## Test Redirect URL\n\nThis repo includes a generic test OAuth 2 redirect page for headless (no-UI) applications. Configure your OAuth 2 redirect URI to:\n\n**[https://grokify.github.io/goauth/oauth2callback/](https://grokify.github.io/goauth/oauth2callback/)**\n\nThis page displays the Authorization Code which you can copy and paste into your CLI application.\n\n## Example Applications\n\n- **Multi-Service OAuth Demo**: [github.com/grokify/beegoutil](https://github.com/grokify/beegoutil) - Beego-based demo showing Google and Facebook authentication\n- **Examples Directory**: See `examples/` and service-specific `cmd/` directories for usage examples\n\n## Contributing\n\nContributions are welcome. Please submit pull requests or create issues for bugs and feature requests.\n\n## License\n\nGoAuth is available under the [MIT License](LICENSE).\n\n [build-status-svg]: https://github.com/grokify/goauth/actions/workflows/ci.yaml/badge.svg?branch=master\n [build-status-url]: https://github.com/grokify/goauth/actions/workflows/ci.yaml\n [lint-status-svg]: https://github.com/grokify/goauth/actions/workflows/lint.yaml/badge.svg?branch=master\n [lint-status-url]: https://github.com/grokify/goauth/actions/workflows/lint.yaml\n [goreport-svg]: https://goreportcard.com/badge/github.com/grokify/goauth\n [goreport-url]: https://goreportcard.com/report/github.com/grokify/goauth\n [docs-godoc-svg]: https://pkg.go.dev/badge/github.com/grokify/goauth\n [docs-godoc-url]: https://pkg.go.dev/github.com/grokify/goauth\n [license-svg]: https://img.shields.io/badge/license-MIT-blue.svg\n [license-url]: https://github.com/grokify/goauth/blob/master/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrokify%2Fgoauth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrokify%2Fgoauth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrokify%2Fgoauth/lists"}