Ë
    ä°ùiS  ã                   ó`   — d dl Z d dl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
  G d„ d«      Zy)é    N)ÚdatetimeÚ	timedeltaÚtimezone)ÚOptional)ÚObjectId)Úaccess_tokensc                   ó  — e Zd ZdZed„ «       Zededefd„«       Zededefd„«       Ze	defd„«       Z
e		 	 	 dded
edee   dededefd„«       Ze	dedee   fd„«       Ze	d„ «       Ze	dedefd„«       Ze	dedefd„«       Zy	)ÚAccessTokenModelé   c                  óH   — t        j                  t        j                  «      S )N)r   Únowr   Úutc© ó    ú?/var/www/pod-logistic/pod-api-clone/model/access_token_model.pyÚ_utcnowzAccessTokenModel._utcnow   s   € ä�|‰|œHŸL™LÓ)Ð)r   Úactor_idÚreturnc                 ó<   — t        | xs d«      j                  «       S )NÚ )ÚstrÚstrip)r   s    r   Ú_normalize_actor_idz$AccessTokenModel._normalize_actor_id   s   € ä�8’>˜rÓ"×(Ñ(Ó*Ð*r   Ú	raw_tokenc                 ó€   — t        j                  t        | xs d«      j                  d«      «      j	                  «       S )Nr   zutf-8)ÚhashlibÚsha256r   ÚencodeÚ	hexdigest)r   s    r   Ú
hash_tokenzAccessTokenModel.hash_token   s.   € ä�~‰~œc )¢/¨rÓ2×9Ñ9¸'ÓBÓC×MÑMÓOÐOr   c                 ó,   — t        j                  d«      S )Né    )ÚsecretsÚtoken_urlsafe)Úclss    r   Úgenerate_raw_tokenz#AccessTokenModel.generate_raw_token   s   € ô ×$Ñ$ RÓ(Ð(r   NÚ
actor_roleÚ	ttl_hoursÚcreated_by_ipÚ
user_agentc                 ó  — | j                  |«      }t        |xs d«      j                  «       }|st        d«      ‚t	        |xs | j
                  «      }| j                  «       }|t        |¬«      z   }| j                  «       }	| j                  |	«      }
|
|||dd ||t        |xs d«      j                  «       t        |xs d«      j                  «       dœ
}t        j                  |«      }|j                  |d<   |	|dœS )Nr   zactor_id is required)ÚhoursF)
Ú	tokenHashÚactorIdÚ	actorRoleÚ	expiresAtÚrevokedÚ	revokedAtÚ	createdAtÚ
lastUsedAtÚcreatedByIpÚ	userAgentÚ_id)ÚrawTokenÚrecord)r   r   r   Ú
ValueErrorÚintÚDEFAULT_TTL_HOURSr   r   r&   r    r   Ú
insert_oneÚinserted_id)r%   r   r'   r(   r)   r*   Úttlr   Ú
expires_atr   Ú
token_hashÚdocÚinsert_results                r   Úissue_tokenzAccessTokenModel.issue_token   s  € ð ×*Ñ*¨8Ó4ˆÜ˜Ò) rÓ*×0Ñ0Ó2ˆ
áÜÐ3Ó4Ð4ä�)Ò4˜s×4Ñ4Ó5ˆØ�k‰k‹mˆØœ9¨3Ô/Ñ/ˆ
à×*Ñ*Ó,ˆ	Ø—^‘^ IÓ.ˆ
ð $ØØ#Ø#ØØØØÜ˜}Ò2°Ó3×9Ñ9Ó;Ü˜ZÒ-¨2Ó.×4Ñ4Ó6ñ
ˆô &×0Ñ0°Ó5ˆØ"×.Ñ.ˆˆE‰
ð "Øñ
ð 	
r   c                 ó~   — | j                  |«      }| j                  «       }t        j                  |dd|idœ«      }|S )NFz$gt)r-   r1   r0   )r    r   r   Úfind_one)r%   r   rA   r   Ú	token_docs        r   Úfind_valid_tokenz!AccessTokenModel.find_valid_tokenI   sE   € à—^‘^ IÓ.ˆ
Ø�k‰k‹mˆä!×*Ñ*Ø#ØØ ˜ñ,
ó ˆ	ð Ðr   c                 ó\   — | j                  «       }t        j                  d|idd|ii«       y )Nr7   ú$setr4   )r   r   Ú
update_one)r%   Útoken_idr   s      r   Útouch_tokenzAccessTokenModel.touch_tokenV   s0   € à�k‰k‹mˆÜ× Ñ Ø�HÐØ�l CÐ(Ð)õ	
r   c                 óš   — | j                  |«      }t        j                  |ddœdd| j                  «       dœi«      }|j                  dkD  S )NF)r-   r1   rJ   T©r1   r2   r   )r    r   rK   r   Úmodified_count)r%   r   rA   Úresults       r   Úrevoke_tokenzAccessTokenModel.revoke_token^   sN   € à—^‘^ IÓ.ˆ
Ü×)Ñ)Ø$°Ñ7Ø °C·K±K³MÑBÐCó
ˆð ×$Ñ$ qÑ(Ð(r   c                 ó�   — t        j                  | j                  |«      ddœdd| j                  «       dœi«      }|j                  S )NF)r.   r1   rJ   TrO   )r   Úupdate_manyr   r   rP   )r%   r   rQ   s      r   Úrevoke_all_for_actorz%AccessTokenModel.revoke_all_for_actorg   sF   € ä×*Ñ*Ø×/Ñ/°Ó9ÀeÑLØ °C·K±K³MÑBÐCó
ˆð ×$Ñ$Ð$r   )Nr   r   )Ú__name__Ú
__module__Ú__qualname__r<   Ústaticmethodr   r   r   r    Úclassmethodr&   r   r;   ÚdictrD   rH   rM   ÚboolrR   rU   r   r   r   r
   r
   
   sY  „ ØÐàñ*ó ð*ð ð+ cð +¨cò +ó ð+ð ðP˜cð P cò Pó ðPð ð) 3ò )ó ð)ð ð
 $(ØØñ(
àð(
ð ð(
ð ˜C‘=ð	(
ð
 ð(
ð ð(
ð 
ò(
ó ð(
ðT ð
¨ð 
°¸$±ò 
ó ð
ð ñ
ó ð
ð ð) Sð )¨Tò )ó ð)ð ð%¨Cð %°Cò %ó ñ%r   r
   )r   r#   r   r   r   Útypingr   Úbson.objectidr   ÚMongoDBConnectionr   r
   r   r   r   ú<module>r`      s&   ðÛ Û ß 2Ñ 2Ý å "Ý +÷c%ò c%r   