o
    b,                     @   s   d 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m	Z	 ddl
mZ ddlmZmZ ddlmZ dd	lmZ G d
d deZdZG dd deZdS )z*
Management utility to create superusers.
    N)get_user_model)get_default_username)validate_password)
exceptions)BaseCommandCommandError)DEFAULT_DB_ALIAS)capfirstc                   @   s   e Zd ZdS )NotRunningInTTYExceptionN)__name__
__module____qualname__ r   r   v/var/www/secure340b-portal/env/lib/python3.10/site-packages/django/contrib/auth/management/commands/createsuperuser.pyr
      s    r
   passwordc                       s`   e Zd ZdZdZdZ fddZdd Z fdd	Zd
d Z	dddZ
dddZdd Z  ZS )CommandzUsed to create a superuser.T)stdinc                    s2   t  j|i | t | _| jj| jj| _d S N)super__init__r   	UserModel_meta	get_fieldUSERNAME_FIELDusername_field)selfargskwargs	__class__r   r   r      s   zCommand.__init__c                 C   s   |j d| jj dd |j ddddd| jj d	 |j d
tdd | jjD ]5}| jj|}|jrO|jj	rA|jj	jj
sAtd| |j d| dd| fd q%|j d| d| d q%d S )Nz--%sz&Specifies the login for the superuser.)helpz	--noinputz
--no-inputstore_falseinteractivezTells Django to NOT prompt the user for input of any kind. You must use --%s with --noinput, along with an option for any other required field. Superusers created with --noinput will not be able to log in until they're given a valid password.)actiondestr    z
--databasez4Specifies the database to use. Default is "default".)defaultr    z\Required field '%s' specifies a many-to-many relation through model, which is not supported.appendz?Specifies the %s for the superuser. Can be used multiple times.)r#   r    z#Specifies the %s for the superuser.)add_argumentr   r   r   REQUIRED_FIELDSr   r   many_to_manyremote_fieldZthroughZauto_createdr   )r   parser
field_namefieldr   r   r   add_arguments"   sH   

zCommand.add_argumentsc                    s"   | dtj| _t j|i |S )Nr   )getsysr   r   execute)r   r   optionsr   r   r   r1   M   s   zCommand.executec              
   O   s  || j j }|d }i }| jj}z	| j jt W n
 tjy#   Y nw d |t< z|d ri }t	| j
dr>| j
 s>tt|d}|rW| |||}	|	rV| j|	 d }n|dkrctdt| |d u r| | j|}
| | j|
|}|r| |||}	|	r| j|	 d }qc|d u sg||| j j< | jjr| jj|n||| j j< | j jD ]^}| j j|}|| ||< || d u r| |}
| ||
}|||< |jr|r| sd ||< | jd qdd	 |d
D ||< |js|||< |jr|j|||< || d u sqt|v r|t d u rt }td}||kr*| jd q| dkr9| jd qzt|| j di | W n0 tjyv } z"| jd|j  t!d}|" dkrlW Y d }~qW Y d }~nd }~ww ||t< t|v r|t d u snut|v rdt#j$v rt#j$d |t< |d u rt#j$%d| j j&  }|d u rtd| j j | |||}	|	rt|	||| j j< | j jD ],}d|&  }|| pt#j$%|}|std| | j j|}|'|d ||< q| j j()|j*di | |d dkr| j+d W d S W d S  t,y2   | jd t-.d Y d S  tjyG } ztd|j d }~w tyW   | j+d Y d S w )Ndatabaser"   isatty)r3    %s cannot be blank.z"Error: This field cannot be blank.c                 S   s   g | ]}|  qS r   )strip).0pkr   r   r   
<listcomp>   s    z"Command.handle.<locals>.<listcomp>,zPassword (again): z#Error: Your passwords didn't match.z&Error: Blank passwords aren't allowed.
z:Bypass password validation and create user anyway? [y/N]: yZDJANGO_SUPERUSER_PASSWORDZDJANGO_SUPERUSER_z!You must use --%s with --noinput.	verbosity   zSuperuser created successfully.z
Operation cancelled.; zSuperuser creation skipped due to not running in a TTY. You can run `manage.py createsuperuser` in your project to create one manually.r   )/r   r   r   verbose_namer   r   PASSWORD_FIELDr   ZFieldDoesNotExisthasattrr   r4   r
   r   _validate_usernamestderrwriter   r	   _get_input_messageget_input_datar*   modelr(   r)   r7   splitZmany_to_onegetpassr   ValidationErrorjoinmessagesinputlowerosenvironr/   upperclean_default_manager
db_managerZcreate_superuserstdoutKeyboardInterruptr0   exit)r   r   r2   usernamer3   	user_dataverbose_field_nameZfake_user_dataZdefault_username	error_msgmessager,   r-   Zinput_valuer   Z	password2errresponseenv_varvalueer   r   r   handleQ   s   

	







zCommand.handleNc              
   C   sp   t |}|r|dkr|}z	||d}W |S  tjy7 } z| jdd|j  d}W Y d}~|S d}~ww )zm
        Override this method if you want to customize data inputs or
        validation exceptions.
        r5   Nz	Error: %sr@   )rO   rT   r   rL   rE   rF   rM   rN   )r   r-   r^   r%   Z	raw_valuevalrc   r   r   r   rH      s   zCommand.get_input_datac                 C   sP   dt |j|rd| nd|jr$d|jjjj|jr| n|jjf f S df S )Nz%s%s%s: z (leave blank to use '%s')r5   z (%s.%s))	r	   rA   r*   rI   r   Zobject_namer)   Zm2m_target_field_namer,   )r   r-   r%   r   r   r   rG      s   
zCommand._get_input_messagec              
   C   s   | j jrz| jj|| W d| S  | jjy   Y nw |s'dt| S z
| j |d W dS  t	j
yJ } zd|jW  Y d}~S d}~ww )z=Validate username. If invalid, return a string error message.z Error: That %s is already taken.r6   Nr@   )r   uniquer   rU   rV   Zget_by_natural_keyZDoesNotExistr	   rT   r   rL   rM   rN   )r   rZ   r\   r3   rc   r   r   r   rD      s   zCommand._validate_usernamer   )r   r   r   r    Zrequires_migrations_checksZstealth_optionsr   r.   r1   rd   rH   rG   rD   __classcell__r   r   r   r   r      s    +
{

r   )__doc__rK   rQ   r0   Zdjango.contrib.authr   Zdjango.contrib.auth.managementr   Z'django.contrib.auth.password_validationr   Zdjango.corer   Zdjango.core.management.baser   r   Z	django.dbr   Zdjango.utils.textr	   	Exceptionr
   rB   r   r   r   r   r   <module>   s    