v0.2.0
This commit is contained in:
		
							
								
								
									
										9
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								Makefile
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										54
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,8 +1,9 @@ | |||||||
| # piglet | # 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 | - Create a DNS record | ||||||
| - Edit record | - Edit record | ||||||
| @@ -11,13 +12,44 @@ Currently piglet can: | |||||||
|  |  | ||||||
| # Installation | # Installation | ||||||
|  |  | ||||||
| Just copy `piglet` to your PATH. For example: | 1. Clone this Git-repository. | ||||||
|  | 2. Install files. | ||||||
|  |  | ||||||
|  | Installation with Makefile: | ||||||
|  |  | ||||||
| ```sh | ```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 | # Getting started | ||||||
|  |  | ||||||
| @@ -27,30 +59,30 @@ For first step setup the configuration file: | |||||||
| piglet config | piglet config | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| piglet creates `~/.config/piglet.conf` file with API credentials. | piglet creates `~/.config/piglet/piglet.conf` file with API credentials. | ||||||
|  |  | ||||||
| Retrieve DNS records: | Retrieve DNS records: | ||||||
|  |  | ||||||
| ```sh | ```sh | ||||||
| piglet -d example.org retrieve | piglet retrieve example.com | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| Create A-record on subdomain `mail`: | Create A-record on subdomain `mail`: | ||||||
|  |  | ||||||
| ```sh | ```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): | Edit A-record for `example.org` (change to 127.0.0.1): | ||||||
|  |  | ||||||
| ```sh | ```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: | Delete DNS record by id: | ||||||
|  |  | ||||||
| ```sh | ```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
									
								
							
							
						
						
									
										5
									
								
								completion.bash
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										57
									
								
								piglet
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								piglet
									
									
									
									
									
								
							| @@ -27,11 +27,15 @@ | |||||||
| # | # | ||||||
| # For more information, please refer to <http://unlicense.org/> | # 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="${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() { | print_help() { | ||||||
| cat <<- 'EOF' |     cat <<- 'EOF' | ||||||
| Porkbun DNS API client. | Porkbun DNS API client. | ||||||
|  |  | ||||||
| /\ ____ /\ | /\ ____ /\ | ||||||
| @@ -40,7 +44,7 @@ Porkbun DNS API client. | |||||||
| \        /&" | \        /&" | ||||||
|  |_|--|_| |  |_|--|_| | ||||||
|  |  | ||||||
| Usage: piglet [-cdjhv] command [arg=value ...] | Usage: piglet [-cdjhv] command <domain> [arg=value ...] | ||||||
|  |  | ||||||
| Options: | Options: | ||||||
|     -c, --config    path to configuration file [default: ~/.config/piglet.conf] |     -c, --config    path to configuration file [default: ~/.config/piglet.conf] | ||||||
| @@ -237,6 +241,15 @@ _init_piglet() { | |||||||
|     fi |     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() { | piglet_config() { | ||||||
|     mkdir -p "$HOME"/.config |     mkdir -p "$HOME"/.config | ||||||
|  |  | ||||||
| @@ -247,12 +260,13 @@ piglet_config() { | |||||||
|     printf 'API_Key: '; read -r api_key |     printf 'API_Key: '; read -r api_key | ||||||
|     printf 'Secret_API_Key: '; read -r secret_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 | # Porkbun DNS API credentials | ||||||
| API_Key=$api_key | API_Key=$api_key | ||||||
| Secret_API_Key=$secret_api_key | Secret_API_Key=$secret_api_key | ||||||
| EOF | EOF | ||||||
|     printf 'Config saved as %s\n' "$piglet_conf" |     printf 'Config saved as %s\n' "$piglet_conf_alt" | ||||||
| } | } | ||||||
|  |  | ||||||
| piglet_create() { | piglet_create() { | ||||||
| @@ -299,9 +313,13 @@ piglet_create() { | |||||||
|                 echo "Unknown option: $1" >&2 |                 echo "Unknown option: $1" >&2 | ||||||
|                 exit 1 |                 exit 1 | ||||||
|                 ;; |                 ;; | ||||||
|             *) |             *=*) | ||||||
|                 echo "Unknown key: $1" >&2 |                 echo "Unknown key: $1" >&2 | ||||||
|                 exit 1 |                 exit 1 | ||||||
|  |                 ;; | ||||||
|  |             *) | ||||||
|  |                 split_name "$1" | ||||||
|  |                 shift | ||||||
|         esac |         esac | ||||||
|     done |     done | ||||||
|  |  | ||||||
| @@ -359,9 +377,13 @@ piglet_edit() { | |||||||
|                 echo "Unknown option: $1" >&2 |                 echo "Unknown option: $1" >&2 | ||||||
|                 exit 1 |                 exit 1 | ||||||
|                 ;; |                 ;; | ||||||
|             *) |             *=*) | ||||||
|                 echo "Unknown key: $1" >&2 |                 echo "Unknown key: $1" >&2 | ||||||
|                 exit 1 |                 exit 1 | ||||||
|  |                 ;; | ||||||
|  |             *) | ||||||
|  |                 split_name "$1" | ||||||
|  |                 shift | ||||||
|         esac |         esac | ||||||
|     done |     done | ||||||
|  |  | ||||||
| @@ -399,9 +421,13 @@ piglet_delete() { | |||||||
|                 echo "Unknown option: $1" >&2 |                 echo "Unknown option: $1" >&2 | ||||||
|                 exit 1 |                 exit 1 | ||||||
|                 ;; |                 ;; | ||||||
|             *) |             *=*) | ||||||
|                 echo "Unknown key: $1" >&2 |                 echo "Unknown key: $1" >&2 | ||||||
|                 exit 1 |                 exit 1 | ||||||
|  |                 ;; | ||||||
|  |             *) | ||||||
|  |                 split_name "$1" | ||||||
|  |                 shift | ||||||
|         esac |         esac | ||||||
|     done |     done | ||||||
|  |  | ||||||
| @@ -444,9 +470,13 @@ piglet_retrieve() { | |||||||
|                 echo "Unknown option: $1" >&2 |                 echo "Unknown option: $1" >&2 | ||||||
|                 exit 1 |                 exit 1 | ||||||
|                 ;; |                 ;; | ||||||
|             *) |             *=*) | ||||||
|                 echo "Unknown key: $1" >&2 |                 echo "Unknown key: $1" >&2 | ||||||
|                 exit 1 |                 exit 1 | ||||||
|  |                 ;; | ||||||
|  |             *) | ||||||
|  |                 split_name "$1" | ||||||
|  |                 shift | ||||||
|         esac |         esac | ||||||
|     done |     done | ||||||
|  |  | ||||||
| @@ -574,7 +604,12 @@ while [ "$#" -ne 0 ]; do | |||||||
|             exit 1 |             exit 1 | ||||||
|             ;; |             ;; | ||||||
|         *) |         *) | ||||||
|             echo "Unknown command: $1" >&2 |             if echo "$1" | grep -E '.+\..+' >/dev/null 2>&1; then | ||||||
|             exit 1 |                 split_name "$1" | ||||||
|  |                 shift | ||||||
|  |             else | ||||||
|  |                 echo "Unknown command: $1" >&2 | ||||||
|  |                 exit 1 | ||||||
|  |             fi | ||||||
|     esac |     esac | ||||||
| done | done | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user