o
    n.i                     @   sv   d dl mZ d dlmZmZ d dlmZ dedefddZdedeeeef  fd	d
Z	dedee
ef fddZdS )    )Message)OptionalTuple)check_credentialsmsgreturnc              	   C   s   |   r1|  D ]&}| dkr.| pd}z|jddj|ddW   S  ty-   Y qw qdS |  p6d}z| jddj|ddW S  tyM   Y dS w )z8
    Devuelve el cuerpo en texto plano del mensaje.
    z
text/plainzutf-8T)decodeignore)errors )is_multipartwalkget_content_typeget_content_charsetget_payloadr   	Exception)r   partcharset r   </var/www/html/flask_server/apps/wp_invoices_mail_app/auth.pyget_plain_body   s(   r   bodyc                 C   sx   d}d}|   D ])}| }| dr |ddd  }q| dr1|ddd  }q|r:|r:||fS dS )us   
    Busca líneas del estilo:
      USER: algo
      PASS: algo
    y devuelve (user, pass) si las encuentra.
    Nzuser::   zpass:)
splitlinesstriplower
startswithsplit)r   userpwdliner   r   r   parse_credentials_from_body    s   r"   c                 C   sJ   t | }t|}|sdS |\}}t||sdd|dfS dd|dfS )z
    Lee el cuerpo del mensaje, extrae USER/PASS y valida contra la lista
    de usuarios permitidos. Devuelve (autorizado, mensaje_log).
    )NOT_CREDENTIALSr   INVALID_CREDENTIALSu"   Credenciales inválidas para user=.AUTHzAutenticado user=)r   r"   r   )r   r   credsr   r    r   r   r   is_authorized_from_message6   s   
r(   N)email.messager   typingr   r   shared.wp_invoices_authr   strr   r"   boolr(   r   r   r   r   <module>   s   