a
    K56a‹L  ã                   @   sp  d dl Z d dlZd dlZd dlZd dlmZmZmZm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 d dlmZ d dlZd	d
lmZmZ d	dlmZmZmZ d	dl m!Z! d	dl"m#Z" d	dl$m%Z% d dl&Z&dZ'd (dd„ e)ddƒD ƒ¡Z*e +de ,e*¡ d ¡Z-e +de ,e*¡ d ¡Z.dd„ Z/d(dd„Z0dd„ Z1d)d d!„Z2d*d&d'„Z3dS )+é    N)ÚrunÚPopenÚSTDOUTÚPIPE)ÚMIMEMultipart)ÚMIMEText)Ú	MIMEAudio)Ú	MIMEImage)ÚMIMEBase)ÚMIMEMessageé   )ÚVERSIONÚVERSION_NUMBER)ÚTempFileÚopen_write_safeÚtempfile_prefix)Ú	NoMessage)Útext_ui)Úget_email_addrFÚ c                 C   s   g | ]}t |ƒ‘qS © )Úchr)Ú.0Zair   r   ú2/usr/lib/python3/dist-packages/reportbug/submit.pyÚ
<listcomp>1   ó    r   é    é   z[^ú]z\s]c                  G   s   t ptj| Ž S ©N)ÚquietlyÚuiZlog_message)Úargsr   r   r   Úewrite8   s    r#   ÚxÚgpgc              
   C   s¦  |st |ƒd }tt|dƒ|d\}}| | ¡ | ¡  tt|dƒ|d\}}	| ¡  |dkr¦t |	¡ dtjvr|d| }
nd| }
|
d	t 	|	¡ d
 t 	|¡ 7 }
n(d| }
|
dt 	|¡ d t 	|	¡ 7 }
z„t 
|
¡ t|	ddd}| ¡ }W d  ƒ n1 s0    Y  tj |¡r*t |¡ tj |	¡rBt |	¡ |sLt‚|} W nN tttfy    tt|ƒ|d\}}| | ¡ | ¡  td|ƒ d} Y n0 | S )zSign message with pgp key.r   Úunsigned©ÚprefixÚdirÚsignedr%   ZGPG_AGENT_INFOz"gpg --local-user '%s' --clearsign z.gpg --local-user '%s' --use-agent --clearsign z	--output ú zpgp -u '%s' -fastú<z >ÚrÚbackslashreplace)ÚerrorsNz!gpg/pgp failed; input file in %s
)r   r   r   ÚwriteÚcloseÚosÚunlinkÚenvironÚshlexÚquoteÚsystemÚopenÚreadÚpathÚexistsr   ÚIOErrorÚOSErrorr#   )ÚbodyÚfromaddrÚpackageZpgp_addrZsignÚ	draftpathr&   Zfile1r*   Zfile2Zsigncmdr$   Z
signedbodyÚfhZtmpfile2r   r   r   Úsign_message<   sB    



" 
(




rC   c                 C   sL   t | ƒ}| ¡ dkrHtdd„ |  ¡ D ƒƒdkrHtj |¡ |d= d|d< |S )Núus-asciic                 s   s   | ]}t |ƒV  qd S r   )Úlen)r   Úlr   r   r   Ú	<genexpr>u   r   z$_MIMEText_wrapper.<locals>.<genexpr>iÔ  zContent-Transfer-Encodingzquoted-printable)r   Zget_content_charsetÚmaxÚ
splitlinesÚemailÚencodersZencode_quopri)ÚtextÚmsgr   r   r   Ú_MIMEText_wrappern   s    ÿrN   c                 C   sÒ  t  ¡  tdƒ}t| ƒ}| dd¡ d|_d|_| |¡ d}|D ]„}zt|ƒ}| 	¡  W nB t
yž }	 z*td||	jƒ d}W Y d }	~	qBW Y d }	~	n
d }	~	0 0 d }
|}td	d
dd|gttd ¡ d  d¡}|rt d|¡}|r| ¡ \}
}}t d|¡}|r| d¡}d|
vrd }
|
s6t j|dd\}
}|
s@d}
|
 dd¡\}}|dkräz<t|dƒ}t| ¡ ƒ}W d   ƒ n1 sŠ0    Y  W nJ tyà   t|dƒ}t||ƒ}| | ¡ ¡ | 	¡  tj |¡ Y n0 nÂ|dkrt|dƒ}t t !|¡|d}| 	¡  n’|dkrBt|dƒ}t"| ¡ |d}| 	¡  nd|dkrpt|dƒ}t#| ¡ |d}| 	¡  n6t|dƒ}t||ƒ}| | ¡ ¡ | 	¡  tj |¡ |jddt$j% &|¡d | |¡ qB||fS )NZmixedzContent-DispositionZinlinez6This is a multi-part MIME message sent by reportbug.

r   Fz"Warning: opening '%s' failed: %s.
TÚfilez--mimez--briefz--dereference)ÚstdoutÚstderrr   Úasciiz([^;, ]*)(,[^;]+)?(?:; )?(.*)zcharset=([^,]+|"[^,"]+")r   ú/)Ústrictzapplication/octet-streamrL   ZrUÚrbÚmessage)Z_subtypeZimageZaudioÚ
attachment)Úfilename)'Ú	mimetypesZinitr   rN   Z
add_headerZpreambleZepilogueZattachr8   r1   ÚEnvironmentErrorr#   Ústrerrorr   r   r   ZcommunicateÚdecodeÚreÚmatchÚgroupsÚsearchÚgroupZ
guess_typeÚsplitr9   ÚUnicodeDecodeErrorr
   Zset_payloadrJ   rK   Zencode_base64r   Zmessage_from_binary_filer	   r   r2   r:   Úbasename)r>   ÚattachmentsÚcharsetÚbody_charsetrV   ZbodypartÚfailedrW   Úfpr$   ZctypeZcsetÚinfor^   ZjunkZextrasÚencodingZmaintypeZsubtypeÚpartr   r   r   Úmime_attach~   sš    

ÿ"ÿÿÿ

ÿ

0




ÿ









ÿrm   rD   TÚdebbugsÚ	localhostc           F   
   C   s–	  d }}d}|r|rd}|r(|dkr(d}d}t |ƒ}|rh|sht| ||	|ƒ\} }|rptdƒ d } }}nt| ƒ} || d< || d	< |D ]\}!}"|"| |!< q„|r¢|| d
< |r®|| d< tj d|¡}|rÈ|| d< |
røtj 	d¡| d< t
| d< tjjdd| d< n|r|s|st| d< dd„ |  d	g ¡|  d
g ¡ |  dg ¡ D ƒ}#tj |#¡}$dd„ |  dg ¡D ƒ}%tj |%¡}&|%rŒ| d= d |%¡}'|'| d< |s°|s°z
| d= W n   Y n0 |  ¡ } |rf|sf|sftj dd¡}(z<t |(d¡})|) | ¡ W d  ƒ n1 s0    Y  W n8 tyL }* z|*jtjkr8|*‚W Y d}*~*n
d}*~*0 0 t ddd¡sfd }}d}+|sv|r€tj},n˜|ršt||d \},}+n~|sº|rºtj |¡rº|rd|rÎtj |¡}nd!| }tj |¡rzt ||d" ¡ W n  ty   td#||ƒ Y n0 zt |dƒ},W n8 ty`   t||d \}-}.td$||.ƒ |.}|-},Y n0 n´|rtj |¡r|szt !¡ }/W n ty¨   t "d%¡ Y n0 d&d„ |$D ƒ}0d' |0¡}1tj #|¡d( }2|rêtj #|¡d( }3n|2}3td)|ƒ t d*|t$ %|3¡|1f d¡},d}tt |d+ƒ|d \}4}5td,|5ƒ |4 | ¡ |4 &¡  |r´d-d„ |$D ƒ}6d}7d}8d.}9|7rNd}7td/|ƒ zôd}:| '¡ dkr t( )|d0¡}:n&| *d1¡r¼d}t( +|¡}:n
t( )|¡}:|: ,¡ };d2|;d.   krêd3ksôn |: -¡  |r0|: .¡  |: ,¡ };d2|;d.   kr&d3ks0n |: -¡  |rZ|sNt /d4||f ¡}|: 0||¡ |: 1||6| ¡}8|: 2¡  W nÖ t3j4t(j5fyH }/ z´t6|/t(j7ƒrÐtd5ƒ d}7d}|9d(7 }9|9d6krÌW Y d}/~/qjnd}7t d7|/› d8d9d:¡rüd}7W Y d}/~/qjn8d}t||d \}-}|- | ¡ |- &¡  t 8d;|› d<¡ W Y d}/~/n
d}/~/0 0 qj|8rR|8 9¡ D ] \}<}=td=|<|=d. |=d( ƒ q\t||d \}-}|- | ¡ |- &¡  t 8d;|› d<¡ nžz.|, | ¡ |, :¡  |ràt 8d>|› d<¡ W n  t;y   d}|, &¡  Y n0 |s|, &¡ rR|rRd}t||d \}-}|- | ¡ |- &¡  t 8d?|› d<¡ |rtd@|j<ƒ | =|+|¡}>d.}?d}@|@sÖ|j>s–t?|>ddAj@}?n
t A|>¡}?|?d.krtdBƒ dC}AdD}BdEdFdGœ}Ct B|A|B|C¡}/|/dHkrd}t||d \}-}|- | ¡ |- &¡  t 8dI|¡ d}@nd}@qxn¸|sÖ|s0|rÖ|rBtdJ|ƒ n
tdK|ƒ g }D|$D ]*}<|<d( tj #|¡d( krT|D C|<¡ qTtD|Dƒr¨tdLƒ |#D ]}EtdM|Eƒ q–|&rÖ|dNkrÖtdOƒ |%D ]}EtdM|Eƒ qÄ|	s.|	s.|dNk	r.|	r.dP|v 	r.|	s.|
	r.tdQƒ t EdR|dP dS |dP dT ¡ |+	rltj |¡	rltj |+¡	rlzt F|+¡ W n   Y n0 |+	r’tj |+¡	r’|	s’tdU|+ ƒ dS )VzSend a report.Fr   zreportbug.debian.orgzpackages.debian.orgzutf-8z,Error: Message creation failed, not sending
NZFromZToZCcZBccZREPLYTOzReply-ToZ	reportbugz
Message-IDzX-MailerT)Ú	localtimeZDatezX-Reportbug-Versionc                 S   s   g | ]}t |ƒ‘qS r   ©Ústr©r   r$   r   r   r   r     r   zsend_report.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS r   rq   rs   r   r   r   r     r   zX-Debbugs-Ccz, ZPAGERzsensible-pagerÚwz"Does your report seem satisfactoryzYes, send it.zNo, don't send it.r'   z/var/tmp/%s.bugú~z$Unable to rename existing %s as %s~
z'Writing to %s failed; using instead %s
rS   c                 S   s   g | ]}t  |d  ¡‘qS ©r   )r5   r6   )r   Úar   r   r   r   F  r   r+   r   zSending message via %s...
z%s -f %s -oi -oem %sZbackupz$Saving a backup of the report at %s
c                 S   s   g | ]}|d  ‘qS rv   r   rs   r   r   r   r   Z  r   r   zConnecting to %s via SMTP...
iK  z:465éÈ   i+  zEnter SMTP password for %s@%s: z/SMTP error: authentication failed.  Try again.
é   zSMTP send failure: zC. You can retry, or save the report and exit. Do you want to retry?zYes, please retry.zNo, save and exit.zWrote bug report to zB
Hint: You can resume an unsent report using reportbug -r TEMPFILEz#Unable to send report to %s: %d %s
zBug report written to z8Error: send/write operation failed, bug report saved to zSpawning %s...
)ÚshellzMMutt users should be aware it is mandatory to edit the draft before sending.
z9Report has not been sent yet; what do you want to do now?ZEqzEdit the message.z3Quit reportbug; will save the draft for future use.)ÚeÚqr|   zDraft saved into %s
z
Message sent to: %s
z
Bug report submitted to: %s
zCopies sent to:
z  %s
rn   z)Copies will be sent after processing to:
rJ   Ú
a´  If you want to provide additional information, please wait to receive the bug tracking number via email; you may then send any extra information to %s (e.g. %s), where n is the bug number.  Normally you will receive an acknowledgement via email including the bug report number within an hour; if you haven't received a confirmation, then the bug reporting process failed at some point (reportbug or MTA failure, BTS maintenance, etc.).
ÚnZnnnnnnz&A copy of the report is stored as: %s
)Gr   rm   r#   rN   r2   r4   ÚgetrJ   ÚutilsZ
make_msgidr   Z
formatdater   Zget_allZgetaddressesÚjoinZ	as_stringÚpopenr0   Ú	ExceptionÚerrnoZEPIPEr!   Zyes_noÚsysrP   r   r:   r;   Ú
expanduserÚrenamer=   r   ÚgetcwdÚchdirZ	parseaddrr5   r6   r1   ÚlowerÚsmtplibZSMTPÚendswithZSMTP_SSLZehloZheloZstarttlsZget_passwordZloginZsendmailÚquitÚsocketÚerrorZSMTPExceptionÚ
isinstanceZSMTPAuthenticationErrorZlong_messageÚitemsÚflushr<   Ú
executableZget_send_commandZneeds_terminalr   Ú
returncoder7   Zselect_optionsÚappendrE   Zfinal_messager3   )Fr>   re   Zmuar?   ZsendtoZccaddrZbccaddrZheadersr@   rf   ZmailingZsysinfoZrtypeZexinfoZreplytoZ	printonlyÚtemplateZoutfileZmtaZkudosZsmtptlsZsmtphostZsmtpuserZ
smtppasswdZparanoidrA   Zenvelopefromrh   Zusing_sendmailZmsgnamerg   ZtfprefixrV   ÚheaderÚvalueZaddrsZalistZcclistZ
debbugs_ccZaddrlistZpagerÚpr{   rX   ÚpiperB   Z
newmsgnamer$   ZmalistZjalistZfaddrZenvfromZbackupfhZ
backupnameZtoaddrsZtryagainZrefusedZretryZconnZresponseZaddrÚerrZsendcmdZreturnvalueZ	succeededZmtitleZmoptsZ	moptsdescZ	addressesZaddressr   r   r   Úsend_reportÊ   sè   


ÿ
þ

.ÿ
 ÿ
ÿ

ÿÿ



ÿÿ
þ
,ÿ


ÿ


ÿ




,ÿø"rœ   )r$   Nr%   N)N)r$   rD   TNrn   NNFFNr   FFro   NNFNN)4r…   r2   r]   r5   Ú
subprocessr   r   r   r   rJ   r‹   rŽ   Zemail.mime.multipartr   Zemail.mime.textr   Zemail.mime.audior   Zemail.mime.imager	   Zemail.mime.baser
   Zemail.mime.messager   rY   Ú__init__r   r   Z	tempfilesr   r   r   Ú
exceptionsr   r!   r   r€   r   r„   r    r   ÚrangeZascii_rangeÚcompileÚescapeZnotasciiZ	notascii2r#   rC   rN   rm   rœ   r   r   r   r   Ú<module>   sH   
2
M       ù