feat(oauth2): provider.toml config file with template
This commit is contained in:
parent
bc7a615dcf
commit
7557a7aa76
3 changed files with 208 additions and 0 deletions
1
src/auth/extra/.gitignore
vendored
Normal file
1
src/auth/extra/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
providers.toml
|
||||||
186
src/auth/extra/providers.schema.json
Normal file
186
src/auth/extra/providers.schema.json
Normal file
|
|
@ -0,0 +1,186 @@
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"providers": {
|
||||||
|
"type": "object",
|
||||||
|
"patternProperties": {
|
||||||
|
"^(.*)$": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"token_url": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"auth_url": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"info_url": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"client_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"client_secret": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"env": {
|
||||||
|
"description": "Secret is stored in the env var",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"env"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"inline": {
|
||||||
|
"description": "Secret is inline here",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"inline"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"scopes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"redirect_url": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"default": {
|
||||||
|
"unique_id": "email",
|
||||||
|
"name": "name"
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"unique_id": {
|
||||||
|
"description": "A unique identifier for this provider",
|
||||||
|
"default": "email",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "A name for this provider",
|
||||||
|
"default": "name",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"unique_id",
|
||||||
|
"name"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"token_url",
|
||||||
|
"auth_url",
|
||||||
|
"info_url",
|
||||||
|
"client_id",
|
||||||
|
"client_secret",
|
||||||
|
"scopes",
|
||||||
|
"redirect_url",
|
||||||
|
"user"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"openid_url": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"client_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"client_secret": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"env": {
|
||||||
|
"description": "Secret is stored in the env var",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"env"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"inline": {
|
||||||
|
"description": "Secret is inline here",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"inline"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"scopes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"redirect_url": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"default": {
|
||||||
|
"unique_id": "email",
|
||||||
|
"name": "name"
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"unique_id": {
|
||||||
|
"description": "A unique identifier for this provider",
|
||||||
|
"default": "email",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "A name for this provider",
|
||||||
|
"default": "name",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"unique_id",
|
||||||
|
"name"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"openid_url",
|
||||||
|
"client_id",
|
||||||
|
"client_secret",
|
||||||
|
"scopes",
|
||||||
|
"redirect_url",
|
||||||
|
"user"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"$schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"providers"
|
||||||
|
]
|
||||||
|
}
|
||||||
21
src/auth/extra/providers.toml.template
Normal file
21
src/auth/extra/providers.toml.template
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
"$schema" = "https://maix.me/providers.schema.json"
|
||||||
|
|
||||||
|
[providers.provider-openid]
|
||||||
|
openid_url = "https://example.com/openid-url-without-.wellknown"
|
||||||
|
client_id = "CLIENT_ID"
|
||||||
|
client_secret.inline = "INLINED SECRET INSIDE CONFIG FILE"
|
||||||
|
scopes = ["any needed scope here", "openid", "email"]
|
||||||
|
# this url is to point to the local thingy - ask maieul
|
||||||
|
redirect_url = "https://local.maix.me:8888/api/auth/oauth2/provider-openid/callback"
|
||||||
|
# from the `info_url` request, which json key we will take an unique provider id (default:email) and an name for the user (default:name)
|
||||||
|
user = { unique_id = "email", name = "name" }
|
||||||
|
|
||||||
|
[providers.discord]
|
||||||
|
auth_url = "https://discord.com/oauth2/authorize"
|
||||||
|
token_url = "https://discord.com/api/oauth2/token"
|
||||||
|
info_url = "https://discord.com/api/v10/users/@me"
|
||||||
|
client_secret.env = "PROVIDER_SECRET_DISCORD" # here the secret is provided in the env var with that name
|
||||||
|
client_id = "CLIENT_ID"
|
||||||
|
redirect_url = "https://local.maix.me:8888/api/auth/oauth2/discord/callback"
|
||||||
|
scopes = ["identify"] # here no email asked :)
|
||||||
|
user = { unique_id = "id", name = "username" } # for example discord provides some stuff, like unique_id and username, such that we dont have to ask additional permission to get the email
|
||||||
Loading…
Add table
Add a link
Reference in a new issue