
    h8                         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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                  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readospathjoincfgisfiler   	Exceptionopenwritefindformat)logargsf
cert_inseccert_appdatabufo1o2mactive_certts              C/jellyfin/media/venv/lib/python3.12/site-packages/copyparty/cert.py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)
r$   fnacmdrcsoseinfzsexpiryexs
             r.   	_read_crtrG   =   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                 |    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j                  ||      d      d}
|j                  d      }	t        |
j                         d|	|j                         \  }}}|rt        dj                  ||      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cr#   s     r.   <lambda>z_gen_ca.<locals>.<lambda>T   s    SQ7     ca.pem<      r   {}m--crt-cn-)backdaterE   pathlenalgosizeO)CNCAkeynamesutf-8r   zcreating new ca ...   zcfssl gencert -initca -   )sinz failed to create ca-cert: {}, {}r   zcfssljson -bare ca
   rc   r1   z#failed to translate ca-cert: {}, {}ca.key-key.pem.csrz	new ca OK   r   )rG   r9   	crt_cdaysr"   intcrt_backcrt_cncreplacecrt_cncrt_algsplitr5   dumpsencoder   r   r4   r   r   r   r	   VFr   )r#   r$   nlogrE   rV   cnrY   kszreqrc   cmdr@   rA   rB   bnames   `              r.   _gen_car}   S   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	:AA"bI1MM
C
))G
C		RSdllCJBB	=DDRLaPPGGLLt,Eefnb) ej(%&."=D%&."%Qs   ,H7 7H;c                 f    d7 fd	}|j                   r|j                   j                  d      ng }|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,        j.                  j1                  |j2                  d      d       5 }|j5                  t7        j8                  |      j;                  d!             d d d        |j<                  j?                  d"|j@                        }|jB                  j                  d#      \  }}|t)        |      d$d%|igd&}t7        j8                  |      j;                  d!      }d'}|j                         d(dj1                  |      z   d#gz   }tE        |d)||j2                  *      \  }}}|rt        d+j	                  ||            d,}|j;                  d!      }tE        |j                         d-||j2                  *      \  }}}|rt        d.j	                  ||            t,        j.                  j1                  |j2                  d/      }	 tG        ||d0z   tH               tK        ||d1z   |d0z   tH               tG        ||d2z   tH               t%        t,        j.                  j1                  |j2                  d3      d      5 }|j#                         }d d d        t%        |d0z   d      5 }|j#                         }d d d        t%        |d4z   d      5 }|j#                         }d d d        t%        |j&                  d       5 }|j5                  z   z          d d d          dd5d6       y c c}w c c}w # 1 sw Y   xY w# 1 sw Y   xY w# t        $ r#}  ddj	                  |             Y d }~d }~ww xY w# 1 sw Y   xY w#  Y ox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)8Nr   c                      d| |      S )Nzcert-gen-srvrJ   rK   s     r.   rN   z_gen_srv.<locals>.<lambda>~   s    Sa8 rO   ,z*.{}/)	localhost	127.0.0.1::1z.localr   r   r   r   zsrv.pemsanszno useable cert foundrQ   rR   g      ?zold server-cert has expiredzdoes not have {}r   r   r   zwill create new server-cert; {}zcreating server-cert ...ra   rS   signingdefault)r   zkey enciphermentzserver auth)rV   rE   usagesz
cfssl.jsonr   r`   rT   rU   rX   r[   )r^   r_   zGcfssl gencert -config=cfssl.json -ca ca.pem -ca-key ca.key -profile=wwwz
-hostname=rb   re   zfailed to create cert: {}, {}zcfssljson -bare srvrd   z failed to translate cert: {}, {}srvrg   rh   ri   rP   z.pemznew server-cert OKrj   rk   )&crt_nsrs   	crt_exactappendr"   crt_noipkeyscrt_nolocrt_nohnnamelistrG   r   r9   	crt_sdaysr   r   r   r   r   rm   rn   r   r   r   r4   r    r5   rt   ru   crt_cnsrp   rq   rr   r   r	   rv   r   )r#   r$   netdevsrw   r_   nipxrE   rC   expiredr%   r&   r,   rF   rV   r   rx   rY   ry   rz   rc   r{   r?   r@   rA   rB   r|   rf   skeyscrts   `                              r.   _gen_srvr   }   s   8D&*kkDKKc"rE>>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	7>>r2FGG
C
))G
C		RSdllCJBB	:AA"bIJJGGLLu-Eefnb) ej(%&."=D%&."%	bggll4<<2D	9 QVVX 
efnd	# qvvx 
efnd	# qvvx 
dii	 "!	tb !" $a(w Q '	" 	"	# 	#  BF5<<R@AAB 1 14   " "s   ;	VV7
VA'V> ?1V> 0V$V> V10V> 4W-<W: 0XX X/X'$V.)V> 1V;6V> >	W*W%%W*-W7:W?XXX$'X0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   r<   r   z~install cfssl if you want to fix this; https://github.com/cloudflare/cfssl/releases/latest  (cfssl, cfssljson, cfssl-certinfo)ra   )	http_onlyno_crt
HAVE_CFSSLr/   r}   r   r   r"   getattrr<   r=   )r#   r$   r   rF   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,)r7   r<   r5   r   r9   __init__r   utilr   r   r   r   r	   environgetr   rv   r/   rG   r}   r   r   rJ   rO   r.   <module>r      sj       	   E E00
	1	EB1	%B%V,' Tf)RrO   