
    L:h                     t   d dl Z d dlZ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 d dlmZmZmZmZmZmZmZ e j                            e          Ze j                            e          Z e j        e           e G d d                      Zd	efd
Zedk    r e            Z ee                                ej        dk              Z e ej!        k    rej"        sej#        s
 e$              edej!         de  d            e	ej%        ej&        ej'        ej(                  Z)e)s
 e$              edej%                     ee)ej(        d          Z*dZ+ ee*           e*d         D ]Z,e,d         ej-        k    re,d         D ]Z.e.d         e/                                k    r|e.d         ej        k    rke.d         Z+ ede+            e.d         ej!        k    rDej"        s=ej#        s6 ede+ de                                 dej!         d            e$              n edej-         d             e$             ej"        r e0e+            e$d            e+r+ ee+ej-        ej1        ej!        ej        e)ej(                   nM ed!ej         d"e                                 d#            eej-        ej1        ej!        ej        e)d            e2ed$          5 Z3e34                     e5ej!                             ddd           n# 1 swxY w Y    e$             dS dS )%    N)	dataclass)Literal)login)
log_output)IP_FILEget_external_ip
get_dns_ipDEFAULT_PROXIESget_dns_entries submit_put_on_existing_dns_entrysubmit_post_for_new_dns_entryc                       e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   ed         ed<   eed	<   eeef         d
z  ed<   eed<   eed<   defdZdefdZ	d
S )Configusernamepasswordtotp_secretaddressdomainhost)AAAAACNAMEMXSRVdns_record_type
cookiefileNproxiesdo_get_dns_idforcereturnc                 b    |                                  dk    r| j        S | j         d| j         S )N@.)get_hostr   r   selfs    6/home/seanl/mnt/public/Repos/hover-dyn-dns/__main__.pyget_fqdnzConfig.get_fqdn   s5    ==??c!!;)++dk+++    c                 "    | j         dS | j         S )Nr"   )r   r%   s    r'   r$   zConfig.get_host$   s    93yr)   )
__name__
__module____qualname__str__annotations__r   dictboolr(   r$    r)   r'   r   r      s         MMMMMMLLLKKK
III>????OOO#s(^d""""KKK,# , , , ,#      r)   r   r    c                     t          j        d          } |                     dd           |                     dd           |                     dd	           |                     d
dd           |                     dd           |                     ddd           |                     dddd           |                     dddd           |                     ddd           |                     ddd           |                     ddd            |                                 }t	          |j        |j        |j        |j        |j	        |j
        |j        |j        |j        rt          nd |j        |j        !          }t"                              |j	        d"d#          |_	        t"                              |j	        d$d#          |_	        |j        t)          d |j        d%k    &          |_        |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)nargsr5   z--domainz>Your "naked" domain name (i.e example.com) registered at Hoverz--hostz&Hostname (i.e www) for the new record.z--typer   z&DNS record type (A, AAAA, CNAME, etc.))r7   defaultr5   z--cookiefilezcookies.jsonzFile path of the cookie storez--mitm
store_truez(Enable mitmproxy for HTTP/HTTPS requests)actionr5   z
--getDNSIDz$Retrieve DNS entries for the accountz--forcez4Forces DNS updates, even if they are already current)r   r   r   r   r   r   r   r   r   r   r   zhttp:// zhttps://r   use_ipv6)argparseArgumentParseradd_argument
parse_argsr   r   r   r   addrr   r   typer   mitmr
   getDNSIDr   r.   replacer   r   r   )parserargsconfigs      r'   load_configrJ   +   s
   $1JKKKF
+>???
+DEEE
.YZZZ
2z{{{

)klll
2Z[[[
S?ghhh
c>Poppp
<fggg
\@fggg
	,=stttD==&)y)_%)Y8//D
  F KKy"==FMKKz2>>FM~(8NPV8VWWWMr)   __main__r   r<   zCurrent IP of z does not match DNS record of z, performing update...zUsing username: Tdomainsdomain_nameentriesnamerC   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+)6osjsondatetimer>   dataclassesr   typingr   authenticationr   logging_outr   dnsr   r   r	   r
   r   r   r   pathabspath__file__dirnamednamechdirr   rJ   r+   rI   r(   r   dns_ipr   r   r   exitr   r   r   r   cookiesexisting_dns_entriesdns_idregisted_domainr   entryr$   printr   openfilewriter.   r2   r)   r'   <module>rk      s   				    ! ! ! ! ! !                   " " " " " " X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X
'//(
#
#
   
       4$V $ $ $ $L z[]]FZ))F4JF4RSSSF(<V\JlllflllmmmeFOV_f6H&.YYG J3&/33444*?7FNDIIFJ#$$$/	:  =)V]::(3  =FOO$5$555%-6Ka:a:a"4[FJ;6;;<<<Y'6>996CW9[a[g9"
  $a  $a  $a&//BSBS  $a  $a  ~D  ~L  $a  $a  $a  b  b  bE ; 	
WV]WWWXXX fQ y((V^]c]su|  E  M  	N  	N  	N  	N
yv'=yyvO`O`yyyzzz%%fmV[&.RXRhjqswxxx	gt		 (

33v~&&'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 	DFFFFFS s   1$L!!L%(L%