add initial version

This commit is contained in:
2024-10-27 11:23:31 +01:00
parent f74c15d5b6
commit 53004a7ece
4 changed files with 96 additions and 0 deletions

69
CaddyAPI.py Normal file
View File

@@ -0,0 +1,69 @@
import requests
import logging
import json
class CaddyAPI:
"""API wrapper for Caddy"""
__AUTHOR__ = 'anima'
__VERSION__ = '0.1.0'
_log = logging.getLogger(__name__)
__logFile = logging.FileHandler('CaddyAPI.log')
__logPrinter = logging.StreamHandler()
__logFormat = logging.Formatter('%(asctime)s %(levelname)s \t %(name)s : %(message)s')
__logFile.setFormatter(__logFormat)
__logPrinter.setFormatter(__logFormat)
_log.addHandler(__logFile)
_log.addHandler(__logPrinter)
def __init__(self, host: str, port: int = 2019) -> None:
self.__baseurl = host
self.__port = port
def __query(self, path: str, data: str = None) -> dict | bool:
"""base query method
"""
url = f'http://{self.__baseurl}:{self.__port}/{path}'
headers = {
"Accept": "application/json"
}
if data is None:
response = requests.get(url, headers = headers)
else:
response = requests.post(url, headers = headers, json = data)
if response.status_code == 200:
content = response.content.decode()
if content.startswith('{'):
return response.json()
else: return True
else:
self._log.error(f'error on api call {response.status_code} {response.url=} {data=}')
return False
def get_config(self, saveTo: str = None) -> dict:
config = self.__query('config')
if config and config is not None:
if saveTo is not None:
with open(saveTo, 'w') as f:
f.write(json.dumps(config))
return config
def load_config(self, configFile: str):
if configFile is not None:
with open(configFile, 'r') as f:
config = json.load(f)
return self.__query('load', config)
return config
else:
return False
if __name__ == '__main__':
caddy = CaddyAPI('localhost')
data = caddy.get_config('caddy.bak.json')
print(f'{data=}')
load = caddy.load_config('caddy.json')
print(f'{load=}')

14
caddy/compose.yml Executable file
View File

@@ -0,0 +1,14 @@
services:
caddy:
image: caddy:${TAG:-alpine}
container_name: caddy
restart: unless-stopped
ports:
- 80:80
- 443:443
- ${APIPORT:-2019}:2019
volumes:
- ${BASEDIR:-./files}/conf/:/etc/caddy/
- ${BASEDIR:-./files}/data/:/data/
#environment:
# - CADDY_ADMIN='0.0.0.0'

12
caddy/files/conf/Caddyfile Executable file
View File

@@ -0,0 +1,12 @@
# https://caddyserver.com/docs/caddyfile/options#admin
# https://caddyserver.com/docs/json/admin/
# https://caddyserver.com/docs/caddyfile
{
admin 0.0.0.0:2019
auto_https off
}
:80 {
respond "Hello, World"
}
}

1
requirements.txt Normal file
View File

@@ -0,0 +1 @@
requests