o
    ˷e                      @   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)selfsession r   c/var/www/ideatree/venv/lib/python3.10/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w | }tjj||j	||j
|j|jd d S )N)
server_urlhandlesecretissuedlifetime
assoc_type)r   encodebytesr2   AttributeErrorencodestringr   r   objectscreater1   r3   r4   r5   )r   r0   assocr2   r   r   r   storeAssociationI   s   
zDBOpenIDStore.storeAssociationc                 C   s   t jj|d}|r|j|d}|d | sd S d }|D ]1}t|jt|j	
d|j|j|j}t|dr=| }n|j}|dkrI|  q|d u rO|}q|S )Nr0   r1   z-issuedzutf-8getExpiresInr   )r   r9   filterorder_byexistsOIDAssociationr1   r   decodebytesr2   r   r3   r4   r5   hasattrr?   	expiresIndelete)r   r0   r1   stored_assocs
return_valstored_assocr;   
expires_inr   r   r   getAssociationZ   s0   

	

zDBOpenIDStore.getAssociationc                 C   s*   t jj|d}|r|j|d}|  d S )Nr=   r>   )r   r9   r@   rG   )r   r0   r1   rH   r   r   r   removeAssociation|   s   zDBOpenIDStore.removeAssociationc                 C   sB   zt jj|||d W dS  t jy    t jj|||d Y dS w )N)r0   	timestampsaltTF)r	   r9   getDoesNotExistr:   )r   r0   rN   rO   r   r   r   useNonce   s   	zDBOpenIDStore.useNoncer   )r    r!   r"   max_nonce_ager<   rL   rM   rR   r   r   r   r   r/   F   s    

"r/   c                 C   sv   d }t | }|rt|tj}|s9t| }|r9z|tj}|r,t|d }W |S W |S  t	y8   Y |S w |S Nr   )
r   fromSuccessResponser   rP   r*   r-   r   r(   r)   KeyError)responser+   sregaxvaluesr   r   r   get_email_from_response   s&   

r[   c              	   C   s   d }|rt | }|r|D ]}||}|r nq|sE|rEt| }|rE|D ]}z||}|r4|d }W n	 ty>   Y nw |rD |S q&|S rT   )r   rU   rP   r   rV   )rW   
sreg_namesax_namesr   rX   namerY   rZ   r   r   r   get_value_from_response   s4   



r_   )NN)!r   r   collectionsr   openid.associationr   rC   openid.extensions.axr   openid.extensions.sregr   openid.store.interfacer   OIDStoreallauth.utilsr   modelsr	   r
   r$   r(   r)   r%   r&   r'   AXAttributesr*   r-   r.   
SRegFieldsr/   r[   r_   r   r   r   r   <module>   s6    K