
    Je                         d Z ddlZddlmZmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZmZ ddlmZ ddlmZ dZ G d d	e      Zd
 Zedk(  r e        yy)z
Login dialog to authenticate on Github.

Adapted from qcrash/_dialogs/gh_login.py of the
`QCrash Project <https://github.com/ColinDuquesnoy/QCrash>`_.
    N)QEventQt)	QCheckBoxQDialogQFormLayoutQLabel	QLineEditQPushButtonQSizePolicyQSpacerItem
QTabWidgetQVBoxLayoutQWidget)_)to_text_stringz9https://github.com/settings/tokens/new?scopes=public_repoc                   :    e Zd ZdZddZd Zd Zd Zed        Z	y)	DlgGitHubLoginz)Dialog to submit error reports to Github.c                 l	   t        j                  | |       t        d      }| j                  dd       | j	                  |       | j                  | j                         t        j                   z         d}t        |j                  |            }|j                  d       t               | _        t               }|j                  dddd       t        t        d	      j                  t                     }|j#                  d
       |j%                  d
       |j'                  t        j(                         t        d      }	|j+                  dt        j,                  |	       t/               | _        | j0                  j3                  t.        j4                         | j0                  j6                  j9                  | j:                         |j+                  dt        j<                  | j0                         d | _        | jA                         rtC        t        d            | _        | j>                  jE                  t        d             | j>                  jG                  |       |j+                  dt        j<                  | j>                         tI               }
tK               }|jM                  tO        dd             |jQ                  |       |jM                  tO        ddtR        jT                  tR        jV                               |jY                  |       |jM                  tO        ddtR        jT                  tR        jV                               |
j[                  |       | j                  j]                  |
t        d             t_        t        d            | _0        | j`                  jb                  j9                  | jd                         | j`                  jg                  d
       tK               }|jQ                  |       |jQ                  | j                         |jQ                  | j`                         | j[                  |       |r| j0                  ji                  |       n| j0                  jk                          | jm                  | jo                         | jq                                y )NzSign in to Githubi  iw  z><html><head/><body><p align="center">{title}</p></body></html>)titlezfont-size: 16px;r   a  For users <b>with</b> two-factor authentication enabled, or who prefer a per-app token authentication.<br><br>You can go <b><a href="{}">here</a></b> and click "Generate token" at the bottom to create a new token to use for this, with the appropriate permissions.TzToken:    zRemember tokenz"Spyder will save your token safely      2   zAccess TokenzSign in)9r   __init__r   resizesetWindowTitlesetWindowFlagswindowFlagsr   WindowContextHelpButtonHintr   formatsetStyleSheetr   tabsr   setContentsMargins	TOKEN_URLsetOpenExternalLinkssetWordWrapsetAlignmentAlignJustify	setWidget	LabelRoler	   le_tokensetEchoModePasswordtextChangedconnectupdate_btn_state	FieldRolecb_remember_tokenis_keyring_availabler   
setToolTip
setCheckedr   r   addSpacerItemr   	addWidgetr   Minimum	Expanding	addLayout	setLayoutaddTabr
   
bt_sign_inclickedacceptsetDisabledsetTextsetFocussetFixedSizewidthheight)selfparenttokenremember_tokenr   htmllbl_htmltoken_form_layouttoken_lbl_msg	lbl_token
token_authtoken_layoutlayouts                @/usr/lib/python3/dist-packages/spyder/widgets/github/gh_login.pyr   zDlgGitHubLogin.__init__"   s   v&%&CE"""@"@!@@	B,$++E+2312 L	 (M,,RB;q "@  A BHDMBOP 	**40!!$'""2??39%	##A{'<'<iH!!!)"4"45!!))$*?*?@##A{'<'<dmmL!%$$&%.q1A/B%CD"""--a 1? /@ A""--n='';+@+@(,(>(>@ Y
"}"";q!#45}-""2{22K4I4IJ	L01""2{22K4I4IJ	L\*		Q~%67 &a	l3''4##D) "#)v MM!!%(MM""$$**,6    c                 B   | j                   g}||v r|j                         t        j                  k(  rm|j	                         t
        j                  k(  rL|j                         t
        j                  z  r+| j                  j                         r| j                          yy)NTF)r,   typer   KeyPresskeyr   
Key_Return	modifiersControlModifierr>   	isEnabledr@   )rG   objeventinteresting_objectss       rS   eventFilterzDlgGitHubLogin.eventFilteru   sn    #}}o%%%**,&//*I		r}},OO%(:(::OO--/rT   c                     t        | j                  j                               j                         dk7  }| j                  j                  |       y )N )r   r,   textstripr>   
setEnabled)rG   rI   s     rS   r1   zDlgGitHubLogin.update_btn_state   s9    t}}1134::<B""5)rT   c                 ,    	 ddl }y# t        $ r Y yw xY w)z3Check if keyring is available for password storage.r   NTF)keyring	Exception)rG   rg   s     rS   r4   z#DlgGitHubLogin.is_keyring_available   s    	 		s    	c                    t        |||      }|j                         |j                  k(  rR|j                  j	                         }|j
                  r|j
                  j                         }nd}t        ||      }|S t        d d      S )NF)rI   rJ   )r   exec_Acceptedr,   rc   r3   	isCheckeddict)clsrH   rI   rJ   dlgcredentialss         rS   loginzDlgGitHubLogin.login   s}    VUN;99;#,,&LL%%'E$$!$!6!6!@!@!B!&U.<>K$#(* 	*rT   N)F)
__name__
__module____qualname____doc__r   r`   r1   r4   classmethodrq    rT   rS   r   r      s/    3Q7f* * *rT   r   c                      ddl m}   |        }t        d d       }|j                          t	        j
                  |j                                y )Nr   )qapplication)spyder.utils.qthelpersry   r   showsysexitrj   )ry   appro   s      rS   testr      s3    3
.C
t
$CHHJHHSYY[rT   __main__)ru   r|   qtpy.QtCorer   r   qtpy.QtWidgetsr   r   r   r   r	   r
   r   r   r   r   r   spyder.config.baser   spyder.py3compatr   r%   r   r   rr   rw   rT   rS   <module>r      s^     "2 2 2 2 ! + H	{*W {*| zF rT   