a
    Z4`!                     @   s   d dl Z d dl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mZmZ G d
d deZG dd dZG dd dZejejejejejejejgZG dd dZejejgZG dd deZdd ZdddZ dS )    N)UserDict)Association)FetchResponse)SRegResponse)OpenIDStore)valid_email_or_none   )OpenIDNoncer   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	JSONSafeSessionz
    openid puts e.g. class OpenIDServiceEndpoint in the session.
    Django 1.6 no longer pickles stuff, so we'll need to do some
    hacking here...
    c                 C   s   t |  || _d S )N)r   __init__data)selfZsession r   d/var/www/html/Ranjet/env/lib/python3.9/site-packages/allauth/socialaccount/providers/openid/utils.pyr      s    
zJSONSafeSession.__init__c                 C   s$   t t|d}t| ||S Nascii)base64	b64encodepickledumpsdecoder   __setitem__)r   keyvaluer   r   r   r   r      s    zJSONSafeSession.__setitem__c                 C   s"   t | |}tt|dS r   )r   __getitem__r   loadsr   	b64decodeencode)r   r   r   r   r   r   r      s    zJSONSafeSession.__getitem__N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r
      s   r
   c                   @   s   e Zd ZdZdZdZdS )OldAXAttributez#http://openid.net/schema/namePersonz)http://openid.net/schema/namePerson/firstz(http://openid.net/schema/namePerson/lastN)r   r   r    PERSON_NAMEPERSON_FIRST_NAMEPERSON_LAST_NAMEr   r   r   r   r"   #   s   r"   c                   @   s   e Zd ZdZdZdZdZdS )AXAttributez!http://axschema.org/contact/emailzhttp://axschema.org/namePersonz$http://axschema.org/namePerson/firstz#http://axschema.org/namePerson/lastN)r   r   r    CONTACT_EMAILr#   r$   r%   r   r   r   r   r&   )   s   r&   c                   @   s   e Zd ZdZdZdS )	SRegFieldemailfullnameN)r   r   r    EMAILNAMEr   r   r   r   r(   ;   s   r(   c                   @   s4   e Zd ZdZdddZdddZdd Zd	d
 ZdS )DBOpenIDStorei`T  Nc                 C   s\   zt |j}W n ty.   t |j}Y n
0 | }tjj||j	||j
|j|jd d S )N)
server_urlhandlesecretissuedlifetime
assoc_type)r   encodebytesr0   AttributeErrorencodestringr   r   objectscreater/   r1   r2   r3   )r   r.   assocr0   r   r   r   storeAssociationI   s    zDBOpenIDStore.storeAssociationc                 C   s   t jj|d}|r|j|d}|d | s4d S d }|D ]b}t|jt|j	
d|j|j|j}t|drz| }n|j}|dkr|  q<|d u r<|}q<|S )Nr.   r/   z-issuedzutf-8getExpiresInr   )r   r7   filterZorder_byexistsOIDAssociationr/   r   decodestringr0   r   r1   r2   r3   hasattrr=   Z	expiresIndelete)r   r.   r/   stored_assocsZ
return_valZstored_assocr9   Z
expires_inr   r   r   getAssociationZ   s.    
	


zDBOpenIDStore.getAssociationc                 C   s*   t jj|d}|r|j|d}|  d S )Nr;   r<   )r   r7   r>   rC   )r   r.   r/   rD   r   r   r   removeAssociation|   s    zDBOpenIDStore.removeAssociationc                 C   sD   zt jj|||d W n( t jy>   t jj|||d Y dS 0 dS )N)r.   	timestampsaltTF)r	   r7   getZDoesNotExistr8   )r   r.   rG   rH   r   r   r   useNonce   s    
zDBOpenIDStore.useNonce)N)N)r   r   r    Zmax_nonce_ager:   rE   rF   rJ   r   r   r   r   r-   F   s
   

"r-   c                 C   sl   d }t | }|r"t|tj}|sht| }|rhz |tj}|rRt|d }W n t	yf   Y n0 |S Nr   )
r   fromSuccessResponser   rI   r(   r+   r   r&   r'   KeyError)responser)   sregaxvaluesr   r   r   get_email_from_response   s    

rR   c              	   C   s   d }|r2t | }|r2|D ]}||}|r q2q|s|rt| }|r|D ]:}z||}|rh|d }W n ty|   Y n0 |rL qqL|S rK   )r   rL   rI   r   rM   )rN   Z
sreg_namesZax_namesr   rO   namerP   rQ   r   r   r   get_value_from_response   s*    



rT   )NN)!r   r   collectionsr   Zopenid.associationr   r@   Zopenid.extensions.axr   Zopenid.extensions.sregr   Zopenid.store.interfacer   ZOIDStoreZallauth.utilsr   Zmodelsr	   r
   r"   r&   r'   r#   r$   r%   ZAXAttributesr(   r+   r,   Z
SRegFieldsr-   rR   rT   r   r   r   r   <module>   s4   K