B
    Ccߣ                 @   sT  d dl mZ d dlmZ d dlmZ d dlZeedrRejd  dkrRd dl	m
Z nd dlmZ d d	lmZ d d
lmZ d dlmZ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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* d dl+m,Z, d dl-m.Z. d dl/Z/dd Z0G dd deZ1e1 Z2dS )    )settings)update_wrapper)includeNDJANGO_VERSION   )re_path)url)	AdminSite)REDIRECT_FIELD_NAME)HttpResponseRedirectHttpResponseJsonResponse)TemplateResponse)reverse)gettext_lazygettext)csrf_exempt)DatabaseErrorIntegrityError)CacheKeyWarningcache)HttpResponseNotFound)cprint)time_it)load_from_jsoneffective_user_required)EASYTIMEPRO)Companyc                sh   ddl m t|ttfr$|d }n|g} jjt } fdd}td tt	|||S )Nr   )	force_str   c                s    fdd}|S )Nc                s   ddl m} | j}| j}||\}}| jks8|kr<d S  |}|d k	rdt|trd|srd S n|srd S 	| |S )Nr   )get_permission_name)
mysite.admin.utilsr    __name__Zverbose_nameZactions_disabledZnative_permission_check
isinstanceboolZhas_permadd)klassr    Zaction_nameZaction_human_nameZ	perm_nameZverbZcheck_result)adminr   inforequest
unique_setuser +G:\easytimepro\master/mysite/admin\sites.pyget_action_attr2   s    

zQaction_permission_check.<locals>.get_action_attr_wrapper.<locals>.get_action_attrr,   )r*   r.   )r'   r   r(   r)   r+   )r*   r-   get_action_attr_wrapper1   s    z8action_permission_check.<locals>.get_action_attr_wrapper)
Zdjango.utils.encodingr   r#   tuplelistr(   r+   setfiltermap)r'   Z
action_setr)   Zactionsseenr/   r,   )r'   r   r(   r)   r+   r-   action_permission_check%   s    
r6   c                   s~  e Zd ZdZdZdZdZdZ fddZdd	 Z	dOddZ
dd Zedd ZdPddZdd ZdQddZdd ZdRddZddddZdd  Zd!d" Zd#d$ Zed%d& Zed'd( Zd)d* Zed+d, Zed-d. ZdSd/d0ZdTd1d2Zd3d4 Z dUd5d6Z!dVd7d8Z"dWd9d:Z#edXd;d<Z$d=d> Z%d?d@ Z&dAdB Z'edCdD Z(edEdF Z)edGdH Z*dIdJ Z+dKdL Z,dYdMdNZ-  Z.S )ZZKAdminSitezcloud/login_enter_email.htmlz"layui/registration/logged_out.htmlzdashboard.htmlz$admin/auth/user/change_password.htmlz,layui/registration/password_change_done.htmlc                s   t t| jdd d S )NZbiotime)name)superr7   __init__)self)	__class__r,   r-   r:   S   s    zZKAdminSite.__init__c             C   s   | j |d S )N)	_registryget)r;   modelr,   r,   r-   get_model_adminV   s    zZKAdminSite.get_model_adminNc             C   s   t d| j|f |dS )Nz%s:%s)kwargs)r   r8   )r;   Z	view_nameZparamsr,   r,   r-   get_urlY   s    zZKAdminSite.get_urlc                s  ddl m} d@ fdd	}td| jddtd	 jd
dtd jddtd jddtd jddtd jddtd j	ddtd| j
ddtd jddtd jddtd jddtd jddtd jd dtd!| jd"d#d$dtd%| jd"d#d&dtd'| jd"d#d(dtd)| jd"d#d*dtd+| jd"d#d,dtd-||jd.dtd/ jd0dtd1 jd2dtd3| jd"d#d4dg}d5g}xZ j D ]L\}}|td6|jj|jjf t|jg7 }|jj|kr| |jj qW |r"d7d8!| d9 }|t|| j"d:dg7 }xt#j$D ]}|r*|%d;sDq*|&d<d= }	y |td>|	 td?| g7 }W n4 t'k
r }
 zdd l(}|)  W d d }
~
X Y nX q*W |S )ANr   )viewsFc                s$   t  fdd}|_t|S )Nc                 s     | |S )N)Z
admin_view)argsrA   )	cacheabler;   viewr,   r-   wrapperd   s    z3ZKAdminSite.get_urls.<locals>.wrap.<locals>.wrapper)r   Z
admin_siter   )rF   rE   rG   )r;   )rE   rF   r-   wrapc   s    z"ZKAdminSite.get_urls.<locals>.wrapz^$index)r8   z^login/$loginz^cached_actions/$Zcached_actionsz^appearance_themes/$appearance_themesz^pinned_tabs/$Zpinned_tabsz^column_order/$column_orderz^disabled_fields/$disabled_fieldsz	^logout/$logoutz
^license/$licensez^authenticate/$authenticatez^offlineActivation/$offline_activationz^onlineActivation/$Zonline_activationz^expiredDays/$expired_daysz^languageChange/$T)rE   Zlanguage_changez^password_change/$password_changez^password_change/done/$password_change_donez^emergency_button/$emergency_buttonz	^jsi18n/$Zjsi18nz/^r/(?P<content_type_id>\d+)/(?P<object_id>.+)/$Zview_on_sitez	^health/$healthz^subscription_content/$subscription_contentz^company_change/$company_changeZstaffz^%s/%s/z^(?P<app_label>|z)/$Zapp_listzmysite..z^%s/z%s.urls)F)*Zdjango.contrib.contenttypesrC   r   rI   rJ   %get_actions_related_properties_cachesrK   pin_tabprefer_column_orderrM   rN   rO   user_authenticaterQ   online_activation_zklicenserR   change_languagerS   rT   rU   Zi18n_javascriptZshortcutrV   rW   rX   r=   items_meta	app_label
model_namer   ZurlsappendjoinZ	app_indexr   ZINSTALLED_APPS
startswithsplit	Exception	traceback	print_exc)r;   Zcontenttype_viewsrH   ZurlpatternsZvalid_app_labelsr?   Zmodel_adminZregexapprd   erk   r,   )r;   r-   get_urls]   s^    
$ zZKAdminSite.get_urlsc             C   s2   |j d }| jdkr|r|n| j}| j| j|dS )z
        Returns a dictionary of variables to put in the template context for
        *every* page in the admin site.

        For sites running on a subpath, use the SCRIPT_NAME value if site_url
        hasn't been customized.
        ZSCRIPT_NAME/)
site_titlesite_headersite_url)METArs   rq   rr   )r;   r)   Zscript_namers   r,   r,   r-   each_context   s
    	
zZKAdminSite.each_contextc             C   sp   ddl m} ddlm} td| jd}||t| |f|p<i d}| jdk	rX| j|d< | j|_	|j
f ||S )	zY
        Handles the "change password" task -- both form display and validation.
        r   )AdminPasswordChangeForm)PasswordChangeViewzadmin:password_change_done)current_app)Z
form_classZsuccess_urlextra_contextNtemplate_name)Z&mysite.base.admin.forms.auth_user_formrv   Zmysite.accounts.viewsrw   r   r8   dictru   password_change_templaterx   as_view)r;   r)   ry   rv   rw   r   defaultsr,   r,   r-   rS      s    

zZKAdminSite.password_changec             C   s   ddl m} |j}tj}|j dkrT|d|}dd tjD }t	|d||dS |j d	kr|j
d|}|d|i |  tdd
td d}| || |S d S )Nr   )translationGETlanguagec             S   s    g | ]}|d  d|d  fqS )r   z%sr   r,   ).0Zlngr,   r,   r-   
<listcomp>   s    z/ZKAdminSite.change_language.<locals>.<listcomp>zlayui/set_language.html)r   language_listPOSTz%sZ%userProfile_languageChange_successful)codemsg)django.utilsr   r+   r   LANGUAGE_CODEmethodupperget_preferences	LANGUAGESr   r   r>   Zset_preferencessaver   __save_language_in_session)r;   r)   r   ZprofileZdefault_language_code	lang_coder   responser,   r,   r-   ra      s&    

zZKAdminSite.change_languagec             C   sR   ddl m} dt| |f|p i i}| jdk	r:| j|d< | j|_|jf ||S )zF
        Displays the "success" page after a password change.
        r   )PasswordChangeDoneViewry   Nrz   )django.contrib.auth.viewsr   r{   ru   password_change_done_templater8   rx   r}   )r;   r)   ry   r   r~   r,   r,   r-   rT      s    

z ZKAdminSite.password_change_donec             C   s2   |j dkr.dtj  di}t|d|S d S )Nr   datez%Y-%m-%dzadmin/emergency_button.html)r   datetimenowr   strftimer   )r;   r)   contextr,   r,   r-   rU      s    
zZKAdminSite.emergency_buttonc             C   s   ddl m} ||S )Nr   )logoff)mysite.authurlsr   )r;   r)   ry   r   r,   r,   r-   rN      s    zZKAdminSite.logoutZOKZDEGRADEDZERROR)okdegradederrorc             C   s   |j dkrtj }|  }|  }| jd }|| jd krV|| jd krV| jd }n2|| jd ksr|| jd kr~| jd }n
| jd }tj |  }t||||dS t S d S )Nr   r   r   r   )overall_status	db_statusredis_statusduration)	r   r   r   _check_database__check_redis_health_statusZtotal_secondsr   r   )r;   r)   Z
start_timer   r   r   r   r,   r,   r-   rV     s    




zZKAdminSite.healthc          
   C   s
  ddl m}m} |jdkr&t|di S |jdd }|jdd }|r|ryb|||d}|sxtt	dd	t
d
 dS |jstt	dd	t
d dS tt	dddS  tk
r } ztt	dd	t
d
 dS d }~X Y nX ntt	dd	t
d
 dS d S )Nr   )rP   rJ   r   zlayui/license/authenticate.htmlusernamepassword)r   r   r[   z%sZuserAuth_error_invalidLogin)retmessageZ userAuth_error_superuserRequired )django.contrib.authrP   rJ   r   r   r   r>   r   jsondumpsr   is_superuserrj   )r;   r)   rP   Z
auth_loginr   r   r+   rn   r,   r,   r-   r_     s"    
,zZKAdminSite.user_authenticatec          	   C   sX  dd l }ddlm} ddlm} ddlm} ddlm} ddlm	} i }t
|drZ|jjrhtd|dS |jd	krJx|| jD ]\}	}
g }|	jj|	jj }}|j||d
}||d }|d kr|j|	}||
||dddd}|d krtdddS x |D ]}|t|
||  qW |||}||kr:t ||< ||| |< qW td|dS )Nr   )r   )ACTION_CACHE_KEY)APP_TO_MODULE_MAPPING)ContentType)handle_action_permissionr+   )r   datar   )rm   r?   TF)Z
only_classZneed_returnZinsert_permsr[   z/Please ensure `Cache Backend` is working first.)r   r   )sixdjango.core.cacher   mysite.admin.constr   r   Z"django.contrib.contenttypes.modelsr   Zmysite.base.managementr   hasattrr+   is_anonymousr   r   Z	iteritemsr=   rc   rd   re   formatr>   objectsZget_for_modelextendr6   r{   )r;   r)   r   r   r   r   r   r   Z_action_name_dictr?   r'   Z_actionsrd   re   Zaction_cache_keyZ_cached_actionsZcontent_typeZactZmodule_namer,   r,   r-   r\   .  sF    




z1ZKAdminSite.get_actions_related_properties_cachesc          
   C   sx  ddl m} |jjr&tdtddS |jdkrt|jd}|jdd	}|jj	}t
|t}|d	kr|jd
d }t
|t||< dtd }nL|dkry
||= W n tk
r   Y nX dtd }ntddtd dS y<t||j_	|j  d}	||	j|jjd|jd W nL tk
rd }
 z,tdt|
|
d tddtd dS d }
~
X Y nX td|dS d S )Nr   )r   r[   Zaction_not_available)r   r   r   r?   opoverrideZfieldz%sZhiddenField_save_successfulresetZhiddenField_reset_successfulZ"hiddenField_actionFailed_forbiddenzuser_id_{obj})objiQ z{}: {}redZ'hiddenField_actionFailed_parameterError)r   r   r+   is_employeer   r   r   r   r>   rM   r   r{   r1   KeyErrorr   r   r   r2   r   idr   r   type)r;   r)   r   Za_modelr   savedZdecode_savedZfieldsdone_msgZ	cache_keyrn   r,   r,   r-   rM   Z  s8    


 $zZKAdminSite.disabled_fieldsc          
   C   s*  |j dkr&dtd }|jjr*|jj}n|j}|j}|jdd }|jdd }|dkrt|d dkrttd	d
dS |d krtd	d
dS t	|t
}t	|t}||g }	||	d d < yt||_|  W nH tk
r }
 z(tdt|
|
d td	tddS d }
~
X Y nX td|dS d S )Nr   z%sZcolumnOrder_save_successfulr?   orderZoutdoorscheduleplannerr   Zschedule_namer[   ZcolumnOrder_save_failed)r   r   z{}: {}r   Z'columnOrder_actionFailed_parameterError)r   r   r+   r   ZemployeeprofilerL   r   r>   r   r   r1   r{   
setdefaultr   r   r   r   r   r   r   r   )r;   r)   r   Zorder_modelr   r?   r   Zorder_arraya_dicta_listrn   r,   r,   r-   r^   ~  s0    


 zZKAdminSite.prefer_column_orderc             C   s   ddl m} ddlm} |j}|s8tddtd dS |jj}|j	 dkrg }|j
j|d	}x&|D ]}|t|jj|jjf qfW t|d
||dS |j	 dkr|jd|}	|j
j|jd}|	|_|  tddtd d}
|
S d S )Nr   )
Membership)MyUserr[   z%szPlease login first)r   r   r   )r+   zlayui/change_company.html)current_company_id
company_lsr   company)r   Z$userProfile_companyChange_successful)mysite.base.modelsr   mysite.accounts.modelsr   r+   r   r   current_companyr   r   r   r3   rf   strr   r   r8   r   r   r>   r   )r;   r)   r   r   r+   r   r   ZmembershipsZmem
company_idr   r,   r,   r-   rX     s.    

zZKAdminSite.company_changec          
   C   s  ddl m} ddlm} |jjr6tddtd dS |jdkr|j	
d	d
}|j	
dd }|d krttdddS |j	
d}|jj|jjdjdddd }t|t}||g }	|d
kr||	krt|	|krtddtd j|ddS |	| ntddtd dS td}
nN|dkrhy|	| W n" tk
rX   dtd }
Y nX dtd }
nd}
yt||j_|j  W nH tk
r } z(tdt||d tdtddS d }~X Y nX td|
dS n d S )Nr   )MAX_MODULE_PIN_TABS)r   r[   z%sz-Pinning tabs is not allowed in employee login)r   r   r   r   rf   moduleZpinTab_save_failedpin_url)r   pin_tabsT)Zflatz#pinTab_saveError_exceedMaximum{num})ZnumZpinTab_saveError_duplicateZpin_successfullyremoveZpinTab_remove_successfulr   z{}: {}r   ZpinTab_action_parameterError)Zmysite.accounts.constr   r   r   r+   r   r   r   r   r   r>   r   r3   r   Zvalues_listr   r{   r   lenr   rf   r   
ValueErrorr   r   r   r   r   r   r   )r;   r)   r   r   r   r   r   r   r   r   r   rn   r,   r,   r-   r]     sJ     



 zZKAdminSite.pin_tabc             C   sz   dd l }| j dkrd|jtjd}dd ||D }|jdd d t	dtj
d |d	d
S t	dtdd
S d S )Nr   r>   zimg/banner/c             S   s   g | ]}|qS r,   r,   )r   fr,   r,   r-   r     s    z1ZKAdminSite.appearance_themes.<locals>.<listcomp>c             S   s   t | S )N)r   )Zeler,   r,   r-   <lambda>      z/ZKAdminSite.appearance_themes.<locals>.<lambda>)key)	base_pathZtheme_names)r   r   r[   Ztheme_saveFailed_forbidden)osr   lowerpathrg   r   Z
MEDIA_ROOTlistdirsortr   Z	MEDIA_URLr   )r)   r   r   Z
all_themesr,   r,   r-   rK     s    zZKAdminSite.appearance_themesc             C   s   ddl m} |||S )Nr   )license_activation)mysite.base.registerr   )r;   r)   ry   r   r,   r,   r-   rO     s    zZKAdminSite.licensec             C   s   ddl m} |||S )Nr   )r`   )r   r`   )r;   r)   ry   r`   r,   r,   r-   r`     s    z'ZKAdminSite.online_activation_zklicensec             C   s(   ddl m} |  ttdddS )Nr   )easy_upgrader   r   )r   r   )Z
zkeco_dllsr   upgrade_softwarer   r   r   )r;   r)   r   r,   r,   r-   r     s    zZKAdminSite.upgrade_softwarec             C   s   ddl m} |||S )Nr   )offline_activation_zklicense)r   r   )r;   r)   ry   r   r,   r,   r-   rQ     s    zZKAdminSite.offline_activationc       	   
   C   s   ddl m} ddlm} y| }t|d}W n& tk
rR } zd}W d d }~X Y nX d}tjdkr|dkrxdtd }n|dk rdtd	 d
|i }|t	
||dS )Nr   )r   )get_expired_daysi'  r      z%sZlogin_authorize_license_expiredz*license_will_be_expired_after_%(day)s_daysZday)daysr   )Zdjango.http.responser   r   r   maxrj   r   ZUNLIMITED_DAYr   r   r   )	r;   r)   ry   r   r   Z_daysr   rn   r   r,   r,   r-   rR     s    
zZKAdminSite.expired_daysc       .      C   s  ddl m} |jdkr6| |r6td| jd}t|S |jdkr||}ttdddkr|j	}|r|j
s|jrdd	lm} |d
|jd}|rt|}	|	dd}
|
rddlm} |	dpdtd }ttd|d}|| |S ddlm} ||}ddlm} ddlm} tjs$d| _|t_ tjrddl!}ddl"m#} ddl$m%} ddl&m'} |j(d }tj)}d*|}|+||}|r|d|,  -d}t.|dkr<|d }t/j0j1|d 2 }|s|d!}d"|_3|S t/j0j|d }|d }t/j0j1|d 2 }|r(t/j0j|d } |j0j1d| |d#2 }!|!sJ|d!}d"|_3|S tj4d$kr:d%*|tj)}"t5d&|" d}#|#s:| }$|$6 }%x.|%D ]&}&|&d' }"|&d( }'t57d&|" |' qW t5d&|" d}(|(s:|$j8|"d)}'|$j9|'d*})|$j:|)d' |)d+ d, |)d+ d- d. |$j;|'d* t57d&|" |' n|d!}d"|_3|S nTt.|dkr~|d }t/j0j1|d 2 }|s|d!}d"|_3|S n|d!}d"|_3|S t<| =|tj>tj td/|? |j	@ | Ad0| B d1 dd2	}*tC|jDkrtC|jEkrtd3| jd|*tC< |*F|pi  tjG|*d4< ttdddkrzdd5lHmI}+ |+d
}	|	rz|	dd}
|
rz|	dphdtd }d|*d< ||*d< |*| jJp|| jpd6d7},| j|_Kdd8lLmM}- |-tj  |jNf |,|S )9zD
        Displays the login form for the given HttpRequest.
        r   )logonr   zbiotime:index)rx   r   ZSUPPORT_MUL_COMPANYr   )get_setting_valueZalert_setting)r   employee_login_statusF)rN   Zlogin_message_displayz%sZ employee_restriction_is_disabled   )r   r   )r   )	LoginView)AdminAuthenticationFormz!layui/registration/login_new.htmlN)AWSBoto3API)r   )render_to_responseZ	HTTP_HOSTz.{}rZ   r   )r8   z404.htmli  )roler   Zvendor_companytruez*.{}.{}Zvalid_certificate_domain_name_Z
DomainNameZCertificateArn)domain_name)certificate_arnZResourceRecordNameZValue)r   Zresource_record_nameZresource_record_valuezLog inrJ   software_title)r   r   titleZapp_pathr   Z	login_urlr   r   zadmin:indexZstaff_enable)get_system_settingzadmin/login.html)ry   Zauthentication_formrz   )activate)Or   r   r   Zhas_permissionr   r8   r   getattrr   r+   r   r   Zmysite.base.models.sys_settingr   r   r   loadsr>   r   rN   r   r   r   r   r   Zget_language_from_requestr   r   Zdjango.contrib.admin.formsr   CLOUD_VERSIONlogin_templater   reZmysite.cloud.utilsr   r   r   Zdjango.shortcutsr   rt   ZDOMAIN_HOSTr   searchstartri   r   r   r   r3   existsZstatus_codeZDEPLOY_TO_AWSr   Zacm_list_certificatesr2   Zacm_request_certificateZacm_describe_certificateZ#route53_change_resource_record_setsZelbv2_add_listener_certificatesr{   ru   r   Zget_full_pathZget_usernamerB   _get_software_infor
   r   r   updateZENABLE_STAFFZmysite.utilsr   Z
login_formrx   django.utils.translationr   r}   ).r;   r)   ry   r   Z
index_pathr   ur   vvalueZemployee_login_disable_statusrN   r   r   r   r   r   r  r   r   r   Zcurrent_domainZmain_domain_nameZdomain_regexZcurrent_company_regexZcurrent_domain_splitZvendor_nameZvendor_existr   ZvendorZcompany_nameZcompany_existr   Zmembership_existr   Zvalid_certificate_domain_nameZawsZcertificate_summary_listZcertificater   Z*double_check_valid_certificate_domain_nameZdomain_validation_optionsr   r   r~   r   r,   r,   r-   rJ   $  s    












zZKAdminSite.loginc       	      C   sl  ddl m} |jjsx| |dkrHt|| jd|jji}| || |S | 	|rxt|| jd|jji}| || |S ||j| 
 | j }||pi  d}|jjs|jjr|jd}|d krd}| 
 d tkrd}|d|i | j|_ttjdkr4|jjs4|jd	tj}dd
lm} || t|| |j|}| || tjrh| || |S )Nr   )DashboardServicer   emailr   Zguide_box_valsoftware_typeZis_show_guider   )r   )'mysite.admin.services.dashboard_servicer  r+   r   _check_vendorr   index_templater  (_save_cloud_session_token_to_base_domain_check_super_adminr	  rB   page_settingsr
  r   r   r   r8   rx   r   r   r   r   r   r   r   _get_index_templater   r  )	r;   r)   ry   r  r   r  r  r   r   r,   r,   r-   rI     s@    


zZKAdminSite.indexc             C   sN   |   d tkrd| _n0|js4tjs,d| _qHd| _ntjsBd| _nd| _| jS )Nr  zwdms_index.htmlzdashboard.htmlzcloud_dashboard.htmlzstaff_index.htmlzcloud_staff_index.html)r	  r   r  r   r   r  )r;   r+   r,   r,   r-   r    s    zZKAdminSite._get_index_templatec             C   sb   ddl m} |j}|jj|j|d}|j}d|j }t|d}|dkrPd| _	n|r^d| _	d}|S )Nr   )r   )r   r+   zvendor_role_%sr   zcloud/dashboard/index.html)
r   r   r+   r   r>   r   r   Zpkr   r  )r;   r)   r   r+   Z
membershipr   Z
vendor_keyZvendor_roler,   r,   r-   r    s    
zZKAdminSite._check_vendorc             C   s2   d}t tdr.tjr.|j}|jdkr.d| _d}|S )NFr  r'   zcloud/dashboard/index.htmlT)r   r   r  r+   r   r  )r;   r)   Zis_super_adminr+   r,   r,   r-   r    s    

zZKAdminSite._check_super_adminc              C   s   ddl m}  |  S )Nr   )get_software_type)r!   r  )r  r,   r,   r-   r	  "  s    zZKAdminSite._get_software_infoc             C   sj   ddl m} | jjsf| jdtj}|rf||rft| drJ|| j	|j
< n|jtj|tjtjtjd d S )Nr   )r   r   session)max_ager   domain)r   r   r+   r   r   r   r   Zcheck_for_languager   r  ZLANGUAGE_SESSION_KEY
set_cookieZLANGUAGE_COOKIE_NAMEZLANGUAGE_COOKIE_AGEZLANGUAGE_COOKIE_PATHZLANGUAGE_COOKIE_DOMAIN)r)   r   r   r   r,   r,   r-   r   '  s    
z%ZKAdminSite._save_language_in_sessionc       	   
   C   s   dd l }ddlm} y| jj}| j }W n tk
r>   Y nX |sJtjrX|sXd }d }n| j	 }|  | }||}|j
tj| jj||tjtjddd |S )Nr   )cookie_dateF)r  expiresr  r   ZsecureZhttponly)timeZdjango.utils.httpr  r  modifiedZis_emptyAttributeErrorr   ZSESSION_SAVE_EVERY_REQUESTZget_expiry_ager  ZSESSION_COOKIE_NAME_CLOUDZsession_keyZSESSION_COOKIE_DOMAIN_CLOUDZSESSION_COOKIE_PATH)	r)   r   r   r  r!  emptyr  r  Zexpires_timer,   r,   r-   r  9  s.    
z4ZKAdminSite._save_cloud_session_token_to_base_domainc             C   sJ   yt jj | jd S  tk
r,   | jd S  tk
rD   | jd S X d S )Nr   r   r   )r   r   countr   r   r   )r;   r,   r,   r-   r   X  s    

zZKAdminSite._check_database_c             C   s   y4t ddd t ddks(| jd S | jd S W nJ tk
rN   | jd S  tk
rf   | jd S  tk
r~   | jd S X d S )NZ
cache_testr   r   r   )r   r2   r>   r   r   r   ConnectionError)r;   r,   r,   r-   r   a  s    


zZKAdminSite._check_redis_c             C   sF   ddl m} ||j|  | j }||p.i  | j|_t	|d|S )Nr   )r  z,cloud/subscription/subscription_content.html)
r  r  r+   r	  rB   r  r
  r8   rx   r   )r;   r)   ry   r  r  r,   r,   r-   rW   o  s
    z ZKAdminSite.subscription_content)N)N)N)N)N)N)N)N)N)N)N)/r"   
__module____qualname__r  Zlogout_templater  r|   r   r:   r@   rB   ro   r   ru   rS   ra   rT   rU   rN   r   rV   r_   r\   r   rM   r^   rX   r]   staticmethodrK   rO   r`   r   rQ   rR   rJ   rI   r  r  r  r	  r   r  r   r   rW   __classcell__r,   r,   )r<   r-   r7   K   sT   
H


,$4




 **	r7   )3Zdjango.confr   	functoolsr   Zdjango.conf.urlsr   r   r   r   Zdjango.urlsr   r   Zdjango.contrib.admin.sitesr	   r   r
   Zdjango.httpr   r   r   Zdjango.template.responser   r   r  r   r   r   Zdjango.views.decorators.csrfr   Z	django.dbr   r   r   r   r   r   Zmysite._utilsr   Zmysite.admin.helpersr   r!   r   r   r   r   Zmysite.cloud.modelsr   r   r6   r7   Zzk_siter,   r,   r,   r-   <module>   s>   &      6