U
    c3/                     @   s  d dl 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 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 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! 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+ d dl,m-Z- d dl.m/Z/ d dl.m0Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z; d dl<m=Z= d dl>m?Z? ej@rpG dd dejAZBejCDe3eB ejEdd d!d" ZFG d#d$ d$e!ZGG d%d& d&ejHZIG d'd( d(ejAZJejCDe4eJ G d)d* d*ejAZKejCDe5eK G d+d, d,ejAZLejCDe6eL G d-d. d.ejAZMejCDe7eM G d/d0 d0ejAZNejCDe8eN n G d1d( d(ejAZJejCDe4eJ dS )2    N)forms)settings)adminmessages)IS_POPUP_VAR)unquote)update_session_auth_hashpassword_validation)sensitive_post_parameters_m)ReadOnlyPasswordHashField)make_password)intcomma)PermissionDeniedValidationError)DjangoJSONEncoder)Count)TruncDay)	ModelForm)Http404HttpResponseRedirect)TemplateResponse)path)reverse)escape)	mark_safe)gettext)gettext_lazy)VerificationAttemptUserWrongPasswordAttemptUserJWTSMSCall	EmailCall)defined_roles)Access)	Institutec                   @   s"   e Zd ZdZdZdZdZdgZdS )VerificationAttemptAdmin)emailphoneverification_codeip
created_at)r'   r(   r*   )r)   z-created_atr+   N)__name__
__module____qualname__list_displaysearch_fieldsreadonly_fieldsorderinglist_filter r5   r5   ./var/www/wikiazma_server/authenticate/admin.pyr&   "   s   r&   zCreate Sandbox)descriptionc                 C   sX   |D ]N}t jj|dd stjj|jp*d|dd}t jj|||j|jt	j
gd qd S )NT)userZinstitute__sandboxsandbox)namer8   r9   )r8   	instituteinstitute_nameinstitute_created_atroles)r$   objectsfilterexistsr%   create	full_namer:   r+   drZ__ROLE_OWNER__)
modeladminrequestquerysetr8   r;   r5   r5   r6   sandbox_creator0   s     rH   c                       s>   e Zd ZeededdZG dd dZ fddZ  ZS )UserAdminFormPasswordu   Raw passwords are not stored, so there is no way to see this user’s password, but you can change the password using <a href="{}">this form</a>.)label	help_textc                   @   s"   e Zd ZeZdddddddgZdS )	zUserAdminForm.Meta
first_name	last_namer'   r(   usernamerecovery_phonepasswordN)r-   r.   r/   r   modelfieldsr5   r5   r5   r6   MetaC   s       rT   c                    s0   t  j|| | jd}|r,|jd|_d S )NrQ   z../password/)super__init__rS   getrL   format)selfargskwargsrQ   	__class__r5   r6   rV   H   s    zUserAdminForm.__init__)	r-   r.   r/   r   _rQ   rT   rV   __classcell__r5   r5   r\   r6   rI   9   s   	rI   c                       s   e Zd ZdZdediZdZejedej	dddd	d
e
 dZejedej	ddid	d
eddZ fddZdd ZdddZe fddZ  ZS )AdminPasswordChangeFormzV
        A form used to change the password of a user in the admin interface.
        password_mismatchu'   The two password fields didn’t match.requiredrJ   znew-passwordT)autocomplete	autofocus)attrsF)rK   widgetstriprL   zPassword (again)rc   z4Enter the same password as before, for verification.c                    s   || _ t j|| d S )N)r8   rU   rV   )rY   r8   rZ   r[   r\   r5   r6   rV   g   s    z AdminPasswordChangeForm.__init__c                 C   sL   | j d}| j d}|r:|r:||kr:t| jd ddt|| j |S )N	password1	password2ra   )code)cleaned_datarW   r   error_messagesr	   validate_passwordr8   )rY   rh   ri   r5   r5   r6   clean_password2k   s    z'AdminPasswordChangeForm.clean_password2c                 C   s6   | j d }tt| jj| | j_|r0| j  | jS )zSave the new password.rh   )rk   r   strr8   idrQ   save)rY   commitrQ   r5   r5   r6   rq   v   s
    

zAdminPasswordChangeForm.savec                    s*   t  j}| jD ]}||krg   S qdgS )NrQ   )rU   changed_datarS   )rY   datar:   r\   r5   r6   rs   ~   s
    

z$AdminPasswordChangeForm.changed_data)T)r-   r.   r/   __doc__r^   rl   required_css_classr   	CharFieldPasswordInputr	   "password_validators_help_text_htmlrh   ri   rV   rn   rq   propertyrs   r_   r5   r5   r\   r6   r`   O   s0    
r`   c                       sn   e Zd ZeZeZdZdZdZ	dgZ
 fddZeddd	Zd fdd	Zdd Zde_dd Zde_  ZS )	UserAdmin)rM   rN   r'   r(   human_readable_balance	join_date)r'   r(   rM   rN   )z
-join_dater}   c                    s$   t d| j| jddgt   S )Nz<id>/password/auth_user_password_change)r:   )r   
admin_site
admin_viewuser_change_passwordrU   get_urls)rY   r\   r5   r6   r      s    zUserAdmin.get_urls c                 C   sr  |  |t|}| ||s t|d krHttd| jjjt	|d |j
dkr| ||j}| r|  | ||d }| ||| td}t|| t||j ttd| jj|jj|jjf |jfdS n
| |}d dt|jifg}tj !||i }	tdt	t"| |	||t#|jkp2t#|j$kt#d	d
d
d	d
| jj|d
d	d| j%|}
| jj|_&t'|d|
S )Nz8%(name)s object with primary key %(key)r does not exist.)r:   keyPOSTzPassword changed successfully.z%s:%s_%s_change)rZ   rS   zChange password: %sTF)title	adminFormform_urlformis_popupis_popup_varaddchangehas_delete_permissionhas_change_permissionhas_absolute_urloptsoriginalsave_as	show_savez$admin/auth/user/change_password.html)(
get_objectr   r   r   r   r^   rR   _metaverbose_namer   methodchange_password_formr   is_validrq   construct_change_message
log_changer   r   successr   r8   r   r   r   r:   	app_label
model_namepklistbase_fieldsr   helpers	AdminFormro   r   GETeach_contextcurrent_appr   )rY   rF   rp   r   r8   r   change_messagemsg	fieldsetsZ
admin_formcontextr5   r5   r6   r      st    



zUserAdmin.user_change_passwordNc                    sX   t jjtdddjtddd}tjt	|t
d}|pFd|i}t j||d	S )
Nr}   )dater   rp   )yz-date)cls
chart_data)extra_context)r   r?   annotater   valuesr   order_byjsondumpsr   r   rU   changelist_view)rY   rF   r   r   as_jsonr\   r5   r6   r      s    zUserAdmin.changelist_viewc                 C   s   dt |j }|S )Nu    تومان )r   balance)rY   objZraw_balancer5   r5   r6   r|      s    z UserAdmin.human_readable_balanceZBalancec                 C   s   t jj|d S )N)r8   )r$   r?   r@   countrY   r   r5   r5   r6   
institutes   s    zUserAdmin.institutesZ
Institutes)r   )N)r-   r.   r/   rI   r   r`   r   r0   r1   r3   r4   r   r
   r   r   r|   short_descriptionr   r_   r5   r5   r\   r6   r{      s   	Ar{   c                   @   s   e Zd ZdZdZdZdgZdS )WrongPasswordAttemptAdmin)r'   r(   r*   r+   )r*   r'   r(   r+   r,   r+   N)r-   r.   r/   r0   r1   r3   r4   r5   r5   r5   r6   r      s
   r   c                   @   s,   e Zd Zdd ZdZdZdZdZddgZd	S )
UserJWTAdminc                 C   s   |j dd  S )Nitokenr   r5   r5   r6   token_preview  s    zUserJWTAdmin.token_previewr   )r   r8   r+   	expire_at)r8   r   )r   r+   r   N)	r-   r.   r/   r   excluder0   r1   r2   r4   r5   r5   r5   r6   r     s   r   c                   @   s   e Zd ZdZdZdZdgZdS )SMSCallAdmin)r(   r   r+   r,   )r(   r+   Nr-   r.   r/   r0   r3   r1   r4   r5   r5   r5   r6   r     s
   r   c                   @   s   e Zd ZdZdZdZdgZdS )EmailCallAdmin)r'   r   r+   r,   )r'   r+   Nr   r5   r5   r5   r6   r   #  s
   r   c                   @   s6   e Zd Zdd Zdd ZdddiffZdZd	ZdZd
S )r{   c                 C   s*   |j sd|_ |jsd|_|j  d|j S )N- )rM   rN   r   r5   r5   r6   rC   0  s
    zUserAdmin.full_namec                 C   s(   |j r$td|j j d|j j dS dS )Nz	<a href="z"><img src="z"/></a>r   )image_thumbnailr   urlr   r5   r5   r6   image_thumbnail_preview7  s    z!UserAdmin.image_thumbnail_previewzUser DetailsrS   )rM   rN   r'   r(   r   r}   )r'   r(   rC   r}   )r'   r(   N)	r-   r.   r/   rC   r   r   r0   r1   r2   r5   r5   r5   r6   r{   /  s    )Or   djangor   django.confr   Zdjango.contribr   r   django.contrib.admin.optionsr   django.contrib.admin.utilsr   django.contrib.authr   r	   Zdjango.contrib.auth.adminr
   django.contrib.auth.formsr   django.contrib.auth.hashersr   Z-django.contrib.humanize.templatetags.humanizer   django.core.exceptionsr   r   django.core.serializers.jsonr   django.db.modelsr   django.db.models.functionsr   Zdjango.formsr   django.httpr   r   django.template.responser   django.urlsr   r   django.utils.htmlr   django.utils.safestringr   django.utils.translationr   r   r^   authenticate.modelsr   r   r   r    r!   r"   collaboratorsr#   rD   Zcollaborators.modelsr$   institute.modelsr%   DJANGO_ADMIN_IS_ENABLED
ModelAdminr&   siteregisteractionrH   rI   Formr`   r{   r   r   r   r   r5   r5   r5   r6   <module>   s\    

8o
		