ó
Ò:\c           @` s[  d  Z  d d l m Z m Z m Z d d l Z d d l m Z m Z m	 Z	 m
 Z
 d d l m Z m Z d d l m Z m Z m Z m Z m Z d d l m Z d d l m Z m Z d d	 l m Z d d
 l m Z d d l m Z d d l m  Z  m! Z! m" Z" m# Z# m$ Z$ m% Z% d d l& m' Z' d e' f d „  ƒ  YZ( d „  Z) e* d k rWe) ƒ  n  d S(   s   Anaconda Cloud login dialog.i    (   t   absolute_importt   divisiont   print_functionN(   t   QRegExpt   Qtt   QUrlt   Signal(   t   QDesktopServicest   QRegExpValidator(   t   QApplicationt   QHBoxLayoutt   QLabelt	   QLineEditt   QVBoxLayout(   t   AnacondaAPI(   t   CONFt   DEFAULT_BRAND(   t
   load_fonts(   t	   GATracker(   t   load_style_sheet(   t   ButtonLabelt
   ButtonLinkt   ButtonNormalt   ButtonPrimaryt   SpacerHorizontalt   SpacerVertical(   t
   DialogBaset   AuthenticationDialogc           B` s¤   e  Z d  Z e d ƒ Z d Z d Z e ƒ  Z e ƒ  Z	 e e
 ƒ Z d e d „ Z d „  Z d „  Z e d „  ƒ Z d d „ Z d	 „  Z d
 „  Z d „  Z d „  Z RS(   s   Login dialog.s!   ^[A-Za-z0-9_\.][A-Za-z0-9_\.\-]+$s   account/forgot_usernames   account/forgot_passwordc   	      C` sã  t  t |  ƒ j | ƒ | |  _ | |  _ t |  _ | |  _ d |  _	 d |  _
 t ƒ  |  _ d |  _ d |  _ t d ƒ |  _ t d ƒ |  _ t ƒ  |  _ t ƒ  |  _ t d ƒ |  _ t d ƒ |  _ t | ƒ |  _ t d ƒ |  _ t d j d | ƒ ƒ |  _ t d ƒ |  _ t d	 ƒ |  _ t d
 ƒ |  _ t  d ƒ |  _! t" d ƒ |  _# |  j! j$ t% ƒ t& |  j' ƒ } |  j j( | ƒ |  j) d ƒ |  j* d ƒ |  j j+ t j, ƒ |  j j- t. ƒ t/ ƒ  } | j0 |  j ƒ | j0 |  j ƒ | j0 t1 ƒ  ƒ | j0 |  j ƒ | j0 |  j ƒ t/ ƒ  } | j0 |  j ƒ t2 ƒ  } | j0 |  j ƒ | j0 |  j ƒ | j0 |  j ƒ | j3 ƒ  | j4 | ƒ | j0 |  j ƒ | j4 | ƒ | j0 t1 ƒ  ƒ | j0 |  j ƒ | j0 |  j d t5 j6 ƒ | j0 |  j d t5 j6 ƒ t2 ƒ  } | j3 ƒ  | j0 |  j# ƒ | j0 t7 ƒ  ƒ | j0 |  j! ƒ | j0 t1 ƒ  ƒ | j0 t1 ƒ  ƒ | j4 | ƒ |  j8 | ƒ |  j j9 j: |  j; ƒ |  j j9 j: |  j; ƒ |  j! j< j: |  j= ƒ |  j# j< j: |  j> ƒ |  j; ƒ  |  j? ƒ  |  j j@ ƒ  |  jA ƒ  d S(   s   Login dialog.s	   Username:s	   Password:s-   <hr><br><b>Already a member? Sign in!</b><br>s!   You can register by visiting the s	    website.s  
            <strong>{brand}</strong> is where packages, notebooks,
            and <br> environments are shared. It provides powerful <br>
            collaboration and package management for open <br>
            source and private projects.<br>
            t   brandt    s   I forgot my usernames   I forgot my passwordt   Logint   Canceli  s   Sign ini    N(B   t   superR   t   __init__t   _parentt   _brandR   t   configt   apit   Nonet   tokent   errorR   t   trackert   forgot_username_urlt   forgot_password_urlR   t   label_usernamet   label_passwordR   t   text_usernamet   text_passwordt   label_signin_textR   t   button_register_textR   t   button_registert   button_register_after_textt   formatt   label_informationt   label_messaget   button_forgot_usernamet   button_forgot_passwordR   t   button_loginR   t   button_cancelt
   setDefaultt   TrueR   t   USER_REt   setValidatort   setMinimumWidtht   setWindowTitlet   setEchoModet   Passwordt
   setVisiblet   FalseR   t	   addWidgetR   R
   t
   addStretcht	   addLayoutR   t
   AlignRightR   t	   setLayoutt
   textEditedt   connectt
   check_textt   clickedt   logint   rejectt   update_style_sheett   setFocust   setup(	   t   selfR%   t   parentR   t   username_validatort   grid_layoutt   main_layoutt   register_layoutt   layout_buttons(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyR!   2   sŽ    											
	


c         C` s   |  j  ƒ  d S(   s   Setup login dialog.N(   t   update_links(   RS   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyRR      s    c         ` sN  xB ˆ j  ˆ j ˆ j g D]( } y | j ƒ  Wq t k
 r@ q Xq Wˆ j j d d ˆ j j ƒ  ƒ } | rJ| j	 ƒ  j
 d d ƒ ‰  ˆ  ˆ _ ˆ  j	 ƒ  j d ƒ } | d d k rÈ d j | d  ƒ ‰  n  ˆ  d ˆ j ˆ _ ˆ  d ˆ j ˆ _ ˆ j j j ‡  ‡ f d †  ƒ ˆ j  j j ‡ f d	 †  ƒ ˆ j j j ‡ f d
 †  ƒ n  d S(   s   Update links.t   maint   anaconda_api_urls   //api.s   //t   /iÿÿÿÿR%   c           ` s   ˆ j  ˆ  ƒ S(   N(   t   open_url(    (   t   base_urlRS   (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyt   <lambda>Æ   R   c           ` s   ˆ  j  ˆ  j ƒ S(   N(   R^   R*   (    (   RS   (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyR`   É   R   c           ` s   ˆ  j  ˆ  j ƒ S(   N(   R^   R+   (    (   RS   (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyR`   Ì   R   N(   R7   R8   R2   t
   disconnectt	   TypeErrorR$   t   getR%   t   client_get_api_urlt   lowert   replaceR_   t   splitt   joint   FORGOT_USERNAME_URLR*   t   FORGOT_PASSWORD_URLR+   RM   RK   (   RS   t   buttonR\   t   parts(    (   R_   RS   sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyRZ   ¡   s0    		c         C` s   |  j  j ƒ  j ƒ  S(   s   Return the logged username.(   R.   t   textRe   (   RS   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyt   usernameÏ   s    c         C` s)   | d k r t ƒ  } n  |  j | ƒ d S(   s   Update custom css style sheet.N(   R&   R   t   setStyleSheet(   RS   t   style_sheet(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyRP   Ô   s    c         C` si   |  j  j ƒ  } |  j j ƒ  } t | ƒ d k sB t | ƒ d k rU |  j j t ƒ n |  j j t ƒ d S(   sv   Check that `username` and `password` are valid.

        If not empty and disable/enable buttons accordingly.
        i    N(   R.   Rm   R/   t   lenR9   t   setDisabledR<   RD   (   RS   Rn   t   password(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyRL   Ú   s
    $c         C` s“   |  j  j t ƒ |  j j |  j j ƒ  j ƒ  ƒ t j t	 j
 ƒ |  j j d ƒ |  j j |  j j ƒ  j ƒ  |  j j ƒ  ƒ } | j j |  j ƒ d S(   s;   Try to log the user in the specified anaconda api endpoint.R   N(   R9   t
   setEnabledRD   R.   t   setTextRm   Re   R	   t   setOverrideCursorR   t
   WaitCursorR6   R%   RN   R/   t   sig_finishedRK   t	   _finished(   RS   t   worker(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyRN   ç   s    	$c         C` sš  | } | r/ | |  _  |  j j ƒ  |  j ƒ  nC| rr|  j j ƒ  j ƒ  } d j | ƒ } y t j	 t
 | ƒ ƒ d } Wn t k
 r• t
 | ƒ } n X| j ƒ  j ƒ  } | j d ƒ d } d j | ƒ } | j | | ƒ } |  j j | ƒ |  j j t ƒ | rb|  j j ƒ  }	 d j |	 | | j ƒ  ƒ }
 |  j j d d d |
 ƒ|  j j ƒ  |  j j ƒ  n  |  j j ƒ  n  |  j j t ƒ |  j ƒ  t j  ƒ  d	 S(
   s;   Callback for the login procedure after worker has finished.s
   <b>{0}</b>i    s   , s
   <i>{0}</i>s   {0}/{1}: {2}t   authenticates   login failedt   labelN(!   R'   t   sig_authentication_succeededt   emitt   acceptR.   Rm   Re   R4   t   astt   literal_evalt   strt	   Exceptiont
   capitalizeRg   Rf   R6   Ru   RC   R<   R%   t   client_domainR)   t   track_eventR/   RQ   t	   selectAllt   sig_authentication_failedR9   Rr   RD   RL   R	   t   restoreOverrideCursor(   RS   Rz   t   outputR(   R'   Rn   t   bold_usernamet   error_messaget
   error_textt   domainR|   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyRy   ò   s@    		
c         C` s=   |  j  j d d | ƒ |  j j | ƒ t j t | ƒ ƒ d S(   s9   Open given url in the default browser and log the action.t   contentt   clickN(   R)   R†   t   sig_url_clickedR~   R   t   openUrlR   (   RS   t   url(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyR^     s    N(   t   __name__t
   __module__t   __doc__R   R=   Ri   Rj   R   R}   Rˆ   t   objectR‘   R&   R   R!   RR   RZ   t   propertyRn   RP   RL   RN   Ry   R^   (    (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyR   &   s    		k		.			*c          C` sZ   d d l  m }  |  d d ƒ } t | ƒ t t ƒ  ƒ } | j ƒ  | j ƒ  | j ƒ  d S(   s   Run local test.i    (   t   qapplicationt	   test_timei   N(   t"   anaconda_navigator.utils.qthelpersR™   R   R   R   RP   t   showt   exec_(   R™   t   appt   widget(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyt
   local_test%  s    


t   __main__(+   R–   t
   __future__R    R   R   R€   t   qtpy.QtCoreR   R   R   R   t
   qtpy.QtGuiR   R   t   qtpy.QtWidgetsR	   R
   R   R   R   t#   anaconda_navigator.api.anaconda_apiR   t   anaconda_navigator.configR   R   t   anaconda_navigator.static.fontsR   t"   anaconda_navigator.utils.analyticsR   t   anaconda_navigator.utils.stylesR   t   anaconda_navigator.widgetsR   R   R   R   R   R   t"   anaconda_navigator.widgets.dialogsR   R   R    R”   (    (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/dialogs/login.pyt   <module>   s    "(.ÿ	