a
    ؁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   sL   |  D ]$\}}|jjdkr$t|}|| |< qi }|D ]}| | ||< q6|S )Ndatetime)items	__class____name__str)SessionStoreargskwargskvsessarg r$   AD:\WORK\M-FILE\MFILE_PAPTENG_NEW\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 }z8t jjjf i |   }t j|}|jj|d< W n t	yN   Y n0 |S )Nrole)
m_masterUsersobjectsfilterselect_relatedgetZ_sanitize_resultZpk_rolesr-   	Exception)r   accountuserr$   r$   r%   auth_account_by   s    r7   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)r7   r3   auth_validate_requiredr&   )r   r   r   r5   rr$   r$   r%   validate+   s    r;   c                 C   s   d}z t jjj| |d dd }W n ty6   Y n0 |rF|jrFdS td| |d g}| }W d   n1 sv0    Y  |r|d rd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-   )Zmenus_pk__hrefZroles_pk__roleZ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.   ZAccessr0   r1   r3   r4   Z_isr   Z
result_one)pathr"   Zrule_by_roleqZrule_by_href_partr$   r$   r%   urlpath_validate7   s"    

(r?   c                   @   s   e Zd Zdd Zdd ZdS )AuthMiddlewarec                 C   s
   || _ d S N)get_response)selfrB   r$   r$   r%   __init___   s    zAuthMiddleware.__init__c                    s|   t  j  jd< }t fddtD }|du rP|dkrPttdd  j S |rr|dkrrt j jdkrrt| 	 S )NZsess_is_authc                 3   s   | ]}t | jkV  qd S rA   )r   r=   ).0irequestr$   r%   	<genexpr>g       z*AuthMiddleware.__call__.<locals>.<genexpr>Fr   z
?redirect=)
r;   r&   anymiddleware_views_ignoredr   r   r=   r?   r   rB   )rC   rH   ZynZ
yn_ignoredr$   rG   r%   __call__e   s    zAuthMiddleware.__call__N)r   
__module____qualname__rD   rM   r$   r$   r$   r%   r@   ]   s   r@   c                   @   s   e Zd Zdd Zdd ZdS )AuthLoginViewc                 C   s   t |jrtdS t|dS )Nr   z
login.html)r;   r&   r
   r	   )rC   rH   r$   r$   r%   r3   t   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 rlt|d tdS t|jfi | t	|dd|d	 d
|d   |j
dd rt|j
d S tdS )Nr    r   z#Isian Username atau Password kosongr   r8   zUser Tidak DitemukanauthpkzLogin sebagai r
   dash)POSTr3   r   warningr
   r7   r,   errorr&   r   GETr   )rC   rH   r   r   r5   r$   r$   r%   posty   s&    	zAuthLoginView.postN)r   rN   rO   r3   rY   r$   r$   r$   r%   rP   s   s   rP   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )AuthLogoutViewc                 O   s   | j |g|R i |S rA   r   rC   rH   r   r   r$   r$   r%   r3      rJ   zAuthLogoutView.getc                 O   s   | j |g|R i |S rA   r[   r\   r$   r$   r%   rY      rJ   zAuthLogoutView.postc                 C   sT   ddl m} |jd}|jdd}|rB||dd|d| d	 |j  td
S )Nr   )r   rS   r   unknownr   rR   zLogout dari sistem ()r   )webapp.commonr   r&   r3   flushr
   )rC   rH   r   user_idZ	user_namer$   r$   r%   r      s    

zAuthLogoutView.logoutN)r   rN   rO   r3   rY   r   r$   r$   r$   r%   rZ      s   rZ   )$r'   django.urlsr   django.httpr   r   r   r   django.core.exceptionsr   Zdjango.contribr   Zdjango.shortcutsr	   r
   Zwebapp.views.baser   r_   r   r   r   Zwebapp.modelsr   Z	m_koleksir   r.   rL   r9   r&   r,   r7   r;   r?   r@   rP   rZ   r$   r$   r$   r%   <module>   s$   &$