Compare commits

..

10 Commits

2 changed files with 263 additions and 16 deletions

View File

@@ -26,14 +26,14 @@ The following API endpoints are the ones that will be supported, the currently i
- [x] [DNS Edit Record by Domain and ID](https://porkbun.com/api/json/v3/documentation#DNS%20Edit%20Record%20by%20Domain%20and%20ID)
- [x] [DNS Edit Records by Domain, Subdomain and Type](https://porkbun.com/api/json/v3/documentation#DNS%20Edit%20Record%20by%20Domain,%20Subdomain%20and%20Type)
- [x] [DNS Delete Record by Domain and ID](https://porkbun.com/api/json/v3/documentation#DNS%20Delete%20Record%20by%20Domain%20and%20ID)
- [ ] [DNS Delete Records by Domain, Subdomain and Type](https://porkbun.com/api/json/v3/documentation#DNS%20Delete%20Records%20by%20Domain,%20Subdomain%20and%20Type)
- [ ] [DNS Retrieve Records by Domain or ID](https://porkbun.com/api/json/v3/documentation#DNS%20Retrieve%20Records%20by%20Domain%20or%20ID)
- [ ] [DNS Retrieve Records by Domain, Subdomain and Type](https://porkbun.com/api/json/v3/documentation#DNS%20Retrieve%20Records%20by%20Domain,%20Subdomain%20and%20Type)
- [x] [DNS Delete Records by Domain, Subdomain and Type](https://porkbun.com/api/json/v3/documentation#DNS%20Delete%20Records%20by%20Domain,%20Subdomain%20and%20Type)
- [x] [DNS Retrieve Records by Domain or ID](https://porkbun.com/api/json/v3/documentation#DNS%20Retrieve%20Records%20by%20Domain%20or%20ID)
- [x] [DNS Retrieve Records by Domain, Subdomain and Type](https://porkbun.com/api/json/v3/documentation#DNS%20Retrieve%20Records%20by%20Domain,%20Subdomain%20and%20Type)
## Usage
1. Create API keys for your account, on [Account > API Access](https://porkbun.com/account/api)
2. Enable "API Access" on the domains, press on "Details" and check the "API Access" settings on the desires domains.
2. Enable "API Access" on the domains, press on "Details" and check the "API Access" settings on the desired domains.
3. Execute the script, it will prompt for your API credentials the first time you launch it. The configuration file is saved on the same location as is the script.
> The generated file is in plain text, with 600 (rw-------) permission.

View File

@@ -8,7 +8,7 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
# Environment file with API_KEY and SECRET_KEY
ENV_FILE="$SCRIPT_DIR/.env"
VERSION="0.3.0"
VERSION="0.4.1"
# Porkbun API base url
BASE_URL=https://api.porkbun.com/api/json/v3
@@ -306,10 +306,15 @@ function handle_dns {
handle_show_help_on_error dns_create_record $@
;;
$DNS_DELETE_RECORD)
$HANDLE_DNS_DELETE)
shift
handle_show_help_on_error dns_delete_record $@
handle_dns_delete $@
;;
$HANDLE_DNS_LIST)
shift
handle_dns_list $@
;;
*)
handle_dns_help
@@ -326,7 +331,8 @@ function handle_dns_help {
echo "Commands:"
echo " $DNS_CREATE_RECORD Create a DNS record"
echo " $HANDLE_DNS_EDIT Edit DNS record(s)"
echo " $DNS_DELETE_RECORD Delete a DNS record"
echo " $HANDLE_DNS_DELETE Delete DNS record(s)"
echo " $HANDLE_DNS_LIST List DNS record(s)"
}
HANDLE_DNS_EDIT="edit"
@@ -453,13 +459,13 @@ function dns_edit_record_help {
echo
echo "Options:"
echo " $PARAM_DOMAIN_SHORT, $PARAM_DOMAIN"
echo " The domain for the record being created."
echo " The domain of the record being edited."
echo " $PARAM_ID_SHORT, $PARAM_ID"
echo " The ID of the record."
echo " $PARAM_NAME_SHORT, $PARAM_NAME (optional)"
echo " The subdomain for the record being created, not including the domain itself. Leave blank to create a record on the root domain. Use * to create a wildcard record."
echo " The subdomain of the record being edited, not including the domain itself. Leave blank to edit a record on the root domain. Use * to edit a wildcard record."
echo " $PARAM_TYPE_SHORT, $PARAM_TYPE"
echo " The type of record being created. Valid types are: A, MX, CNAME, ALIAS, TXT, NS, AAAA, SRV, TLSA, CAA"
echo " The type of record being edited. Valid types are: A, MX, CNAME, ALIAS, TXT, NS, AAAA, SRV, TLSA, CAA"
echo " $PARAM_CONTENT_SHORT, $PARAM_CONTENT"
echo " The answer content for the record. Please see the DNS management popup from the domain management console for proper formatting of each record type."
echo " $PARAM_TTL_SHORT, $PARAM_TTL (optional)"
@@ -552,11 +558,11 @@ function dns_edit_records_help {
echo
echo "Options:"
echo " $PARAM_DOMAIN_SHORT, $PARAM_DOMAIN"
echo " The domain for the record being created."
echo " The domain of the record being edited."
echo " $PARAM_TYPE_SHORT, $PARAM_TYPE"
echo " The type of record being created. Valid types are: A, MX, CNAME, ALIAS, TXT, NS, AAAA, SRV, TLSA, CAA"
echo " The type of record being edited. Valid types are: A, MX, CNAME, ALIAS, TXT, NS, AAAA, SRV, TLSA, CAA"
echo " $PARAM_NAME_SHORT, $PARAM_NAME (optional)"
echo " The subdomain for the record being created, not including the domain itself. Leave blank to create a record on the root domain. Use * to create a wildcard record."
echo " The subdomain of the record being edited, not including the domain itself. Leave blank to edit a record on the root domain. Use * to edit a wildcard record."
echo " $PARAM_CONTENT_SHORT, $PARAM_CONTENT"
echo " The answer content for the record. Please see the DNS management popup from the domain management console for proper formatting of each record type."
echo " $PARAM_TTL_SHORT, $PARAM_TTL (optional)"
@@ -664,7 +670,40 @@ function dns_create_record_help {
echo " The priority of the record for those that support it."
}
DNS_DELETE_RECORD="delete"
HANDLE_DNS_DELETE="delete"
function handle_dns_delete {
case $1 in
$PARAM_HELP_SHORT|$PARAM_HELP)
handle_dns_delete_help
;;
$DNS_DELETE_RECORD)
shift
handle_show_help_on_error dns_delete_record $@
;;
$DNS_DELETE_RECORDS)
shift
handle_show_help_on_error dns_delete_records $@
;;
*)
handle_dns_delete_help
exit 1
;;
esac
}
function handle_dns_delete_help {
echo "Usage: $0 $HANDLE_DNS $HANDLE_DNS_DELETE <command>"
echo
echo "Commands:"
echo " $DNS_DELETE_RECORD Delete a DNS record by Domain and ID"
echo " $DNS_DELETE_RECORDS Delete DNS records by Domain, Subdomain, and Type"
}
DNS_DELETE_RECORD="record"
function dns_delete_record {
while [[ $# -gt 0 ]]; do
@@ -693,7 +732,7 @@ function dns_delete_record {
done
if [[ -z $DOMAIN || -z $ID ]]; then
echo "Missing domain or record id"
echo "Missing domain or record id parameters"
exit 1
fi
@@ -711,6 +750,214 @@ function dns_delete_record_help {
echo " The record id being deleted."
}
DNS_DELETE_RECORDS="records"
function dns_delete_records {
while [[ $# -gt 0 ]]; do
case $1 in
$PARAM_DOMAIN_SHORT|$PARAM_DOMAIN)
DOMAIN="$2"
shift
shift
;;
$PARAM_TYPE_SHORT|$PARAM_TYPE)
TYPE="$2"
shift
shift
;;
$PARAM_NAME_SHORT|$PARAM_NAME)
NAME="$2"
shift
shift
;;
-*|--*)
echo "Unknown option $1"
exit 1
;;
*)
shift
;;
esac
done
if [[ -z $DOMAIN || -z $TYPE ]]; then
echo "Missing domain or type parameters"
exit 1
fi
URL="$BASE_URL/dns/deleteByNameType/$DOMAIN/$TYPE"
PAYLOAD=""
if [[ ! -z $NAME ]]; then
URL="$URL/$NAME"
fi
echo $(request "$URL" "$PAYLOAD")
}
function dns_delete_records_help {
echo "Usage: $0 $HANDLE_DNS $HANDLE_DNS_EDIT $DNS_EDIT_RECORDS [OPTIONS]"
echo
echo "Options:"
echo " $PARAM_DOMAIN_SHORT, $PARAM_DOMAIN"
echo " The domain of the record being deleted."
echo " $PARAM_TYPE_SHORT, $PARAM_TYPE"
echo " The type of record being deleted. Valid types are: A, MX, CNAME, ALIAS, TXT, NS, AAAA, SRV, TLSA, CAA"
echo " $PARAM_NAME_SHORT, $PARAM_NAME (optional)"
echo " The subdomain of the record being deleted."
}
HANDLE_DNS_LIST="list"
function handle_dns_list {
case $1 in
$PARAM_HELP_SHORT|$PARAM_HELP)
handle_dns_list_help
;;
$DNS_LIST_RECORD)
shift
handle_show_help_on_error dns_list_record $@
;;
$DNS_LIST_RECORDS)
shift
handle_show_help_on_error dns_list_records $@
;;
*)
handle_dns_list_help
exit 1
;;
esac
}
function handle_dns_list_help {
echo "Usage: $0 $HANDLE_DNS $HANDLE_DNS_LIST <command>"
echo
echo "Commands:"
echo " $DNS_LIST_RECORD List DNS records by Domain and ID"
echo " $DNS_LIST_RECORDS List DNS records by Domain, Type, and Subdomain"
}
DNS_LIST_RECORD="record"
function dns_list_record {
while [[ $# -gt 0 ]]; do
case $1 in
$PARAM_DOMAIN_SHORT|$PARAM_DOMAIN)
DOMAIN="$2"
shift
shift
;;
$PARAM_ID_SHORT|$PARAM_ID)
ID="$2"
shift
shift
;;
-*|--*)
echo "Unknown option $1"
exit 1
shift
shift
;;
*)
shift
;;
esac
done
if [[ -z $DOMAIN ]]; then
echo "Missing domain parameter"
exit 1
fi
URL="$BASE_URL/dns/retrieve/$DOMAIN"
PAYLOAD=""
if [[ ! -z $ID ]]; then
URL="$URL/$ID"
fi
echo $(request "$URL" "$PAYLOAD")
}
function dns_list_record_help {
echo "Usage: $0 $HANDLE_DNS $HANDLE_DNS_LIST $DNS_LIST_RECORD [OPTIONS]"
echo
echo "Options:"
echo " $PARAM_DOMAIN_SHORT, $PARAM_DOMAIN"
echo " The domain to list records from."
echo " $PARAM_ID_SHORT, $PARAM_ID (optional)"
echo " The ID of the record."
}
DNS_LIST_RECORDS="records"
function dns_list_records {
while [[ $# -gt 0 ]]; do
case $1 in
$PARAM_DOMAIN_SHORT|$PARAM_DOMAIN)
DOMAIN="$2"
shift
shift
;;
$PARAM_TYPE_SHORT|$PARAM_TYPE)
TYPE="$2"
shift
shift
;;
$PARAM_NAME_SHORT|$PARAM_NAME)
NAME="$2"
shift
shift
;;
-*|--*)
echo "Unknown option $1"
exit 1
;;
*)
shift
;;
esac
done
if [[ -z $DOMAIN || -z $TYPE ]]; then
echo "Missing domain or type parameters"
exit 1
fi
URL="$BASE_URL/dns/retrieveByNameType/$DOMAIN/$TYPE"
PAYLOAD=""
if [[ ! -z $NAME ]]; then
URL="$URL/$NAME"
fi
echo $(request "$URL" "$PAYLOAD")
}
function dns_list_records_help {
echo "Usage: $0 $HANDLE_DNS $HANDLE_DNS_LIST $DNS_LIST_RECORDS [OPTIONS]"
echo
echo "Options:"
echo " $PARAM_DOMAIN_SHORT, $PARAM_DOMAIN"
echo " The domain of the records being listed."
echo " $PARAM_TYPE_SHORT, $PARAM_TYPE"
echo " The type of record being listed. Valid types are: A, MX, CNAME, ALIAS, TXT, NS, AAAA, SRV, TLSA, CAA"
echo " $PARAM_NAME_SHORT, $PARAM_NAME (optional)"
echo " The subdomain of the record being listed, not including the domain itself."
}
# endregion
###################################################