API

Basic API for Caddy

Caddy admin

Initial functions


source

get_id


def get_id(
    path
):

Get a ID full URL from a path

host = 'jph.answer.ai'
get_id('jph.answer.ai')
'http://localhost:2019/id/jph.answer.ai/'

source

get_path


def get_path(
    path
):

Get a config full URL from a path

get_path('/apps/tls/automation/policies')
'http://localhost:2019/config/apps/tls/automation/policies/'

source

gid


def gid(
    path:str='/'
):

Gets the id at path


source

has_id


def has_id(
    id
):

Check if id is set up


source

gcfg


def gcfg(
    path:str='/', method:str='get'
):

Gets the config at path


source

has_path


def has_path(
    path
):

Check if path is set up

gcfg()

source

pid


def pid(
    d, path:str='/', method:str='post'
):

Puts the config d into path


source

pcfg


def pcfg(
    d, path:str='/', method:str='post'
):

Puts the config d into path

# pcfg({})

source

nested_setdict


def nested_setdict(
    sd, value, keys:VAR_POSITIONAL
):

Returns sd updated to set value at the path keys

nested_setdict({'a':'b'}, {'c':'d'}, 'apps', 'http', 'servers', 'srv0')
{'a': 'b', 'apps': {'http': {'servers': {'srv0': {'c': 'd'}}}}}

source

path2keys


def path2keys(
    path
):

Split path by ‘/’ into a list

path2keys('/apps/tls/automation/policies')
['apps', 'tls', 'automation', 'policies']

source

keys2path


def keys2path(
    keys:VAR_POSITIONAL
):

Join keys into a ‘/’ separated path

keys2path('apps', 'tls', 'automation', 'policies')
'/apps/tls/automation/policies'

source

nested_setcfg


def nested_setcfg(
    value, keys:VAR_POSITIONAL
):

source

init_path


def init_path(
    path, skip:int=0
):

Automation setup

cf_token = os.environ.get('CADDY_CF_TOKEN', 'XXX')

source

get_acme_config


def get_acme_config(
    token
):

source

add_tls_internal_config


def add_tls_internal_config(
    
):

source

add_acme_config


def add_acme_config(
    cf_token
):
# add_acme_config(cf_token)
# gcfg('/apps/tls/automation/policies')[0]

Route setup


source

init_routes


def init_routes(
    srv_name:str='srv0', skip:int=1
):

Create basic http server/routes config

init_routes()

source

setup_pki_trust


def setup_pki_trust(
    install_trust
):

Configure PKI certificate authority trust installation


source

setup_caddy


def setup_caddy(
    cf_token:NoneType=None, # Cloudflare API token
    srv_name:str='srv0', # Server name in the Caddyfile
    local:bool=False, # Whether or not this is for localdev or deployment
    install_trust:bool=None, # Install trust store?
):

Create SSL config and HTTP app skeleton

# pcfg({})
setup_caddy(cf_token)
# gcfg(srvs_path)

source

add_route


def add_route(
    route
):

Add route dict to config


source

del_id


def del_id(
    id
):

Delete route for id (e.g. a host)

# del_id(host)

source

add_reverse_proxy


def add_reverse_proxy(
    from_host, to_url, st_delay:str='1m', compress:bool=True
):

Create a reverse proxy handler

host = 'foo.fast.ai'
# add_reverse_proxy(host, "localhost:5001")
# gid(host)

source

add_wildcard_route


def add_wildcard_route(
    domain
):

Add a wildcard subdomain

add_wildcard_route('something.fast.ai')

source

add_sub_reverse_proxy


def add_sub_reverse_proxy(
    domain, subdomain, port:Union, # A single port or list of ports
    host:str='localhost', st_delay:str='1m', encode:bool=True
):

Add a reverse proxy to a wildcard subdomain supporting multiple ports

add_sub_reverse_proxy('something.fast.ai', 'foo', 5001)
del_id('foo.something.fast.ai')