
    i                          d dl Z d dlZ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	m
Z
mZmZmZ ej                  j                  d       aerdddddZnd d d	Zd
 Zd Zd Zd Zd Zd Zy)    N   )ANYWIN)Netdevatomic_moveload_resourceruncmdwunlinkPRTY_NO_CFSSL   皙?)mv_re_trm_re_tmv_re_rrm_re_r)r   r   c                     	 t        j                  |       }	 t        j                  j	                  |      }d}t        ||||||||j                  d      fz        #  d}Y LxY w#  d}Y 5xY w)Nz<?>r   zLfailed to %s; error %s using %s (%s):
  STDOUT: %s
  STDERR: %s
  STDIN: %s
utf-8)shutilwhichospathgetsize	Exceptiondecode)	exewhatrcsosesinzszits	            A/home/ubuntu/myenv/lib/python3.12/site-packages/copyparty/cert.py_sp_errr$      ss    \\#WW__R  	[A
Ar2r2r3::g3FGG
HHs   A A& A#&A,c                 
   t        |j                  d      5 }|j                         }ddd       t        j                  j                  |j                  j                  d      }t        j                  j                  |j                        sW||j                  k7  rt        d|j                  z         t        |j                  d      5 }|j                         ddd       t        |j                  d      5 }|j                         }|j                  d      }|j                  d      }d	}|d
k  rt        |dz         |d
k  rt        |dz         ||kD  rt        |dz         	 ddd       	 t        |j                  d      5 }|j                         }	ddd       	k(  r&d}
 | d|
j                  |j                        d       yy# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   ZxY w#  Y yxY w)a  
    the default cert (and the entire TLS support) is only here to enable the
    crypto.subtle javascript API, which is necessary due to the webkit guys
    being massive memers (https://www.chromium.org/blink/webcrypto)

    i feel awful about this and so should they
    res/insecure.pemNzcert.pemz!certificate file does not exist: wbrbs    PRIVATE KEY-s    CERTIFICATE-z unsupported certificate format: r   zno private key inside pemz no server certificate inside pemz1private key must appear before server certificatez>using default TLS certificate; https will be insecure:[36m {}cert   )r   Ereadr   r   joincfgisfiler)   r   openwritefindformat)logargsf
cert_inseccert_appdatabufo1o2mactive_certr"   s              r#   ensure_certr>       s    
tvv1	2 aVVX
77<<

J7L77>>$))$499$?$))KLL$))T" 	 aGGJ	  
dii	 
U!ffhXX&'XX&'.6A ;;<<6A BBCC7A SSTT 
U$))T" 	#a&&(K	#*$SA+Q/ %3 	  	 
U 
U	# 	#
sH   G
G:A.G&2G> G22G> GG#&G/2G;7G> >Hc                    	 t         j                  j                  t         j                  j                  | j                  |            sdi fS dd|g}t        || j                        \  }}}|rdi fS t        j                  |      }|d   }t        j                  t        j                  |d            }||fS # t        $ r,}	|	j                  t        j                  k(  r di fcY d }	~	S d }	~	w di fcY S xY w)Nr   zcfssl-certinfoz-cert)cwd	not_afterz%Y-%m-%dT%H:%M:%SZ)r   r   existsr-   crt_dirr   jsonloadscalendartimegmtimestrptimeOSErrorerrnoENOENT)
r5   fnacmdr   r   r   infr    expiryexs
             r#   	_read_crtrR   K   s    ww~~bggll4<<<=b5L '2.Ddll3
Bb5Ljjnr3G!HIs{ 88u||#"u"us+   A
B: %B: 3AB: :	C5!C*$C5*	C5c                 L    d" fd	}t        |d      d   }t        j                         |j                  dz  dz  dz  dz  z   |k  ry dj                  t	        |j
                  dz              }dj                  t	        |j                  dz  dz              }|j                  j                  d|j                        }|j                  j                  d	      \  }}|||dd
|t	        |      dd|igd}t        j                  |      j                  d      }	  ddd       d}
t        |
j                         d|	      \  }}}|rt        dd||||	       d}
|j                  d      }	t        |
j                         d|	|j                         \  }}}|rt        dd||||	       t"        j$                  j'                  |j                   d      }	 t)        ||dz   t*               t-        ||dz   |dz   t*               t)        ||dz   t*                 dd d!       y #  Y ;xY w)#Nr   c                      d| |      S )Nzcert-gen-ca msgcr4   s     r#   <lambda>z_gen_ca.<locals>.<lambda>b   s    SQ7     ca.pem<      r   {}m--crt-cn-)backdaterP   pathlenalgosizeO)CNCAkeynamesr   r)   zcreating new ca ...   zcfssl gencert -initca -   )r   cfsslzcreate ca-certzcfssljson -bare ca
   r   r@   	cfssljsonztranslate ca-certca.key-key.pem.csrz	new ca OK   r   )rR   rH   	crt_cdaysr3   intcrt_backcrt_cncreplacecrt_cncrt_algsplitrD   dumpsencoder   r$   rC   r   r   r-   r	   VFr   )r4   r5   nlogrP   ra   cnrd   kszreqr   cmdr   r   r   bnames   `              r#   _gen_car   a   s   7DtX&q)Fyy{T^^b(2-2S886A||C 234H\\#dnnr1B678F			j$++	6B""3'ID##v!Dc#h/)	C **S/
 
 
)C%q)
#C		RS1JBB	)2r2s;
C
))G
C		RSdllCJBB	0"b"cBGGLLt,Eefnb) ej(%&."=D%&."%Qs   H H#c                 ~    d9 fd	}|j                   r|j                   j                  d      ng }|D cg c]  }|j                          }}|j                  s*|d d  D ]"  }|j	                  dj                  |             $ |j                  s8|j                         D ]%  }|j	                  |j                  d      d          ' |j                  r|D cg c]	  }|dvs| }}|j                  s9|j	                  |j                         |j	                  |j                  dz          |sdg}d|v sd	|v r|j	                  d
       t        |D ci c]  }|d c}j                               }	 t        |d      \  }}	d|	vrt        d      t        j                         |j                  dz  dz  dz  dz  z   |kD  }
|
rt        d      |D ]#  }||	d   vst        dj                  |             t!        |j"                  d      5 }|j%                         }d d d        t'        |j(                  d      5 }|j%                         }d d d        r|k7  ry   ddd       dj                  t+        |j,                  dz              }dj                  t+        |j                  dz  dz              }dd||g ddii}t'        t.        j0                  j3                  |j4                  d      d       5 }|j7                  t9        j:                  |      j=                  d!             d d d        |j>                  jA                  d"|jB                        }|jD                  j                  d#      \  }}|t+        |      d$d%|igd&}t9        j:                  |      j=                  d!      }d'}|j                         d(dj3                  |      z   d#gz   }tG        |d)||j4                  *      \  }}}|rtI        d+d,||||       d-}|j=                  d!      }tG        |j                         d.||j4                  *      \  }}}|rtI        d/d0||||       t.        j0                  j3                  |j4                  d1      }	 tK        ||d2z   tL               tO        ||d3z   |d2z   tL               tK        ||d4z   tL               t'        t.        j0                  j3                  |j4                  d5      d      5 }|j%                         }d d d        t'        |d2z   d      5 }|j%                         }d d d        t'        |d6z   d      5 }|j%                         }d d d        t'        |j(                  d       5 }|j7                  z   z          d d d          dd7d8       y c c}w c c}w c c}w # 1 sw Y   xY w# 1 sw Y   rxY w# t        $ r#}  ddj                  |             Y d }~d }~ww xY w# 1 sw Y   xY w#  Y txY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w):Nr   c                      d| |      S )Nzcert-gen-srvrU   rV   s     r#   rY   z_gen_srv.<locals>.<lambda>   s    Sa8 rZ   ,z*.{}/)	localhost	127.0.0.1::1z.localr   r   r   r   zsrv.pemsanszno useable cert foundr\   r]   g      ?zold server-cert has expiredzdoes not have {}r&   r(   r)   zwill create new server-cert; {}zcreating server-cert ...rk   r^   signingdefault)r   zkey enciphermentzserver auth)ra   rP   usagesz
cfssl.jsonr'   r   r_   r`   rc   rf   )ri   rj   zGcfssl gencert -config=cfssl.json -ca ca.pem -ca-key ca.key -profile=wwwz
-hostname=rl   ro   rm   zcreate certzcfssljson -bare srvrn   rp   ztranslate certsrvrr   rs   rt   r[   z.pemznew server-cert OKru   rv   )(crt_nsr~   strip	crt_exactappendr3   crt_noipkeyscrt_nolocrt_nohnnamelistrR   r   rH   	crt_sdaysr   r+   r,   r0   r)   rx   ry   r   r   r-   rC   r1   rD   r   r   crt_cnsr{   r|   r}   r   r$   r	   r   r   )r4   r5   netdevsr   rj   xniprP   rO   expiredr6   r7   r=   rQ   ra   r.   r   rd   r   r   r   r   rN   r   r   r   r   rq   skeyscrts   `                              r#   _gen_srvr      s   8D&*kkDKKc"rE %&1QWWY&E&>>q 	+ALLq)*	+==,,. 	+BLL#q)*	+}}!PqQ.O%OPP==TYYTYY)*eu~[!&1!Q$&++-.EBi0344))+ 3b 82 = CCfL9:: 	>AF# 2 9 9! <==	> 466#56 	"!J	" $))T" 	#a&&(K	# ;*4
 *A.||C 234H\\#dnnr1B678F$ H
C 
bggll4<<6	= 1	

3&&w/01 
		j$++	6B""3'ID#c#h/)C **S/
 
 
)C
SC99;,%8#>>Dbct||<JBB	BC8
C
))G
C		RSdllCJBB	-r2r3?GGLLu-Eefnb) ej(%&."=D%&."%	bggll4<<2D	9 QVVX 
efnd	# qvvx 
efnd	# qvvx 
dii	 "!	tb !" $a(G ' Q '	" 	"	# 	#  BF5<<R@AAB 1 14   " "s   V!	V&"V&
V+4A'W
 1W
 V0W
 <V=W
 84W9X 7XXX'6X30V:5W
 =WW
 
	W6W11W69XXXX$'X03X<c                 ^   |j                   ry |j                  st        st        | |       y 	 t	        | |       t        | ||       y # t        $ r[}da | ddj                  |      d       t        |dd      t        j                  k(  rd} | d|d       t        | |       Y d }~y d }~ww xY w)	NFr)   z%could not create TLS certificates: {}r*   rK   r   z~install cfssl if you want to fix this; https://github.com/cloudflare/cfssl/releases/latest  (cfssl, cfssljson, cfssl-certinfo)rk   )	http_onlyno_crt
HAVE_CFSSLr>   r   r   r   r3   getattrrK   rL   )r4   r5   r   rQ   r"   s        r#   gencertr      s     ~~{{*C
TdG$ 
F;BB2FJ2w"ell2 QA1Cs   A 	B,AB''B,)rF   rK   rD   r   r   rH   __init__r   utilr   r   r   r   r	   environgetr   r   r$   r>   rR   r   r   r   rU   rZ   r#   <module>r      ss       	    E E00
	1	EB1	%B
I%V,' Tg)TrZ   