This commit is contained in:
ge 2022-12-18 01:42:39 +03:00
parent 5a77aea485
commit 43c79e1682
4 changed files with 103 additions and 22 deletions

9
Makefile Normal file
View File

@ -0,0 +1,9 @@
PREFIX ?= /usr/local
install:
install -Dm755 piglet $(PREFIX)/bin/piglet
install -Dm644 completion.bash $(PREFIX)/share/bash-completion/completions/piglet
uninstall:
rm -v $(PREFIX)/bin/piglet
rm -v $(PREFIX)/share/bash-completion/completions/piglet

View File

@ -1,8 +1,9 @@
# piglet
piglet is a [Porkbun DNS API](https://porkbun.com/api/json/v3/documentation) CLI client.
**piglet** is a [Porkbun DNS API](https://porkbun.com/api/json/v3/documentation)
CLI client.
Currently piglet can:
Currently **piglet** can:
- Create a DNS record
- Edit record
@ -11,13 +12,44 @@ Currently piglet can:
# Installation
Just copy `piglet` to your PATH. For example:
1. Clone this Git-repository.
2. Install files.
Installation with Makefile:
```sh
install -Dm755 piglet /usr/local/bin/piglet
# System-wide installation
sudo make install
# Local installation (into user's home dir)
PREFIX=~/.local make install
```
Install [jq](https://stedolan.github.io/jq/) to enable pretty output.
Manual installation:
```sh
# Just copy files into your PATH, for example:
sudo install -Dm755 piglet /usr/local/bin/piglet
sudo install -Dm644 completion.bash /usr/share/bash-completion/completions/piglet
```
Make sure your shell loads files from `/usr/local/share/bash-completion/completions`
or `~/.local/share/bash-completion/completions` for Bash completion.
Add to your **~/.bashrc**:
```sh
for completion in {/usr/local,~/.local}/share/bash-completion/completions/*; do
[ -f "$completion" ] && . "$completion"
done
```
Create file `~/.config/piglet/domains.list` with your domains list (each domain on
new line) for complete domains names. For example:
```
example.com
another-domain.tld
```
# Getting started
@ -27,30 +59,30 @@ For first step setup the configuration file:
piglet config
```
piglet creates `~/.config/piglet.conf` file with API credentials.
piglet creates `~/.config/piglet/piglet.conf` file with API credentials.
Retrieve DNS records:
```sh
piglet -d example.org retrieve
piglet retrieve example.com
```
Create A-record on subdomain `mail`:
```sh
piglet -d example.org create name=mail type=a content=127.0.0.1 ttl=3600
piglet create mail.example.com type=a content=127.0.0.1 ttl=3600
```
Edit A-record for `example.org` (change to 127.0.0.1):
```sh
piglet -d example.org edit id=220755500 type=a content=127.0.0.1
piglet edit example.org id=220755500 type=a content=127.0.0.1
```
Delete DNS record by id:
```sh
piglet -d example.org delete id=220755592
piglet delete example.org id=220755592
```
See `piglet --help` for more info.
See **piglet --help** for more info.

5
completion.bash Normal file
View File

@ -0,0 +1,5 @@
# Bash completion for piglet
# https://git.nxhs.cloud/ge/piglet
complete -W "create edit delete retrieve \
$(cat ~/.config/piglet/domains.list | tr '\n' ' ')" piglet

51
piglet
View File

@ -27,8 +27,12 @@
#
# For more information, please refer to <http://unlicense.org/>
piglet_version='0.1.3'
piglet_version='0.2.0'
piglet_conf="${HOME}/.config/piglet.conf"
piglet_conf_dir="${HOME}/.config/piglet"
piglet_conf_alt="$piglet_conf_dir/piglet.conf"
[ -f "$piglet_conf_alt" ] && piglet_conf="$piglet_conf_alt"
print_help() {
cat <<- 'EOF'
@ -40,7 +44,7 @@ Porkbun DNS API client.
\ /&"
|_|--|_|
Usage: piglet [-cdjhv] command [arg=value ...]
Usage: piglet [-cdjhv] command <domain> [arg=value ...]
Options:
-c, --config path to configuration file [default: ~/.config/piglet.conf]
@ -237,6 +241,15 @@ _init_piglet() {
fi
}
split_name() {
if [ "$(echo "$1" | tr . ' ' | wc -w)" -gt 2 ]; then
name="$(echo "$1" | awk -F. '{NF-=2} 1' | sed 's/ /\./g')"
domain="$(echo "$1" | awk -F. 'END {print $(NF-1), $NF}' | sed 's/ /\./g')"
else
domain="$1"
fi
}
piglet_config() {
mkdir -p "$HOME"/.config
@ -247,12 +260,13 @@ piglet_config() {
printf 'API_Key: '; read -r api_key
printf 'Secret_API_Key: '; read -r secret_api_key
cat > "$piglet_conf" <<- EOF
mkdir -p "$piglet_conf_dir"
cat > "$piglet_conf_alt" <<- EOF
# Porkbun DNS API credentials
API_Key=$api_key
Secret_API_Key=$secret_api_key
EOF
printf 'Config saved as %s\n' "$piglet_conf"
printf 'Config saved as %s\n' "$piglet_conf_alt"
}
piglet_create() {
@ -299,9 +313,13 @@ piglet_create() {
echo "Unknown option: $1" >&2
exit 1
;;
*)
*=*)
echo "Unknown key: $1" >&2
exit 1
;;
*)
split_name "$1"
shift
esac
done
@ -359,9 +377,13 @@ piglet_edit() {
echo "Unknown option: $1" >&2
exit 1
;;
*)
*=*)
echo "Unknown key: $1" >&2
exit 1
;;
*)
split_name "$1"
shift
esac
done
@ -399,9 +421,13 @@ piglet_delete() {
echo "Unknown option: $1" >&2
exit 1
;;
*)
*=*)
echo "Unknown key: $1" >&2
exit 1
;;
*)
split_name "$1"
shift
esac
done
@ -444,9 +470,13 @@ piglet_retrieve() {
echo "Unknown option: $1" >&2
exit 1
;;
*)
*=*)
echo "Unknown key: $1" >&2
exit 1
;;
*)
split_name "$1"
shift
esac
done
@ -574,7 +604,12 @@ while [ "$#" -ne 0 ]; do
exit 1
;;
*)
if echo "$1" | grep -E '.+\..+' >/dev/null 2>&1; then
split_name "$1"
shift
else
echo "Unknown command: $1" >&2
exit 1
fi
esac
done