#!/usr/bin/env bash cloudflare_api_token=$(cat ~/.cloudflare/lair.cafe | cut -d ' ' -f 3) cloudflare_dns_zone_name=lair.cafe cloudflare_dns_record_name=rpm.${cloudflare_dns_zone_name} cloudflare_dns_record_type=CNAME cloudflare_dns_record_content=bl.thgttg.com cloudflare_dns_zone_id=$(curl \ --silent \ --request GET \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${cloudflare_api_token}" \ --url "https://api.cloudflare.com/client/v4/zones?name=${cloudflare_dns_zone_name}&status=active" \ | jq -r '.result[0].id//empty') if [ -z ${cloudflare_dns_zone_id} ]; then echo "cloudflare dns zone not found" exit 1 else echo "cloudflare dns zone found: ${cloudflare_dns_zone_name} (${cloudflare_dns_zone_id})" fi cloudflare_dns_record_id=$(curl \ --silent \ --request GET \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${cloudflare_api_token}" \ --url "https://api.cloudflare.com/client/v4/zones/${cloudflare_dns_zone_id}/dns_records?type=${cloudflare_dns_record_type}&name=${cloudflare_dns_record_name}" \ | jq -r '.result[0].id//empty') if [ -z ${cloudflare_dns_record_id} ] && curl \ --silent \ --request POST \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${cloudflare_api_token}" \ --data "{\"type\":\"${cloudflare_dns_record_type}\",\"name\":\"${cloudflare_dns_record_name}\",\"content\":\"${cloudflare_dns_record_content}\",\"ttl\":1,\"proxied\":false}" \ --url "https://api.cloudflare.com/client/v4/zones/${cloudflare_dns_zone_id}/dns_records"; then echo "${cloudflare_dns_record_name} ${cloudflare_dns_record_type} record created with content: ${cloudflare_dns_record_content} in zone: ${cloudflare_dns_zone_name} (${cloudflare_dns_zone_id}), record: ${cloudflare_dns_record_name} (${cloudflare_dns_record_id})" elif curl \ --silent \ --request PUT \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${cloudflare_api_token}" \ --data "{\"type\":\"${cloudflare_dns_record_type}\",\"name\":\"${cloudflare_dns_record_name}\",\"content\":\"${cloudflare_dns_record_content}\",\"ttl\":1,\"proxied\":false}" \ --url "https://api.cloudflare.com/client/v4/zones/${cloudflare_dns_zone_id}/dns_records/${cloudflare_dns_record_id}"; then echo "${cloudflare_dns_record_name} ${cloudflare_dns_record_type} record updated with content: ${cloudflare_dns_record_content} in zone: ${cloudflare_dns_zone_name} (${cloudflare_dns_zone_id}), record: ${cloudflare_dns_record_name} (${cloudflare_dns_record_id})" fi