Ë
    PU hj.  ã                  ój  — d Z ddlm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
 ddlZddlZddlmZ ddlmZ ddlmZmZ ej(                  j+                  ej(                  j-                  d	«      d
d«      Z e«       Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Ze dk(  r e«       Z! ejD                  e!«       yy)z¦Starts an interactive Jira session in an ipython terminal.

Script arguments support changing the server and a persistent authentication
over HTTP BASIC or Kerberos.
é    )ÚannotationsN)Úgetpass)Ú	parse_qsl)ÚSIGNATURE_HMAC_SHA1)ÚOAuth1)ÚJIRAÚ__version__ú~z.jira-pythonzjirashell.inic                óø  — |€| j                  d«      }t        |t        |¬«      }t        j                  | dz   ||¬«      }t        t        |j                  «      «      }|j                  dt        «      }|j                  dt        «      }	|t        u s|	t        u rJ|j                  d«      }
|
�d|
› �}n&d	j                  d
„ |j                  «       D «       «      }t        |«       |r't        d«       t        d|› �«       t        d|	› �«       | › d|› �}|rt        d|› �«       n t        j                  |«       t        d«       t!        d| › d�«      }|j#                  «       dk7  rt        d«       t        |t        |||	¬«      }t        j                  | dz   ||¬«      }t        t        |j                  «      «      }|r-t        d«       t        d|d   › �«       t        d|d   › �«       |d   |d   ||dœS )NÚhttps)Úsignature_methodÚrsa_keyz$/plugins/servlet/oauth/request-token)ÚverifyÚauthÚoauth_tokenÚoauth_token_secretÚoauth_problemzOAuth error: ú c              3  ó0   K  — | ]  \  }}|› d |› �–— Œ y­w)ú:N© )Ú.0ÚkeyÚvalues      úF/var/www/timesheet/venv/lib/python3.12/site-packages/jira/jirashell.pyú	<genexpr>zoauth_dance.<locals>.<genexpr>.   s   è ø€ ÒR±J°C¸ #  a¨ wÔ/ÑRùs   ‚zRequest tokens received.z    Request token:        z    Request token secret: z-/plugins/servlet/oauth/authorize?oauth_token=z7Please visit this URL to authorize the OAuth request:
	zHYour browser is opening the OAuth authorization for this client session.z>Have you authorized this program to connect on your behalf to z? (y/n)ÚyzSAbandoning OAuth dance. Your partner faceplants. The audience boos. You feel shame.)r   r   Úresource_owner_keyÚresource_owner_secretz#/plugins/servlet/oauth/access-tokenzAccess tokens received.z    Access token:        z    Access token secret: )Úaccess_tokenÚaccess_token_secretÚconsumer_keyÚkey_cert)Ú
startswithr   r   ÚrequestsÚpostÚdictr   ÚtextÚgetÚSENTINELÚjoinÚitemsÚexitÚprintÚ
webbrowserÚopen_newÚinputÚlower)Úserverr"   Úkey_cert_dataÚprint_tokensr   ÚoauthÚrÚrequestÚrequest_tokenÚrequest_token_secretÚproblemÚmessageÚauth_urlÚapprovedÚaccesss                  r   Úoauth_dancer@      s  € Ø€~Ø×"Ñ" 7Ó+ˆô ØÔ':ÀMô€Eô 	�‰ØÐ7Ñ7ÀÈUô	€Aô ”9˜QŸV™VÓ$Ó%€GØ—K‘K ¬xÓ8€MØ"Ÿ;™;Ð';¼XÓFÐØœÑ Ð$8¼HÑ$DØ—+‘+˜oÓ.ˆØÐØ% g YÐ/‰Gà—h‘hÑRÀ'Ç-Á-Ã/ÔRÓRˆGÜˆWŒáÜÐ(Ô)ÜÐ*¨=¨/Ð:Ô;ÜÐ*Ð+?Ð*@ÐAÔBð �ÐFÀ}ÀoÐV€HÙÜÐIÈ(ÈÐTÕUä×Ñ˜HÔ%ÜØVô	
ô Ø
HÈÈÐPWÐXó€Hð ‡~�~Ó˜3ÒÜØaô	
ô
 ØÜ,ØØ(Ø2ô€Eô 	�‰ØÐ6Ñ6¸vÈEô	€Aô ”)˜AŸF™FÓ#Ó$€FáÜÐ'Ô(ÜÐ)¨&°Ñ*?Ð)@ÐAÔBÜÐ)¨&Ð1EÑ*FÐ)GÐHÔIð ˜}Ñ-Ø%Ð&:Ñ;Ø$Ø!ñ	ð ó    c                 ó.  — t         j                  j                  t        «      si i i i fS t	        j
                  «       } 	 | j                  t        «       | j                  d«      r7i }| j                  d«      D ]   \  }}|dv r| j                  d|«      }|||<   Œ" ni }| j                  d«      rt        | j                  d«      «      }ni }| j                  d«      r7i }| j                  d«      D ]   \  }}|dv r| j                  d|«      }|||<   Œ" ni }| j                  d«      r7i }| j                  d«      D ]   \  }}|d	v r| j                  d|«      }|||<   Œ" ni }||||fS # t        j                  $ r}t        dt        › d|› �«       ‚ d }~ww xY w)
Nz#Couldn't read config file at path: ú
Úoptions)r   ÚasyncÚ
basic_authr6   )r@   r5   Úkerberos_authÚuse_kerberos)ÚosÚpathÚexistsÚCONFIG_PATHÚconfigparserÚConfigParserÚreadÚParsingErrorr.   Úhas_sectionr,   Ú
getbooleanr'   )ÚparserÚerrrD   Úoptionr   rF   r6   rG   s           r   Úprocess_configrV   c   s¶  € Ü�7‰7�>‰>œ+Ô&Ø�2�r˜2ˆ~Ðä×&Ñ&Ó(€FðØ�‰”KÔ ð
 ×Ñ˜)Ô$ØˆØ#Ÿ\™\¨)Ó4ò 	$‰MˆF�EØÐ,Ñ,Ø×)Ñ)¨)°VÓ<�Ø#ˆG�FŠOñ	$ð
 ˆà×Ñ˜,Ô'Ü˜&Ÿ,™, |Ó4Ó5‰
àˆ
à×Ñ˜'Ô"ØˆØ#Ÿ\™\¨'Ó2ò 	"‰MˆF�EØÐ8Ñ8Ø×)Ñ)¨'°6Ó:�Ø!ˆE�&ŠMñ	"ð
 ˆà×Ñ˜/Ô*ØˆØ#Ÿ\™\¨/Ó:ò 	*‰MˆF�EØ˜.Ñ)Ø×)Ñ)¨/¸6ÓB�Ø$)ˆM˜&Ò!ñ	*ð
 ˆà�J  }Ð4Ð4øôI ×$Ñ$ò ÜÐ3´K°=ÀÀ3À%ÐHÔIØûðús   ¿E& Å&FÅ9FÆFc                 ó  — t        j                  d¬«      } | j                  d«      }|j                  ddd¬«       |j                  dd	d
¬«       |j                  dd¬«       |j                  ddd¬«       |j                  ddd¬«       | j                  d«      }|j                  ddd¬«       |j                  ddd¬«       |j                  dddd¬«       | j                  d«      }|j                  dd dd!¬«       |j                  d"d#d$¬«       |j                  d%d&d'¬«       |j                  d(d)dd*¬«       | j                  d+«      }|j                  d,d-d.¬«       |j                  d/d0d1¬«       | j                  d2«      }|j                  d3dd4¬«       |j                  d5d6d7gd8¬9«       | j	                  «       }i }|j
                  r|j
                  |d:<   |j                  r|j                  |d;<   |j                  r|j                  |d<<   |j                  r|j                  |d=<   d>|d?<   |j                  rd@|d?<   |j                  rt        «       |_        i }|j                  r|j                  |dA<   |j                  r|j                  |dB<   d }	|j                  r.t        |j                  «      5 }
|
j!                  «       }	d d d «       i }|j"                  rd>|j$                  |	|j&                  dCœ}nV|j(                  rJ|j*                  r>|j$                  r2|j                  r&|j(                  d@|j*                  |j$                  |	dDœ}dE|j,                  i}|j.                  r|j.                  |dF<   ||||fS # 1 sw Y   Œ¸xY w)GNz2Start an interactive Jira shell with the REST API.)ÚdescriptionzJira server connection optionsz-sz--serverz8The Jira instance to connect to, including context path.)Úhelpz-rz--rest-pathz%The root path of the REST API to use.z
--auth-urlzPath to URL to auth against.z-vz--rest-api-versionz0The version of the API under the specified name.z--no-verifyÚ
store_truez!do not verify the ssl certificate)ÚactionrY   zBASIC auth optionsz-uz
--usernamez3The username to connect to this Jira instance with.z-pz
--passwordz'The password associated with this user.z-Pz--prompt-for-passwordz,Prompt for the password at the command line.zOAuth optionsz-odz--oauth-dancez6Start a 3-legged OAuth authentication dance with Jira.z-ckz--consumer-keyzOAuth consumer key.z-kz
--key-certz˜Private key to sign OAuth requests with (should be the pair of the public key                                   configured in the Jira application link)z-ptz--print-tokensz8Print the negotiated OAuth tokens as they are retrieved.z5OAuth options for already-authenticated access tokensz-atz--access-tokenz OAuth access token for the user.z-atsz--access-token-secretz"Secret for the OAuth access token.zKerberos optionsz--use-kerberos-authzUse kerberos authz--mutual-authenticationÚOPTIONALÚDISABLEDzMutual authentication)ÚchoicesrY   r3   Ú	rest_pathr=   Úrest_api_versionTr   FÚusernameÚpassword)r@   r"   r#   r5   )r    r@   r!   r"   r#   rH   Úmutual_authentication)ÚargparseÚArgumentParserÚadd_argument_groupÚadd_argumentÚ
parse_argsr3   r_   r=   r`   Ú	no_verifyÚprompt_for_passwordr   rb   ra   r#   ÚopenrO   r@   r"   r5   r    r!   Úuse_kerberos_authrc   )rS   Ú
jira_groupÚbasic_auth_groupÚoauth_groupÚoauth_already_groupÚkerberos_groupÚargsrD   rF   r4   Úkey_cert_filer6   rG   s                r   Úprocess_command_linert   ‘   s	  € Ü×$Ñ$ØHô€Fð ×*Ñ*Ð+KÓL€JØ×ÑØØØGð ô ð
 ×ÑØˆmÐ"Ið ô ð ×Ñ˜LÐ/MÐÔNØ×ÑØØØ?ð ô ð ×ÑØ˜lÐ1Tð ô ð ×0Ñ0Ð1EÓFÐØ×!Ñ!ØˆlÐ!Vð "ô ð ×!Ñ!ØˆlÐ!Jð "ô ð ×!Ñ!ØØØØ;ð	 "ô ð ×+Ñ+¨OÓ<€KØ×ÑØØØØEð	 ô ð ×Ñ˜UÐ$4Ð;PÐÔQØ×ÑØØðMð ô ð ×ÑØØØØGð	 ô ð !×3Ñ3Ø?óÐð ×$Ñ$ØÐÐ&Hð %ô ð ×$Ñ$ØÐ'Ð.Rð %ô ð ×.Ñ.Ð/AÓB€NØ×ÑØ lÐ9Lð  ô ð ×ÑØ!Ø˜ZÐ(Ø$ð  ô ð
 ×ÑÓ€Dà€GØ‡{‚{Ø ŸK™Kˆ�Ñà‡~‚~Ø#Ÿ~™~ˆ�Ñà‡}‚}Ø"Ÿm™mˆ�
Ñà×ÒØ&*×&;Ñ&;ˆÐ"Ñ#à€GˆHÑØ‡~‚~Ø!ˆ�Ñà×ÒÜ›	ˆŒà€JØ‡}‚}Ø!%§¡ˆ
�:Ñà‡}‚}Ø!%§¡ˆ
�:Ñà€MØ‡}‚}Ü�$—-‘-Ó ð 	1 MØ)×.Ñ.Ó0ˆM÷	1ð €EØ×ÒàØ ×-Ñ-Ø%Ø ×-Ñ-ñ	
‰ð 	×ÒØ×$Ò$Ø×ÒØ�MŠMð !×-Ñ-Ø Ø#'×#;Ñ#;Ø ×-Ñ-Ø%ñ
ˆð $ T×%;Ñ%;Ð<€Mà×!Ò!Ø15×1KÑ1KˆÐ-Ñ.à�J  }Ð4Ð4÷=	1ð 	1ús   Ê:NÎNc                 óÒ   — t        «       \  } }}}t        «       \  }}}}| j                  |«       |j                  |«       |j                  |«       |j                  |«       | |||fS )N)rV   rt   Úupdate)rD   rF   r6   rG   Úcmd_optionsÚcmd_basic_authÚ	cmd_oauthÚcmd_kerberos_auths           r   Ú
get_configr{     si   € Ü0>Ó0@Ñ-€GˆZ˜ ä@TÓ@VÑ=€K� Ð,=à‡N�N�;ÔØ×Ñ�nÔ%Ø	‡L�L�ÔØ×ÑÐ*Ô+à�J  }Ð4Ð4rA   c                óð   — | j                  d«      r.| d   }t        d«      dk(  rLt        j                  || d   |«       n1t	        d«       t        j
                  || d   «      }|st        d«      ‚| d   |fS )Nrb   z8Would you like to remember password in OS keyring? (y/n)r   ra   z Getting password from keyring...zNo password provided!)r)   r1   ÚkeyringÚset_passwordr.   Úget_passwordÚ
ValueError)r   r3   rb   s      r   Úhandle_basic_authr�   ,  s}   € Ø‡x�x�
ÔØ˜
Ñ#ˆÜÐKÓLÐPSÒSÜ× Ñ  ¨¨jÑ)9¸8ÕDäÐ0Ô1Ü×'Ñ'¨°°ZÑ0@ÓAˆÙÜÐ4Ó5Ð5Ø�
Ñ˜XÐ%Ð%rA   c                 óæ  — 	 	 t          t        j                  d«       t	        «       \  } }}}|rt        || d   ¬«      }|j                  d«      du rt        | d   |d   |d   |d   | d	   «      }nMt        |j                  d
«      |j                  d«      |j                  d«      |j                  d«      f«      sd }|j                  dd«      }|d= t        | ||||¬«      }dd l
}|j                  d   dk\  rddlm} nddlm}  |dt        z   dz   |j                   z   dz   ¬«      } |d«       y # t        $ r Y �Œ w xY w# t"        $ r%}	t%        |	t        j&                  ¬«       Y d }	~	yd }	~	ww xY w)Nz2Running ipython inside ipython isn't supported. :(r3   )r   r3   r@   Tr"   r#   r5   r   r    r!   rH   F)rD   rF   ÚkerberosÚkerberos_optionsr6   r   é   )ÚInteractiveShellEmbedz<Jira Shell z (z)>)Úbanner1zA*** Jira shell active; client is in 'jira'. Press Ctrl-D to exit.)Úfileé   )Úget_ipythonÚsysr-   Ú	NameErrorr{   r�   r)   r@   Úallr   ÚIPythonÚversion_infoÚIPython.terminal.embedr†   ÚIPython.frontend.terminal.embedr	   Ú
server_urlÚ	Exceptionr.   Ústderr)
rD   rF   r6   rG   rH   ÚjirarŽ   r†   Úip_shellÚes
             r   Úmainr˜   9  sˆ  € ð8ð	KÝô �H‰HÐIÔJä4>³LÑ1ˆ�˜U MáÜ*°
À7È8ÑCTÔUˆJà�9‰9�]Ó# tÑ+ÜØ˜Ñ!Ø�nÑ%Ø�jÑ!Ø�nÑ%Ø˜Ñ!ó‰Eô à—	‘	˜.Ó)Ø—	‘	Ð/Ó0Ø—	‘	˜.Ó)Ø—	‘	˜*Ó%ð	ô
ð ˆEà$×(Ñ(¨¸Ó?ˆØ˜.Ð)äØØ!Ø!Ø*Øô
ˆó 	ð ×Ñ Ñ" aÒ'ÞDåMá(Ø"¤[Ñ0°4Ñ7¸$¿/¹/ÑIÈDÑPô
ˆñ 	ÐTÕUøôe ò 	Úð	ûôf ò Üˆa”c—j‘jÕ!Üûðús5   ƒD2 ‰D(E Ä2	D?Ä;E Ä>D?Ä?E Å	E0ÅE+Å+E0Ú__main__)FN)#Ú__doc__Ú
__future__r   rd   rM   rI   r‹   r/   r   Úurllib.parser   r}   r%   Úoauthlib.oauth1r   Úrequests_oauthlibr   r•   r   r	   rJ   r+   Ú
expanduserrL   Úobjectr*   r@   rV   rt   r{   r�   r˜   Ú__name__Ústatusr-   r   rA   r   ú<module>r£      s§   ðñõ
 #ã Û Û 	Û 
Û Ý Ý "ã Û Ý /Ý $ç "à�g‰g�l‰l˜2Ÿ7™7×-Ñ-¨cÓ2°NÀOÓT€Ù‹8€óEòP+5ò\K5ò\
5ò
&ò9ðx ˆzÒÙ‹V€FØ€C‡H�HˆVÕð rA   