o „î¯`×'ã@s ddlmZe ¡ddlmZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZzddlmZWnYe jjdkrYddlZeje _ddlmZddlmZdd lTddlZGd d „d ejjƒZej  d e¡ej  d e¡ejj! "d d g¡dS)é)Ústandard_library)ÚinputN)ÚParser)Údefaulté)Úconfig)Úlog)Ú*c@sdeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dS)Ú ImapBackendcCsœtjj ||¡t d|jj|j|j |j f¡||_ |j dur't t dƒƒ}n|j }|js?dtjvr9tj d¡}n t d¡}n|j}||_ ||_| ¡dS)Nz)I'm %s (scheme %s) connecting to %s as %szEnter account userid: Ú IMAP_PASSWORDzEnter account password: )Ú duplicityÚbackendÚBackendÚ__init__rÚDebugÚ __class__Ú__name__ÚschemeÚhostnameÚusernameÚurlÚevalrÚpasswordÚosÚenvironÚgetÚgetpassÚresetConnection)ÚselfÚ parsed_urlrr©r ú@/usr/lib/python3/dist-packages/duplicity/backends/imapbackend.pyr8s ÿ    zImapBackend.__init__cCs|j}ztjd}Wn ty|j}Ynwz|j ¡Wn ty'Ynw|jdkr7t j }||dƒ|_n|jdkrEt j }||dƒ|_t   d|j¡t dd|jd ¡|_tjsq|j |j|j¡|j tj¡t  d ¡dS|j |jd |j|j¡|j tj¡t  d ¡dS) NÚ IMAP_SERVERÚimapéÚimapsiázType of imap class: %sz^/ÚézIMAP connectedú@)rrrÚKeyErrorrÚconnÚcloseÚ ExceptionrÚimaplibÚIMAP4Ú IMAP4_SSLrrrÚreÚsubÚpathÚ remote_dirrÚimap_full_addressÚloginrrÚselectÚ imap_mailboxÚInfo)rrÚ imap_serverÚclr r r!rTs4  ÿ ÿ   zImapBackend.resetConnectioncCs^tjj ¡}|j|d<| ¡|d<tjj dd¡}| | ¡¡tj   |¡|  |¡|  ¡S)NÚFromÚSubjectÚ applicationÚbinary) ÚemailÚmimeÚ multipartÚ MIMEMultipartr3ÚdecodeÚMIMEBaseÚ set_payloadÚreadÚencodersÚ encode_base64ÚattachÚ as_string)rÚfÚrnameÚmpÚar r r!Ú prepareBodyus     zImapBackend.prepareBodyc Cs| d¡}tj}|dkrd}|dkr…z!|j |¡| ||¡}|j tj¡|j tjdd| ¡¡WnQt j j t j t jfy€|d8}t d|¡t d¡|dkr~z| ¡Wn"t j j t j t jfyy|d8}t d¡t d¡Ynw|dksUYnw|dkst d|¡dS) NÚrbré@ r'z#Error saving '%s', retrying in 30s éú$Error reconnecting, retrying in 30s z"IMAP mail with '%s' subject stored)ÚopenrÚtimeoutr*r6rOr7ÚappendÚencoder-r.ÚabortÚsocketÚerrorÚsslerrorrr8ÚtimeÚsleepr)rÚ source_pathÚremote_filenamerKÚallowedTimeoutÚbodyr r r!Ú_put‡s:     ýü€ü÷zImapBackend._putc Cs¢tj}|dkr d}|dkr¶zW|j tj¡|j dd|¡\}}|dkr)t|dƒ‚|ddkr3tdƒ‚|j |dd¡\}}|dkrHt|dƒ‚|dd}tƒ}|  |  ¡¡}|  d¡} | j d d } WnQt j jtjtjfy±|d8}t d |¡t d ¡|dkr¯z| ¡Wn"t j jtjtjfyª|d8}t d ¡t d ¡Ynw|dks†Ynw|dks | d¡} |  | ¡|  ¡| ¡t d|¡dS)NrrQr<ÚOKr&zno mail with subject %sz(RFC822)r'T)rCz$Error loading '%s', retrying in 30s rRrSÚwbz#IMAP mail with '%s' subject fetched)rrUr*r6r7Úsearchr,ÚfetchrÚparsestrrCÚ get_payloadr-r.rXrYrZr[rr8r\r]rrTÚwriter+Úsetdata) rr_Ú local_pathr`ÚresultÚflistÚrawbodyÚpÚmrMraÚtfiler r r!Ú_get¥sT        ýü€üç & zImapBackend._getc CsXg}|j tj¡\}}|dkrt|dƒ‚|j dd|j¡\}}|dkr*t|dƒ‚|ddkr2|S|d ¡  d¡}d|d|df}|j  |d¡\}}|dkrXt|dƒ‚|D]O}t |ƒd krcqZt j jd krwttd  |d  d ¡¡}n tƒ |d  d ¡¡}|d }|d} | dur©t d|jd¡ | ¡r©| |¡t d|| f¡qZ|S)NrcrÚFROMóó s%s:%séÿÿÿÿz(BODY[HEADER])r'r)Úpolicyzunicode-escapeÚsubjectÚfromú^ú$zIMAP flist: %s %s)r*r6rr7ÚBackendExceptionrer3r,ÚstripÚsplitrfÚlenÚsysÚ version_infoÚmajorrrrgrCr0ÚcompileÚmatchrVrr8) rÚretrlrmÚnumsÚsetÚmsgÚheadersÚsubjÚ header_fromr r r!Ú_listÖs8       €zImapBackend._listcGs$||Ž\}}|dkrt|dƒ‚|S)Nrcr)r,)rÚfunÚargsr…rmr r r!Úimapfüs  zImapBackend.imapfcCs| |jj|dd¡dS)Nz+FLAGSz\DELETED)rr*Ústore)rÚir r r!Údelete_single_mailszImapBackend.delete_single_mailcCs| |jj¡}dS©N)rr*Úexpunge)rrmr r r!r”szImapBackend.expungecCs~|D]-}| |jjdd|¡}|d ¡}t|ƒdkr/|ddkr/| |d¡t d|¡q| ¡t dt|ƒ¡dS)Nz (SUBJECT %s)rr&zmarked %s to be deletedzIMAP expunged %s files) rr*rer~rr’rÚNoticer”)rÚ filename_listÚfilenamermr r r!Ú _delete_lists €zImapBackend._delete_listcCs&|j tj¡|j ¡|j ¡dSr“)r*r6rr7r+Úlogout)rr r r!Ú_closes zImapBackend._closeN)rÚ __module__Ú __qualname__rrrOrbrrrŒrr’r”r˜ršr r r r!r 7s!1& r r#r%)#ÚfuturerÚinstall_aliasesÚbuiltinsrr?Úemail.encodersÚemail.mime.multipartrr-rr0rYr€r\Ú email.parserrÚ email.policyrrr‚ÚsslÚSSLErrorr[r rrÚduplicity.errorsÚduplicity.backendr rr Úregister_backendÚ uses_netlocÚextendr r r r!Ús<      b