
    xh                        S SK r S SKJr  S SKJr  S SKJr  S SKJrJ	r	J
r
  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  SSKJrJrJr   " S S\
5      r " S S\5      r\	" 5       r\RA                  S\SS9S 5       r!\RA                  S5      SS\"4S jj5       r#\RI                  S5      SS\"4S jj5       r%\RM                  S5      S\S\4S j5       r'g)    N)cache)Http404)get_random_string)FieldRouterSchema)	HttpError)APIToken)APITokenSchema)Project)ProjectWithKeysSchema)AuthHttpRequest)CamelSchema   )SETUP_WIZARD_CACHE_EMPTYSETUP_WIZARD_CACHE_KEYSETUP_WIZARD_CACHE_TIMEOUTc                   2    \ rS rSr% Sr\" SSS9r\\S'   Sr	g)SetupWizardSchema   zd
A 64 char random string used to provide a shorted lived and secure
way to transfer sensative data.
@   )
min_length
max_lengthhash N)
__name__
__module____qualname____firstlineno____doc__r   r   str__annotations____static_attributes__r       /code/apps/wizard/api.pyr   r      s    
 3D#3r$   r   c                   4    \ rS rSr% Sr\\S'   \\   \S'   Sr	g)SetupWizardResultSchema    z
Payload containing projects data and api key that sentry-wizard could use
to configure a local project for usage with GlitchTip
api_keysprojectsr   N)
r   r   r   r   r    r   r"   listr   r#   r   r$   r%   r'   r'       s    
 ())r$   r'   zwizard/)responseauthc                     [        S[        R                  [        R                  -   S9n[        U-   n[
        R                  " U[        [        5        SU0$ )zJ
First step used by sentry-wizard
Generates a random hash for later usage
r   )allowed_charsr   )	r   stringascii_lowercasedigitsr   r   setr   r   )requestwizard_hashkeys      r%   setup_wizardr7   -   sK     $
&006==@K !;
.C	IIc+-GHK  r$   zwizard/{wizard_hash}/r5   c                    #    [         U-   n[        R                  " U5      nUc  [        eU[        :X  a  [        SS5      eU$ 7f)z
Last step used by sentry-wizard
For a specified hash, fetch data for projects with organizations and dsn keys
Hash replaces user authentication
  zHash is empty, set it first)r   r   getr   r   r	   )r4   r5   r-   r6   wizard_datas        r%   setup_wizard_hashr<   ;   sF      !;
.C))C.K	0	0:;;s   AAc                 >    [         R                  " [        U-   5        g)zg
Delete hash used by sentry-wizard.
It contains sensitive data, so it makes sense to remove when done.
N)r   deleter   )r4   r5   r-   s      r%   setup_wizard_deleter?   M   s     
LL'+56r$   zwizard-set-token/r4   payloadc                   #    UR                   n[        U-   n[        R                  " U5      nUc  [	        SS5      eU R
                  R                  n[        R                  " [        R                  R                  US9U5      R                  S5      R                  S5      SS  Vs/ s Sh  vN nUPM   N
 Os  snf nn[        [        R                  S5      n[        R                  R                  XXS	9R!                  5       I Sh  vN  n	U	(       d&  [        R                  R#                  XXS
9I Sh  vN  n	[%        XS9n
[        R&                  " X:R)                  SS9[*        5        g7f)zO
Authenticated api for storing projects data to later be used by sentry-wizard
Nr9   zToken not found)organization__usersorganizationprojectkey_set2   zproject:releases)userscopes)user_idrG   )r)   r*   T)by_alias)r   r   r   r:   r	   r-   rH   r   annotate_is_memberobjectsfilterselect_relatedprefetch_relatedgetattrr
   rG   afirstacreater'   r3   dictr   )r4   r@   r5   r6   r;   rH   projectr*   scopetokenresults              r%   setup_wizard_set_tokenrW   V   s7    
 ,,K
 ;
.C))C.K.//ll""G %77OO""w"?
 
	'		*	+CR	1  	 H  HOO%78E""))w)ELLNNNE&&..w.MMM$eGF	IIc;;;-/IJsO   B&E/(B;*B9.B7
/B92B;7B99B;:AE/
D,E/7D:87E/)N)(r0   django.core.cacher   django.httpr   django.utils.cryptor   ninjar   r   r   ninja.errorsr	   apps.api_tokens.modelsr
   apps.api_tokens.schemar   apps.projects.modelsr   apps.projects.schemar   glitchtip.api.authenticationr   glitchtip.schemar   	constantsr   r   r   r   r'   routerr:   r7   r!   r<   r>   r?   postrW   r   r$   r%   <module>rf      s     #  1 ' ' " + 1 ( 6 8 ( 4 4*k * 
 I 1=
! >
! #$#  %" &'7c 7 (7  !K/ KDU K "Kr$   