mirror of
https://github.com/bunkerity/bunkerweb
synced 2026-05-24 09:28:37 +00:00
feat: add validation aliases for DNS provider API tokens and keys
This commit is contained in:
parent
792e7551c8
commit
52fb19e45d
1 changed files with 269 additions and 38 deletions
|
|
@ -3,7 +3,7 @@ from pathlib import Path
|
|||
from sys import path as sys_path
|
||||
from typing import Dict, List, Literal, Optional
|
||||
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
from pydantic import AliasChoices, BaseModel, ConfigDict, Field
|
||||
|
||||
# Define paths
|
||||
LIB_PATH = Path("/var/lib/bunkerweb/letsencrypt")
|
||||
|
|
@ -33,48 +33,154 @@ class Provider(BaseModel):
|
|||
class CloudflareProvider(Provider):
|
||||
"""Cloudflare DNS provider."""
|
||||
|
||||
dns_cloudflare_api_token: str
|
||||
dns_cloudflare_api_token: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_cloudflare_api_token",
|
||||
"cloudflare_api_key",
|
||||
"api_key",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class DigitalOceanProvider(Provider):
|
||||
"""DigitalOcean DNS provider."""
|
||||
|
||||
dns_digitalocean_token: str
|
||||
dns_digitalocean_token: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_digitalocean_token",
|
||||
"digitalocean_token",
|
||||
"token",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class DnsimpleProvider(Provider):
|
||||
"""DNSimple DNS provider."""
|
||||
|
||||
dns_dnsimple_token: str
|
||||
dns_dnsimple_token: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_dnsimple_token",
|
||||
"dnsimple_token",
|
||||
"token",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class DnsMadeEasyProvider(Provider):
|
||||
"""DNS Made Easy DNS provider."""
|
||||
|
||||
dns_dnsmadeeasy_api_key: str
|
||||
dns_dnsmadeeasy_secret_key: str
|
||||
dns_dnsmadeeasy_api_key: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_dnsmadeeasy_api_key",
|
||||
"dnsmadeeasy_api_key",
|
||||
"api_key",
|
||||
)
|
||||
)
|
||||
dns_dnsmadeeasy_secret_key: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_dnsmadeeasy_secret_key",
|
||||
"dnsmadeeasy_secret_key",
|
||||
"secret_key",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class GehirnProvider(Provider):
|
||||
"""Gehirn DNS provider."""
|
||||
|
||||
dns_gehirn_api_token: str
|
||||
dns_gehirn_api_secret: str
|
||||
dns_gehirn_api_token: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_gehirn_api_token",
|
||||
"gehirn_api_token",
|
||||
"api_token",
|
||||
)
|
||||
)
|
||||
dns_gehirn_api_secret: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_gehirn_api_secret",
|
||||
"gehirn_api_secret",
|
||||
"api_secret",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class GoogleProvider(Provider):
|
||||
"""Google Cloud DNS provider."""
|
||||
|
||||
type: str = "service_account"
|
||||
project_id: str
|
||||
private_key_id: str
|
||||
private_key: str
|
||||
client_email: str
|
||||
client_id: str
|
||||
auth_uri: str = "https://accounts.google.com/o/oauth2/auth"
|
||||
token_uri: str = "https://accounts.google.com/o/oauth2/token"
|
||||
auth_provider_x509_cert_url: str = "https://www.googleapis.com/oauth2/v1/certs"
|
||||
client_x509_cert_url: str
|
||||
type: str = Field(
|
||||
"service_account",
|
||||
validation_alias=AliasChoices(
|
||||
"type",
|
||||
"google_type",
|
||||
"dns_google_type",
|
||||
),
|
||||
)
|
||||
project_id: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"project_id",
|
||||
"google_project_id",
|
||||
"dns_google_project_id",
|
||||
)
|
||||
)
|
||||
private_key_id: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"private_key_id",
|
||||
"google_private_key_id",
|
||||
"dns_google_private_key_id",
|
||||
)
|
||||
)
|
||||
private_key: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"private_key",
|
||||
"google_private_key",
|
||||
"dns_google_private_key",
|
||||
)
|
||||
)
|
||||
client_email: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"client_email",
|
||||
"google_client_email",
|
||||
"dns_google_client_email",
|
||||
)
|
||||
)
|
||||
client_id: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"client_id",
|
||||
"google_client_id",
|
||||
"dns_google_client_id",
|
||||
)
|
||||
)
|
||||
auth_uri: str = Field(
|
||||
"https://accounts.google.com/o/oauth2/auth",
|
||||
validation_alias=AliasChoices(
|
||||
"auth_uri",
|
||||
"google_auth_uri",
|
||||
"dns_google_auth_uri",
|
||||
),
|
||||
)
|
||||
token_uri: str = Field(
|
||||
"https://accounts.google.com/o/oauth2/token",
|
||||
validation_alias=AliasChoices(
|
||||
"token_uri",
|
||||
"google_token_uri",
|
||||
"dns_google_token_uri",
|
||||
),
|
||||
)
|
||||
auth_provider_x509_cert_url: str = Field(
|
||||
"https://www.googleapis.com/oauth2/v1/certs",
|
||||
validation_alias=AliasChoices(
|
||||
"auth_provider_x509_cert_url",
|
||||
"google_auth_provider_x509_cert_url",
|
||||
"dns_google_auth_provider_x509_cert_url",
|
||||
),
|
||||
)
|
||||
client_x509_cert_url: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"client_x509_cert_url",
|
||||
"google_client_x509_cert_url",
|
||||
"dns_google_client_x509_cert_url",
|
||||
),
|
||||
)
|
||||
|
||||
def get_formatted_credentials(self) -> bytes:
|
||||
"""Return the formatted credentials in JSON format."""
|
||||
|
|
@ -89,41 +195,136 @@ class GoogleProvider(Provider):
|
|||
class LinodeProvider(Provider):
|
||||
"""Linode DNS provider."""
|
||||
|
||||
dns_linode_key: str
|
||||
dns_linode_version: str = "4"
|
||||
dns_linode_key: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_linode_key",
|
||||
"linode_key",
|
||||
"key",
|
||||
)
|
||||
)
|
||||
dns_linode_version: str = Field(
|
||||
"4",
|
||||
validation_alias=AliasChoices(
|
||||
"dns_linode_version",
|
||||
"linode_version",
|
||||
"version",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class LuaDnsProvider(Provider):
|
||||
"""LuaDns DNS provider."""
|
||||
|
||||
dns_luadns_email: str
|
||||
dns_luadns_token: str
|
||||
dns_luadns_email: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_luadns_email",
|
||||
"luadns_email",
|
||||
"email",
|
||||
)
|
||||
)
|
||||
dns_luadns_token: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_luadns_token",
|
||||
"luadns_token",
|
||||
"token",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class NSOneProvider(Provider):
|
||||
"""NS1 DNS provider."""
|
||||
|
||||
dns_nsone_api_key: str
|
||||
dns_nsone_api_key: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_nsone_api_key",
|
||||
"nsone_api_key",
|
||||
"api_key",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class OvhProvider(Provider):
|
||||
"""OVH DNS provider."""
|
||||
|
||||
dns_ovh_endpoint: str = "ovh-eu"
|
||||
dns_ovh_application_key: str
|
||||
dns_ovh_application_secret: str
|
||||
dns_ovh_consumer_key: str
|
||||
dns_ovh_endpoint: str = Field(
|
||||
"ovh-eu",
|
||||
validation_alias=AliasChoices(
|
||||
"dns_ovh_endpoint",
|
||||
"ovh_endpoint",
|
||||
"endpoint",
|
||||
),
|
||||
)
|
||||
dns_ovh_application_key: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_ovh_application_key",
|
||||
"ovh_application_key",
|
||||
"application_key",
|
||||
)
|
||||
)
|
||||
dns_ovh_application_secret: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_ovh_application_secret",
|
||||
"ovh_application_secret",
|
||||
"application_secret",
|
||||
)
|
||||
)
|
||||
dns_ovh_consumer_key: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_ovh_consumer_key",
|
||||
"ovh_consumer_key",
|
||||
"consumer_key",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class Rfc2136Provider(Provider):
|
||||
"""RFC 2136 DNS provider."""
|
||||
|
||||
dns_rfc2136_server: str
|
||||
dns_rfc2136_port: Optional[str] = None
|
||||
dns_rfc2136_name: str
|
||||
dns_rfc2136_secret: str
|
||||
dns_rfc2136_algorithm: str = "HMAC-MD5"
|
||||
dns_rfc2136_sign_query: str = "false"
|
||||
dns_rfc2136_server: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_rfc2136_server",
|
||||
"rfc2136_server",
|
||||
"server",
|
||||
)
|
||||
)
|
||||
dns_rfc2136_port: Optional[str] = Field(
|
||||
None,
|
||||
validation_alias=AliasChoices(
|
||||
"dns_rfc2136_port",
|
||||
"rfc2136_port",
|
||||
"port",
|
||||
),
|
||||
)
|
||||
dns_rfc2136_name: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_rfc2136_name",
|
||||
"rfc2136_name",
|
||||
"name",
|
||||
)
|
||||
)
|
||||
dns_rfc2136_secret: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_rfc2136_secret",
|
||||
"rfc2136_secret",
|
||||
"secret",
|
||||
)
|
||||
)
|
||||
dns_rfc2136_algorithm: str = Field(
|
||||
"HMAC-MD5",
|
||||
validation_alias=AliasChoices(
|
||||
"dns_rfc2136_algorithm",
|
||||
"rfc2136_algorithm",
|
||||
"algorithm",
|
||||
),
|
||||
)
|
||||
dns_rfc2136_sign_query: str = Field(
|
||||
"false",
|
||||
validation_alias=AliasChoices(
|
||||
"dns_rfc2136_sign_query",
|
||||
"rfc2136_sign_query",
|
||||
"sign_query",
|
||||
),
|
||||
)
|
||||
|
||||
def get_formatted_credentials(self) -> bytes:
|
||||
"""Return the formatted credentials, excluding defaults."""
|
||||
|
|
@ -133,8 +334,20 @@ class Rfc2136Provider(Provider):
|
|||
class Route53Provider(Provider):
|
||||
"""AWS Route 53 DNS provider."""
|
||||
|
||||
aws_access_key_id: str
|
||||
aws_secret_access_key: str
|
||||
aws_access_key_id: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"aws_access_key_id",
|
||||
"dns_aws_access_key_id",
|
||||
"access_key_id",
|
||||
)
|
||||
)
|
||||
aws_secret_access_key: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"aws_secret_access_key",
|
||||
"dns_aws_secret_access_key",
|
||||
"secret_access_key",
|
||||
)
|
||||
)
|
||||
|
||||
def get_formatted_credentials(self) -> bytes:
|
||||
"""Return the formatted credentials in environment variable format."""
|
||||
|
|
@ -149,14 +362,32 @@ class Route53Provider(Provider):
|
|||
class SakuraCloudProvider(Provider):
|
||||
"""Sakura Cloud DNS provider."""
|
||||
|
||||
dns_sakuracloud_api_token: str
|
||||
dns_sakuracloud_api_secret: str
|
||||
dns_sakuracloud_api_token: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_sakuracloud_api_token",
|
||||
"sakuracloud_api_token",
|
||||
"api_token",
|
||||
)
|
||||
)
|
||||
dns_sakuracloud_api_secret: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_sakuracloud_api_secret",
|
||||
"sakuracloud_api_secret",
|
||||
"api_secret",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class ScalewayProvider(Provider):
|
||||
"""Scaleway DNS provider."""
|
||||
|
||||
dns_scaleway_application_token: str
|
||||
dns_scaleway_application_token: str = Field(
|
||||
validation_alias=AliasChoices(
|
||||
"dns_scaleway_application_token",
|
||||
"scaleway_application_token",
|
||||
"application_token",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class WildcardGenerator:
|
||||
|
|
|
|||
Loading…
Reference in a new issue