Added OAuth2 provider templates repository

Established community-maintained OAuth2 provider templates for TRMNL
private plugins. Includes a YAML catalogue of 352 providers with
schema documentation, GitHub Actions CI validation, issue templates,
contributing guidelines, and MIT license.
This commit is contained in:
Ikraam Ghoor
2026-02-03 16:49:00 +00:00
commit 95185fe472
9 changed files with 4058 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
---
name: Broken / Outdated Provider
about: Report a provider that no longer works or has outdated URLs
title: "[Broken] PROVIDER NAME"
labels: broken-provider
---
## Provider
- **Keyname:** (from `providers.yml`)
- **Display name:**
## What's wrong?
- [ ] Authorization URL no longer works
- [ ] Token URL no longer works
- [ ] Scopes are outdated
- [ ] Provider shut down or deprecated their OAuth2 API
- [ ] Other (describe below)
## Details
Describe the issue. Include any error messages or links to the provider's updated docs if available.
## Suggested fix
If you know the correct values, paste them here. Otherwise, leave blank and we'll investigate.
+23
View File
@@ -0,0 +1,23 @@
---
name: New Provider Request
about: Request a new OAuth2 provider template
title: "Add [PROVIDER NAME]"
labels: new-provider
---
## Provider
- **Name:**
- **Website:**
## OAuth Details
- **OAuth docs URL:**
- **Authorize URL:**
- **Token URL:**
- **PKCE required:** yes / no
- **Default scopes:**
## Notes
Any additional context (special headers, non-standard token responses, etc.)
+15
View File
@@ -0,0 +1,15 @@
## Checklist
- [ ] YAML is valid
- [ ] Required fields present (`keyname`, `display_name`, `category`, `authorize_url`, `token_url`, `pkce_enabled`)
- [ ] `keyname` is unique and lowercase-hyphenated
- [ ] `category` is from the valid list
- [ ] Tested OAuth flow or linked to provider's OAuth documentation
## Provider(s)
<!-- List the provider(s) added or modified -->
## OAuth Documentation
<!-- Link to the provider's OAuth/API documentation -->
+87
View File
@@ -0,0 +1,87 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
# Validates providers.yml for CI
# Checks: valid YAML, required fields, no duplicate keynames, URL format, valid categories
require "yaml"
PROVIDERS_PATH = File.expand_path("../../providers.yml", __dir__)
REQUIRED_FIELDS = %w[keyname display_name category authorize_url token_url pkce_enabled].freeze
VALID_CATEGORIES = %w[
ai analytics communication content crm design dev-tools e-commerce
education entertainment file-storage finance fitness gaming healthcare
hr identity logistics marketing other productivity security smart-home
social support travel
].freeze
errors = []
# Parse YAML
begin
providers = YAML.load_file(PROVIDERS_PATH)
rescue Psych::SyntaxError => e
puts "FAIL: Invalid YAML syntax"
puts e.message
exit 1
end
unless providers.is_a?(Array)
puts "FAIL: providers.yml must be a YAML array"
exit 1
end
puts "Loaded #{providers.size} providers"
# Check each provider
keynames = []
providers.each_with_index do |provider, index|
label = provider["keyname"] || "entry ##{index + 1}"
# Required fields
REQUIRED_FIELDS.each do |field|
if provider[field].nil? || provider[field].to_s.strip.empty?
errors << "#{label}: missing required field '#{field}'"
end
end
# Duplicate keynames
keyname = provider["keyname"].to_s
if keynames.include?(keyname)
errors << "#{label}: duplicate keyname"
end
keynames << keyname
# URL format
%w[authorize_url token_url].each do |url_field|
url = provider[url_field].to_s
next if url.empty?
unless url.start_with?("https://") || url.include?("${connectionConfig")
errors << "#{label}: #{url_field} must start with https:// or contain ${connectionConfig"
end
end
# Category validation
category = provider["category"].to_s
unless category.empty? || VALID_CATEGORIES.include?(category)
errors << "#{label}: invalid category '#{category}' (valid: #{VALID_CATEGORIES.join(", ")})"
end
# pkce_enabled format
pkce = provider["pkce_enabled"].to_s
unless %w[yes no].include?(pkce)
errors << "#{label}: pkce_enabled must be 'yes' or 'no', got '#{pkce}'"
end
end
if errors.any?
puts "\nFAIL: #{errors.size} validation error(s)\n\n"
errors.each { |e| puts " - #{e}" }
exit 1
else
puts "PASS: All #{providers.size} providers valid"
end
+23
View File
@@ -0,0 +1,23 @@
name: Validate Providers
on:
pull_request:
paths:
- 'providers.yml'
push:
branches: [main]
paths:
- 'providers.yml'
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'
- name: Validate providers.yml
run: ruby .github/scripts/validate_providers.rb
+36
View File
@@ -0,0 +1,36 @@
# Contributing
Thanks for helping grow the OAuth2 provider list!
## Fixing or Removing a Provider
Some providers may have outdated URLs or no longer support OAuth2. If you spot one:
1. **Report it** — [open a broken provider issue](../../issues/new?template=broken-provider.md)
2. **Fix it** — update the entry in `providers.yml` and open a PR
3. **Remove it** — if the service has shut down, delete the entry and open a PR
## Adding a Provider
1. **One provider per PR** — keeps review simple
2. Copy a similar existing entry in `providers.yml`
3. Fill in all required fields: `keyname`, `display_name`, `category`, `authorize_url`, `token_url`, `pkce_enabled`
4. Open a PR
## Naming Conventions
- `keyname`: lowercase, hyphenated (e.g., `google-calendar`, `hubspot`)
- `display_name`: official product name (e.g., `Google Calendar`, `HubSpot`)
## PR Checklist
- [ ] YAML is valid (CI will check this)
- [ ] All required fields are present
- [ ] `keyname` is unique
- [ ] `category` is from the valid list (see README)
- [ ] URLs use `https://` (or contain `${connectionConfig` for dynamic URLs)
- [ ] Tested the OAuth flow, or linked to the provider's OAuth documentation
## Questions?
Open an issue — we're happy to help.
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 TRMNL (trmnl.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+51
View File
@@ -0,0 +1,51 @@
# OAuth2 Provider Templates
Community-maintained OAuth2 provider templates for [TRMNL](https://trmnl.com) private plugins.
These templates auto-fill OAuth configuration when users select a provider. Users still need to create their own OAuth app and enter their `client_id` / `client_secret`.
## Adding a Provider
1. Fork this repo
2. Edit `providers.yml` — copy a similar existing entry and fill in the fields
3. Open a PR
### Required Fields
| Field | Description |
|-------|-------------|
| `keyname` | Unique identifier (lowercase, hyphenated) |
| `display_name` | Human-readable name shown in dropdown |
| `category` | Category for grouping(see providors.yml) |
| `authorize_url` | OAuth2 authorization endpoint |
| `token_url` | OAuth2 token endpoint |
| `pkce_enabled` | `'yes'` or `'no'` |
### Optional Fields
All optional fields are documented in the YAML header comments at the top of `providers.yml`.
## Community Help Wanted
This list is community-maintained and some providers may have outdated URLs or deprecated OAuth2 endpoints. We welcome contributions to keep things current:
- **Report a broken provider** — [open an issue](../../issues/new?template=broken-provider.md) if a provider no longer works
- **Fix a provider** — submit a PR with corrected URLs, scopes, or fields
- **Remove a dead provider** — if a service has shut down, open a PR to remove it
## Schema Reference
The full schema is documented in the YAML header comments at the top of `providers.yml`.
## Attribution
Part of the factual api data was ported from the aggregated lists located in:
- Nango https://github.com/NangoHQ/nango
- NextAuth https://github.com/nextauthjs/next-auth
- Grant https://github.com/simov/grant
- Handshake https://github.com/portalform/handshake
## License
MIT — see [LICENSE](LICENSE).
+3775
View File
File diff suppressed because it is too large Load Diff