#!/usr/bin/env python3

import urllib.request
import base64
from configparser import ConfigParser
from os import environ
from DNS import ParseResolvConf, Request
from time import time
from pickle import load, dump

def dyUpdate(host,user,passwd,override,domain, force):
	dnsaddr=host+'.'+domain
	encodedstring = base64.b64encode((user+':'+passwd).encode())[:-1]
	auth = "Basic " + encodedstring.decode()
	
	targetIPs=list(map(lambda x: x['data'], Request(qtype='A').req(dnsaddr).answers))
	curIP=urllib.request.urlopen('http://checkip.dy.fi/').read().decode().split(' ')[-1].split('</body>')[0]
	
	if (0 == len(targetIPs)) or (override and (curIP != targetIPs[0] or force)):
		oldData[host]=time()
		req=urllib.request.Request('http://www.dy.fi/nic/update?hostname='+dnsaddr, None, {"Authorization": auth })
		response = urllib.request.urlopen(req)
		print(response.read())


configPath=environ['HOME'] + '/.config/dyUpdate/'
dataFile=configPath+'data'

config = ConfigParser({'override':'yes', 'domain':'dy.fi'})
config.read(configPath + 'dyUpdate.conf')

try:
	oldData=load(open(dataFile,'rb'))
except:
	oldData={}

ParseResolvConf()

for k, v in config.items():
	if k == 'DEFAULT':
		continue

	dyUpdate(k,v['user'],v['passwd'],v['override'] == 'yes',v['domain'], (not (k in oldData)) or (abs(time()-oldData[k]) > 120*3600))

dump(oldData, open(dataFile, 'wb'))

