o
    h                     @   s   d dl Z d dlmZ d dlmZ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mZ d d	lmZmZ g d
ZddgZdd Zdd Zdd Zdd Zdd Z G dd dZ!G dd deZ"G dd deZ#dS )    N)reverse)HttpResponseHttpResponseServerErrorHttpResponseRedirectHttpResponseForbidden)PermissionDenied)messages)renderredirect)
CommonView)query_00dumplog_activity)koleksimaster)/loginlogout403404usrpwdc                 O   sN   |  D ]\}}	 |jjdkrt|}|| |< qi }|D ]}| | ||< q|S )Ndatetime)items	__class____name__str)SessionStoreargskwargskvsessarg r$   ./var/www/html/mfile_papteng_new/webapp/auth.pysession   s   
r&   c                 C   s,   t | d } t | d } | S )Nzutf-8)hashlibmd5encode	hexdigestsha1)r   r$   r$   r%   auth_pwd_hash   s   r,   c                  K   sT   d }zt jjjdi |   }t j|}|jj|d< W |S  t	y)   Y |S w )Nroler$   )
m_masterUsersobjectsfilterselect_relatedget_sanitize_resultpk_rolesr-   	Exception)r   accountuserr$   r$   r%   auth_account_by   s   r9   c                 O   sX   t | d| dd}|d u rdS tD ]}| | || kr! dS qt| fi | dS )Nr   r   r   r   FT)r9   r3   auth_validate_requiredr&   )r   r   r   r7   rr$   r$   r%   validate+   s   r=   c                 C   s   d}zt jjj| |d dd }W n	 ty   Y nw |r#|jr#dS td| |d g}| }W d   n1 s;w   Y  |rH|d rHdS dS )z
	select access.is
	from access 
	join menus on (menus.pk=access.menus_pk)
	join roles on (roles.pk=access.roles_pk)
	where access.users_pk is null
	and menus.href = '$path'
	and roles.role = '$role'
	Nr-   )menus_pk__hrefroles_pk__roleusers_pkTz
		SELECT access.is,menus.href
		FROM access 
		JOIN menus ON (menus.pk=access.menus_pk)
		JOIN roles ON (roles.pk=access.roles_pk)
		WHERE access.users_pk IS NULL
		and %s like menus.href||'%%'
		and roles.role = %s
		ORDER BY menus.href DESC
		isF)	r.   Accessr0   r1   r3   r6   _isr   
result_one)pathr"   rule_by_roleqrule_by_href_partr$   r$   r%   urlpath_validate7   s(   

rI   c                   @      e Zd Zdd Zdd ZdS )AuthMiddlewarec                 C   s
   || _ d S N)get_response)selfrM   r$   r$   r%   __init___   s   
zAuthMiddleware.__init__c                    s   t  j  jd< }t fddtD } jdr |  S |du r3|dkr3ttdd  j S |rD|dkrDt	 j jdkrDt
|  S )Nsess_is_authc                 3   s    | ]
}t | jkV  qd S rL   )r   rE   ).0irequestr$   r%   	<genexpr>g   s    z*AuthMiddleware.__call__.<locals>.<genexpr>z/api/Fr   z
?redirect=)r=   r&   anymiddleware_views_ignoredrE   
startswithrM   r   r   rI   r   )rN   rT   yn
yn_ignoredr$   rS   r%   __call__e   s   

zAuthMiddleware.__call__N)r   
__module____qualname__rO   r[   r$   r$   r$   r%   rK   ]   s    rK   c                   @   rJ   )AuthLoginViewc                 C   s   t |jr	tdS t|dS )Nr   z
login.html)r=   r&   r
   r	   )rN   rT   r$   r$   r%   r3   w   s   
zAuthLoginView.getc                 C   s   |j dd}|j dd}|dks|dkr t|d tdS t|t|d}|d u r6t|d tdS t|jfi | t	|dd|d	 d
|d   |j
dd r\t|j
d S tdS )Nr    r   z#Isian Username atau Password kosongr   r:   zUser Tidak DitemukanauthpkzLogin sebagai r
   dash)POSTr3   r   warningr
   r9   r,   errorr&   r   GETr   )rN   rT   r   r   r7   r$   r$   r%   post|   s&   	zAuthLoginView.postN)r   r\   r]   r3   rg   r$   r$   r$   r%   r^   v   s    r^   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )AuthLogoutViewc                 O      | j |g|R i |S rL   r   rN   rT   r   r   r$   r$   r%   r3          zAuthLogoutView.getc                 O   ri   rL   rj   rk   r$   r$   r%   rg      rl   zAuthLogoutView.postc                 C   sT   ddl m} |jd}|jdd}|r!||dd|d| d	 |j  td
S )Nr   )r   ra   r   unknownr   r`   zLogout dari sistem ()r   )webapp.commonr   r&   r3   flushr
   )rN   rT   r   user_id	user_namer$   r$   r%   r      s   

zAuthLogoutView.logoutN)r   r\   r]   r3   rg   r   r$   r$   r$   r%   rh      s    rh   )$r'   django.urlsr   django.httpr   r   r   r   django.core.exceptionsr   django.contribr   django.shortcutsr	   r
   webapp.views.baser   ro   r   r   r   webapp.modelsr   	m_koleksir   r.   rW   r;   r&   r,   r9   r=   rI   rK   r^   rh   r$   r$   r$   r%   <module>   s&   &$