
    {0j                        S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	  \ R                  R                  \5      r\ R                  R                  \5      r\ R                  " \5        SrSrSrSrS	r\ " S
 S5      5       rS\S\4S jrS\S\S\S-  4S jrS\S\R4                  R6                  S\S-  4S jrS rg)    N)Literal)	dataclass)
log_outputz./IPz https://www.hover.com/api/dns/{}z!https://www.hover.com/api/domainszhttps://www.hover.com/api/dnsz,https://www.hover.com/api/control_panel/dns/c                   l    \ rS rSr% \\S'   \\S'   \\S'   \S   \S'   S rS rS	\4S
 jr	S	\4S jr
Srg)	DnsRecord   domainhostvalue)AAAAACNAMEMXSRVrecord_typec                      U R                   S:H  $ )Nr   r   selfs    6/mnt/mint/home/seanl/public/Repos/hover-dyn-dns/dns.pyis_ip4DnsRecord.is_ip4   s    3&&    c                      U R                   S:H  $ )Nr   r   r   s    r   is_ip6DnsRecord.is_ip6   s    6))r   returnc                 x    U R                  5       S:X  a  U R                  $ U R                   SU R                   3$ )N@.)get_hostr	   r
   r   s    r   get_fqdnDnsRecord.get_fqdn"   s3    ==?c!;;))Adkk]++r   c                 >    U R                   (       d  gU R                   $ )Nr   )r
   r   s    r   r!   DnsRecord.get_host(   s    yyyyr    N)__name__
__module____qualname____firstlineno__str__annotations__r   r   r   r"   r!   __static_attributes__r&   r   r   r   r      s?    K
IJ:;;'*,# ,# r   r   apir   c                     [         R                  " U SSS0S9nUR                  S:X  a  UR                  $ SU  SUR                   S3n[	        U5        [        U5      e)	z8
Retrieves the external IP address using the ipify API.
TAcceptz
text/plain)verifyheaders   zPublic IP URL z returned a z	 response)requestsgetstatus_codetextr   	Exception)r.   responseerrs      r   get_external_ipr;   /   s_     ||Cx6NOHs"}}se<0D0D/EYO3nr   r	   use_ipv6c                      [         R                  " U SU(       a  [         R                  R                  O[         R                  R                  5       H(  n[        US   S   [        5      (       d  M   US   S   s  $    g! [         a     gf = f)z,Retrieves the IP address for a given domain.P      r   N)socketgetaddrinfoAddressFamilyAF_INET6AF_INET
isinstancer+   r8   )r	   r<   addrinfos      r   
get_dns_iprG   ;   s    **62X`v7K7K7T7Tflfzfz  gC  gC  DH(1+a.#..{1~% D  s   A-B  3	B  =B   
BBrecordcookiesdns_entry_idc           	         U(       aZ  [         R                  nSU R                   3UU R                  U R                  U R
                  SSSS./S.U R
                  SS.S.nOE[         R                  nU R                  U R
                  U R                  SS	.SU R                   3S
.nU" [        XASS9n[        [        R                  U5      5        [        SUR                   35        [        SUR                   35        U$ )z'
Updates a new or existing DNS record.
zdomain-900FT)idnametypecontentttl
is_default
can_revert)rM   dns_records)rP   rQ   )r	   fields)rN   rP   rO   rQ   )
dns_recordrM   )urljsonrI   r1   z!DNS update response status code: zDNS update response content: )r4   putr	   r
   r   r   postDNS_SUBENTRIES_URLr   DNS_UPDATE_URLformatr6   rP   )rH   rI   rJ   http_method	json_datar9   s         r   submit_dns_entry_updater`   E   s    ll  / + & & 2 2#)<<$&+&*
  "<<
	* mm !<<**	 FMM?+
	 1	[_`H~$$\23283G3G2HIJ.x/?/?.@ABOr   c                     [         R                  " [        U SS9nUR                  S:X  a  UR	                  5       $ U" SUR                   SUR
                   3U5        [        S5        g)z,
Retrieves the DNS entries for the account.
T)rI   r1   r3   z-Failed to retrieve DNS entries. Status code: z, Response text: r?   N)r4   r5   DNS_ENTRIES_URLr6   rX   r7   exit)rI   loggingr9   s      r   get_dns_entriesre   r   sc     ||OWTJHs"}}?@T@T?UUfgogtgtfuvx  	AQr   )osr@   r4   requests.cookiestypingr   dataclassesr   logging_outr   pathabspath__file__dirnamednamechdirIP_FILEr\   DOMAIN_CHECK_URLrb   r[   r   r+   r;   boolrG   rI   RequestsCookieJarr`   re   r&   r   r   <module>ru      s    	     ! "
''//(
#
  
36 1C 
  2
 
 
s d sTz +I +8H8H8Z8Z +jmptjt +Z	r   