
    g                     `    d dl Z d dlZd dlZd dlZd dlmZ dZdZdZdddddddefdZ	d Z
d Zy)	    N)a2b_hex__cld_token__~z"([ "#%&\'\/:;<=>?@\[\\\]^`{\|}~]+)c                    |4|'||nt        t        j                               }	|	|z   }nt        d      | |t        d      g }
||
j                  d|z          ||
j                  d|z         |
j                  d|z         |Qt	        |      t
        u r|n|g}|D cg c]  }t        |       }}|
j                  ddj                  |      z         t        |
      }| ||j                  dt        |       z         t        t        j                  |      |      }|
j                  d	|z         d
|t        j                  |
      dz  S c c}w )Nz*Must provide either expiration or durationzMust provide either acl or urlzip=zst=%dzexp=%dzacl=%s!zurl=%szhmac=%sz%(token_name)s=%(token)s)
token_nametoken)
inttime	Exceptionappendtypelist_escape_to_lowerjoin_digestAUTH_TOKEN_SEPARATOR)urlacl
start_timeduration
expirationipkeyr   _starttoken_partsacl_listato_signauths                  */opt/Tautulli/lib/cloudinary/auth_token.pygenerater#      s_    ","8Jc$))+>NE)JHII
{s{899K	~52:&7Z/0x*,-
s)t+3#19:A$Q'::8chhx&889;G
3;x"23"778',,W5s;Dy4'(%zL`LeLefqLr(sss ;s   $Ec                     t        |      }t        j                  || j                  d      t        j
                        j                         S )Nzutf-8)r   hmacnewencodehashlibsha256	hexdigest)messager   bin_keys      r"   r   r   ,   s4    clG88GW^^G4gnnEOOQQ    c                 ^    ddl m}  || t              }t        j                  dd |      }|S )Nr   )smart_escape)unsafez%[0-9A-F]{2}c                 @    | j                  d      j                         S )Nr   )grouplower)xs    r"   <lambda>z"_escape_to_lower.<locals>.<lambda>5   s    AGGAJ4D4D4F r-   )cloudinary.utilsr/   AUTH_TOKEN_UNSAFE_REresub)r   r/   escaped_urls      r"   r   r   1   s+    -s+?@K&&*FTKr-   )r(   r%   r8   r   binasciir   AUTH_TOKEN_NAMEr   r7   r#   r   r    r-   r"   <module>r>      sL      	   " <  4D44Ot>R
r-   