o
    i                     @   sl  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZ e jeZe jeZe e eG dd dZdefd	d
Zedkr4e ZdZejD ]Zee e dZeejkroej soe!  edej de d eseej"ej#ej$Zese!  edej"  eedZ%dZ&ee% e%d D ]JZ'e'd ej(kre'd D ]:Z)e)d e* kre)d ej+kre)d Z&ede&  e)d ejkrej sede& de  dej d e!  q nqedej( d e!  eeee& e&sed ej+ d!e  d" e,e	d#Z-e-.e/ej W d   n	1 s)w   Y  qXe!  dS dS )$    N)	dataclass)login)
log_output)IP_FILE	DnsRecordget_external_ip
get_dns_ipget_dns_entriessubmit_dns_entry_updatec                   @   sB   e Zd ZU eed< eed< eed< ee ed< eed< eed< dS )Configusernamepasswordtotp_secretdns_records
cookiefileforceN)__name__
__module____qualname__str__annotations__listr   bool r   r   8/home/seanl/mnt/public/Repos/hover-dyn-dns/./__main__.pyr      s   
 r   returnc               
   C   sZ  t jdd} | jddd | jddd | jdd	d | jd
ddd | jddd | jdddd | jddddd | jddddd | jdddd |  }g }|jd u rZd|_|jdD ]}|jdD ]}|t|j	||j
|d qhq`t|j|j|j||j|jd }|jD ]}t|j	d!d"|_	t|j	d#d"|_	|jst| d$|_q|S )%NzHover DNS Update Script)descriptionz
--usernamezhover.com user ID)helpz
--passwordzhover.com user passwordz--totp_secretz)TOTP shared secret from you hover accountz--addr?zFIP address for the new DNS record, will use current address by default)nargsr   z--domainz>Your "naked" domain name (i.e example.com) registered at Hoverz--hostz~Comma-seperated list of hostnames (i.e @,www,mail) for the updated record(s). A hostname of @ refers to the naked domain name.z--typeAzDNS record type (A, AAAA, CNAME, etc.) for the updated record(s). Usage of 'A,AAAA' will update all IPv4 and IPv6 records for the provided host(s).)r   defaultr   z--cookiefilezcookies.jsonzFile path of the cookie storez--force
store_truez4Forces DNS updates, even if they are already current)actionr   @,)domainhostvaluerecord_type)r   r   r   r   r   r   zhttp:// zhttps://use_ipv6)argparseArgumentParseradd_argument
parse_argsr'   splittypeappendr   r&   addrr   r   r   r   r   r   r   r   replacer(   r   is_ip6)parserargsrecordsr'   r)   configrecordr   r   r   load_config   sP   
	
	r<   __main__r+   zCurrent IP of z does not match DNS record of z, performing update...zUsing username: Tdomainsdomain_nameentriesnamer2   idzDNS record ID is contentzDNS entry with ID z (z() already matches current IP address of zS. DNS up to date, waiting until the record replicates to local nameserver. exiting.zDomain z+ does not seem to be on your Hover account.zCould not find a z DNS record for z. Creating a new one...zw+)0osr-   dataclassesr   authenticationr   logging_outr   dnsr   r   r   r   r	   r
   pathabspath__file__dirnamednamechdirr   r<   r   r:   cookiesr   r;   get_fqdnr6   dns_ipr(   r   exitr   r   r   existing_dns_entriesdns_idregisted_domainr&   entryget_hostr)   openfilewriter   r   r   r   r   <module>   sf     

-

"

