Code updates for AUR package

This commit is contained in:
Anthony Wang 2022-05-20 10:57:58 -05:00
parent e02d54322c
commit 3f22c99f77
Signed by: a
GPG key ID: BC96B00AEC5F2D76
6 changed files with 81 additions and 5 deletions

20
.SRCINFO Normal file
View file

@ -0,0 +1,20 @@
pkgbase = porkbun-dynamic-dns-python-git
pkgdesc = Our minimalist dynamic DNS client written in Python
pkgver = r14.e02d543
pkgrel = 1
url = https://github.com/Ta180m/porkbun-dynamic-dns-python
arch = any
license = MIT
depends = python
depends = python-requests
backup = etc/porkbun-ddns.json
source = porkbun-ddns.py
source = config.json.example
source = systemd.service
source = systemd.timer
sha256sums = SKIP
sha256sums = SKIP
sha256sums = SKIP
sha256sums = SKIP
pkgname = porkbun-dynamic-dns-python-git

30
PKGBUILD Normal file
View file

@ -0,0 +1,30 @@
# Maintainer: Anthony Wang <ta180m@pm.me>
_pkgname=porkbun-dynamic-dns-python
pkgname=${_pkgname}-git
pkgver=r14.e02d543
pkgrel=1
pkgdesc="Our minimalist dynamic DNS client written in Python"
arch=(any)
url="https://github.com/Ta180m/porkbun-dynamic-dns-python"
license=('MIT')
depends=('python' 'python-requests')
backup=('etc/porkbun-ddns.json')
source=("porkbun-ddns.py"
"config.json.example"
"systemd.service"
"systemd.timer")
sha256sums=(SKIP
SKIP
SKIP
SKIP)
pkgver() {
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
package() {
install -vDm755 porkbun-ddns.py "$pkgdir/usr/bin/porkbun-ddns"
install -vDm600 config.json.example "$pkgdir/etc/porkbun-ddns.json"
install -vDm644 systemd.service "$pkgdir/usr/lib/systemd/system/porkbun-ddns.service"
install -vDm644 systemd.timer "$pkgdir/usr/lib/systemd/system/porkbun-ddns.timer"
}

View file

@ -1,4 +1,5 @@
{ "endpoint":"https://api-ipv4.porkbun.com/api/json/v3", {
"domain": "",
"apikey": "", "apikey": "",
"secretapikey": "" "secretapikey": ""
} }

View file

@ -61,7 +61,7 @@ def main(args):
description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
) )
parser.add_argument("config", nargs=1, help="path to config file") parser.add_argument("config", nargs=1, help="path to config file")
parser.add_argument("domain", nargs=1, help="domain to be updated") parser.add_argument("domain", nargs="?", default="", help="domain to be updated")
parser.add_argument("subdomain", nargs="?", default="", help="optional subdomain") parser.add_argument("subdomain", nargs="?", default="", help="optional subdomain")
parser.add_argument( parser.add_argument(
"-i", "-i",
@ -70,19 +70,30 @@ def main(args):
) )
args = parser.parse_args() args = parser.parse_args()
args.domain, args.config = args.domain[0], args.config[0] args.config = args.config[0]
args.fqdn = "{}.{}".format(args.subdomain, args.domain).strip(".")
try: try:
with sys.stdin if args.config == "-" else open(args.config) as file_: with sys.stdin if args.config == "-" else open(args.config) as file_:
args.cfg = json.load(file_) args.cfg = json.load(file_)
except Exception as e: except Exception as e:
err(e) err(e)
# Load domain from JSON config file if not specified as an arg
if args.domain == "":
args.domain = args.cfg["domain"]
if args.subdomain == "" and "subdomain" in args.cfg:
args.subdomain = args.cfg["subdomain"]
args.fqdn = "{}.{}".format(args.subdomain, args.domain).strip(".")
required = ["secretapikey", "apikey"] required = ["secretapikey", "apikey"]
if any(x not in args.cfg for x in required) or not isinstance(args.cfg, dict): if any(x not in args.cfg for x in required) or not isinstance(args.cfg, dict):
err("all of the following are required in '{}': {}", args.config, required) err("all of the following are required in '{}': {}", args.config, required)
args.cfg.setdefault("endpoint", "https://porkbun.com/api/json/v3/") args.cfg.setdefault("endpoint", "https://porkbun.com/api/json/v3/")
if not args.public_ip and "public_ip" in args.cfg:
args.public_ip = args.cfg["public_ip"]
if not args.public_ip: if not args.public_ip:
args.public_ip = api(args, "/ping/")["yourIp"] args.public_ip = api(args, "/ping/")["yourIp"]
args.public_ip = ipaddress.ip_address(args.public_ip) args.public_ip = ipaddress.ip_address(args.public_ip)

5
systemd.service Normal file
View file

@ -0,0 +1,5 @@
[Unit]
Description=Detect external IP address and create/update a corresponding DNS record
[Service]
ExecStart=/usr/bin/porkbun-ddns /etc/porkbun-ddns.json

9
systemd.timer Normal file
View file

@ -0,0 +1,9 @@
[Unit]
Description=Detect external IP address and create/update a corresponding DNS record every 15 minutes
[Timer]
OnBootSec=15min
OnUnitActiveSec=15min
[Install]
WantedBy=timers.target