ó
‹²,]c           @   sÙ   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 m Z d Z d e f d	 „  ƒ  YZ d
 „  Z e d k rÕ e ƒ  n  d S(   s˜   
Login dialog to authenticate on Github.

Adapted from qcrash/_dialogs/gh_login.py of the
`QCrash Project <https://github.com/ColinDuquesnoy/QCrash>`_.
iÿÿÿÿN(   t   QEventt   Qt(   t	   QCheckBoxt   QDialogt   QFormLayoutt   QLabelt	   QLineEditt   QPushButtont   QSizePolicyt   QSpacerItemt
   QTabWidgett   QVBoxLayoutt   QWidget(   t   _(   t   PY2t   to_text_strings9   https://github.com/settings/tokens/new?scopes=public_repot   DlgGitHubLoginc           B   sG   e  Z d  Z e e d „ Z d „  Z d „  Z d „  Z e d „  ƒ Z	 RS(   s)   Dialog to submit error reports to Github.c         C   sb  t  j |  | ƒ t d ƒ } |  j d d ƒ |  j | ƒ |  j |  j ƒ  t j @ƒ d } t	 | j
 d | ƒ ƒ }	 |	 j d ƒ t ƒ  |  _ t ƒ  }
 |
 j d d d d ƒ t	 t d	 ƒ ƒ } | j t ƒ | j t j ƒ t	 t d
 ƒ ƒ } |
 j d t j | ƒ t ƒ  |  _ |  j j j |  j ƒ |
 j d t j |  j ƒ |
 j d t ƒ  ƒ t	 t d ƒ ƒ } |
 j d t j | ƒ t ƒ  |  _ |  j j t j  ƒ |  j j j |  j ƒ |
 j d t j |  j ƒ d  |  _" t# oãt$ j% j& d ƒ } |  j' ƒ  rP| rPt( t d ƒ ƒ |  _" |  j" j) t d ƒ ƒ |  j" j* | ƒ |
 j d t j |  j" ƒ n  t ƒ  } t+ ƒ  } | j, t- t- d d ƒ ƒ ƒ | j. | ƒ | j, t- t- d d d t/ j0 ƒƒ ƒ | j1 |
 ƒ | j, t- t- d d d t/ j0 ƒƒ ƒ | j2 | ƒ |  j j3 | t d ƒ ƒ t ƒ  } | j d d d d ƒ t	 t d ƒ j
 t4 ƒ ƒ } | j5 t ƒ | j t ƒ | j t j ƒ t	 d ƒ } | j d t j | ƒ t ƒ  |  _6 |  j6 j t j  ƒ |  j6 j j |  j ƒ | j d t j |  j6 ƒ d  |  _7 |  j' ƒ  rN| rNt( t d ƒ ƒ |  _7 |  j7 j) t d ƒ ƒ |  j7 j* | ƒ | j d t j |  j7 ƒ n  t ƒ  } t+ ƒ  } | j, t- t- d d ƒ ƒ ƒ | j. | ƒ | j, t- t- d d d t/ j0 ƒƒ ƒ | j1 | ƒ | j, t- t- d d d t/ j0 ƒƒ ƒ | j2 | ƒ |  j j3 | t d ƒ ƒ t8 t d ƒ ƒ |  _9 |  j9 j: j |  j; ƒ |  j9 j< t ƒ t+ ƒ  } | j. |	 ƒ | j. |  j ƒ | j. |  j9 ƒ |  j2 | ƒ | rÀ| rÀ|  j j= | ƒ |  j j= | ƒ |  j9 j> ƒ  nL | ræ|  j j= | ƒ |  j j> ƒ  n& | rÿ|  j6 j= | ƒ n |  j j> ƒ  |  j? |  j@ ƒ  |  jA ƒ  ƒ |  j jB |  ƒ |  j jB |  ƒ |  j jC j |  j ƒ d  S(   Ns   Sign in to GithubiŸ  iw  s>   <html><head/><body><p align="center">{title}</p></body></html>t   titles   font-size: 16px;iÿÿÿÿi    sN   For regular users, i.e. users <b>without</b> two-factor authentication enableds	   Username:t    s
   Password: i   t   linuxs   Remember mes(   Spyder will save your credentials safelyi   i   i2   t   vPolicys   Password Onlys  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.s   Token: i   s   Remember tokens"   Spyder will save your token safelyi   s   Access Tokens   Sign in(D   R   t   __init__R   t   resizet   setWindowTitlet   setWindowFlagst   windowFlagsR   t   WindowContextHelpButtonHintR   t   formatt   setStyleSheetR
   t   tabsR   t   setContentsMarginst   setWordWrapt   Truet   setAlignmentt   AlignJustifyt	   setWidgett	   LabelRoleR   t   le_usert   textChangedt   connectt   update_btn_statet	   FieldRolet   addRowR   t   le_passwordt   setEchoModet   Passwordt   Nonet   cb_rememberR   t   syst   platformt
   startswitht   is_keyring_availableR   t
   setToolTipt
   setCheckedR   t   addSpacerItemR	   t	   addWidgetR   t	   Expandingt	   addLayoutt	   setLayoutt   addTabt	   TOKEN_URLt   setOpenExternalLinkst   le_tokent   cb_remember_tokenR   t
   bt_sign_int   clickedt   acceptt   setDisabledt   setTextt   setFocust   setFixedSizet   widtht   heightt   installEventFiltert   currentChanged(   t   selft   parentt   usernamet   passwordt   tokent   remembert   remember_tokenR   t   htmlt   lbl_htmlt   basic_form_layoutt   basic_lbl_msgt   lbl_usert   lbl_passwordt   valid_py_ost
   basic_autht   basic_layoutt   token_form_layoutt   token_lbl_msgt	   lbl_tokent
   token_autht   token_layoutt   layout(    (    s=   lib/python2.7/site-packages/spyder/widgets/github/gh_login.pyR   "   sÆ    									c         C   s   |  j  |  j g } | | k r{ | j ƒ  t j k r{ | j ƒ  t j k r{ | j ƒ  t j	 @r{ |  j
 j ƒ  r{ |  j ƒ  t Sn  t S(   N(   R+   R%   t   typeR    t   KeyPresst   keyR   t
   Key_Returnt	   modifierst   ControlModifierR@   t	   isEnabledRB   R    t   False(   RK   t   objt   eventt   interesting_objects(    (    s=   lib/python2.7/site-packages/spyder/widgets/github/gh_login.pyt   eventFilter±   s    !
c         C   s³   t  |  j j ƒ  ƒ j ƒ  d k } t  |  j j ƒ  ƒ j ƒ  d k } t  |  j j ƒ  ƒ j ƒ  d k } | r„ | r„ |  j j ƒ  d k pœ | oœ |  j j ƒ  d k } |  j j	 | ƒ d  S(   NR   i    i   (
   R   R%   t   textt   stripR+   R>   R   t   currentIndexR@   t
   setEnabled(   RK   t   userRN   RO   t   enable(    (    s=   lib/python2.7/site-packages/spyder/widgets/github/gh_login.pyR(   »   s    !!!c         C   s-   y d d l  } t SWn t k
 r( t SXd S(   s3   Check if keyring is available for password storage.iÿÿÿÿN(   t   keyringR    t	   ExceptionRh   (   RK   Rs   (    (    s=   lib/python2.7/site-packages/spyder/widgets/github/gh_login.pyR3   Ä   s
    c   
      C   sï   t  | | | | | | ƒ } | j ƒ  | j k rÊ | j j ƒ  } | j j ƒ  } | j j ƒ  } | j rx | j j ƒ  } n t	 } | j
 r™ | j
 j ƒ  } n t	 } t d | d | d | d | d | ƒ }	 |	 St d d  d d  d d  d t	 d t	 ƒ S(   NRM   RN   RO   RP   RQ   (   R   t   exec_t   AcceptedR%   Rm   R+   R>   R/   t	   isCheckedRh   R?   t   dictR.   (
   t   clsRL   RM   RN   RO   RP   RQ   t   dlgRq   t   credentials(    (    s=   lib/python2.7/site-packages/spyder/widgets/github/gh_login.pyt   loginÌ   s.    				(
   t   __name__t
   __module__t   __doc__Rh   R   Rl   R(   R3   t   classmethodR|   (    (    (    s=   lib/python2.7/site-packages/spyder/widgets/github/gh_login.pyR      s   Ž	
			c          C   sO   d d l  m }  |  ƒ  } t d  d  d  d  ƒ } | j ƒ  t j | j ƒ  ƒ d  S(   Niÿÿÿÿ(   t   qapplication(   t   spyder.utils.qthelpersR   R   R.   t   showR0   t   exitRu   (   R   t   appRz   (    (    s=   lib/python2.7/site-packages/spyder/widgets/github/gh_login.pyt   testì   s
    	
t   __main__(   R   R0   t   qtpy.QtCoreR    R   t   qtpy.QtWidgetsR   R   R   R   R   R   R   R	   R
   R   R   t   spyder.config.baseR   t   spyder.py3compatR   R   R<   R   R†   R}   (    (    (    s=   lib/python2.7/site-packages/spyder/widgets/github/gh_login.pyt   <module>   s   LÍ	