#!/bin/bash

# --------------------------------------------------
#
# ----- ---- --- CloudFlare DDNS --- ---- -----
#
# Code from: https://WebInsider.pl/cloudflare-ddns
#
# CloudFlare API DOC:
# https://www.cloudflare.com/docs/client-api.html
#
# --------------------------------------------------

IP_CONTROL_LAST=0 # 1 - check the latest IP (file $IP_LOG), 0 - always sends the new IP

# Use Your fav IP chceck URL:
IP_CHECK_URL=
# e.g.:
# https://cdn.pryc.eu/add/myip.php

if [ -z "$IP_CHECK_URL" ]
then
	echo "IP_CHECK_URL is empty!"
	exit 0
else
	IP_NOW=`wget -O - -q $IP_CHECK_URL` # Get current IP, if IP_CONTROL_LAST=1	
fi
	
IP_LOG=/boot/last-ip.txt # Last IP LOG file

if [ ! -f $IP_LOG ] && [ "$IP_CONTROL_LAST" = "1" ]
then
    sudo touch $IP_LOG
fi

if [ $IP_LOG ] && [ "$IP_CONTROL_LAST" = "1" ]
then
    IP_LAST=$(cat $IP_LOG)
fi

CF_API_KEY= #insert here Your API key
CF_EMAIL= #insert here Your e-mail

DOMAIN= #insert here domain name
DOMAIN_RECORD_NAME= #insert here domain or subdomain name
CF_DOMAIN_REC_ID= #insert here record ID # First time read it - see below

CF_DOMAIN_READ_REC_ID=1 # 1 - ONLY read domain REC_ID, 0 - controls (changing) IP

CF_PROXY4RECORD=1 # Status of CloudFlare Proxy, 1 = orange cloud, 0 = grey cloud. 

if [ -z "$CF_API_KEY" ] || [ -z "$CF_EMAIL" ] || [ -z "$DOMAIN" ] || [ -z "$DOMAIN_RECORD_NAME" ]
then
	echo "Check script config!"
	exit 0
fi

if [ "CF_DOMAIN_READ_REC_ID" = "0" ] && [ -z "$CF_DOMAIN_REC_ID" ]
then
	echo "Check CF_DOMAIN_REC_ID"
	exit 0
fi

# --------------------------------------------------

function f_cf_api_rec_load_all() {
	curl https://www.cloudflare.com/api_json.html \
		-d 'a=rec_load_all' \
		-d 'tkn='$CF_API_KEY \
		-d 'email='$CF_EMAIL \
		-d 'z='$DOMAIN
}

function f_cf_api_rec_edit() {
	curl https://www.cloudflare.com/api_json.html \
		-d 'a=rec_edit' \
		-d 'tkn='$CF_API_KEY \
		-d 'email'=$CF_EMAIL \
		-d 'z='$DOMAIN \
		-d 'id='$CF_DOMAIN_REC_ID \
		-d 'type=A' \
		-d 'name='$DOMAIN_RECORD_NAME \
		-d 'content='$IP_NOW \
		-d 'service_mode='$CF_PROXY4RECORD \
		-d 'ttl=1'
}

# --------------------------------------------------

if [ "$CF_DOMAIN_READ_REC_ID" = "1" ]
then
	echo "Read CF DOMAIN REC_ID..."
	f_cf_api_rec_load_all
	exit 0
fi

# ----- ----- -----

if [ "$IP_CONTROL_LAST" = "1" ]
then
	if [ "$IP_NOW" != "$IP_LAST" ]
	then
		echo "New IP - changing..."
		echo $IP_NOW | sudo tee $IP_LOG > /dev/null
		f_cf_api_rec_edit	
	else	
		echo "IP is OK"
	fi
else
	echo "Changing IP..."
	echo $IP_NOW | sudo tee $IP_LOG > /dev/null
	f_cf_api_rec_edit	
fi




# --------------------------------------------------

exit 0
