o
    #j
                     @   s   d Z 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 ed	Zd
d Zdd Zdd ZdS )zf
This module provides general http handler functions for processing http responses from bos services.
    N)compat)utils)BceServerError)handler)str)bytesz"^[a-z0-9][a-z0-9\-]{1,61}[a-z0-9]$c              
   C   sd   | du rdS t | tr%z| d} W n ty$ } ztd| d}~ww t| s0td|  dS )a$  
    Validate bucket name against BOS official naming rules.
    Raises ValueError for any violation, blocking the request before URL assembly or signing.

    Rules:
      - Allowed characters: [a-z0-9-]
      - Length: 3 ~ 63
      - Must start and end with a lowercase letter or digit
    Nutf-8z(Invalid bucket name: not valid UTF-8: %szInvalid bucket name %r: must match ^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$ (lowercase letters, digits and hyphens only, length 3-63, start and end with letter or digit))
isinstancer   decodeUnicodeDecodeError
ValueError_BUCKET_NAME_REGEXmatch)Zbucket_namee r   b/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/baidubce/services/bos/bos_handler.pyvalidate_bucket_name!   s    


r   c           	      C   s   t d}t d}dd |  D }||d|krb|  }|rSt |}t|}d|v r@|   t|d |d |d d	|j	
tj|tjd
j	 |   dS t| j|jjd}|   |t| |S )z)
    response parser for copy object
    ztransfer-encodingchunkedc                 S   s&   i | ]\}}t | t |qS r   )r   convert_to_stringlower).0kvr   r   r   
<dictcomp>?   s    z.parse_copy_object_response.<locals>.<dictcomp> codemessageZ	requestId)r   
request_id)object_hook)r   T)r   r   
getheadersgetreadjsonloadscloser   __dict__updater   Zdict_to_python_objectreasonmetadataZbce_request_idr   Z
parse_json)	http_responseresponseZTRANSFER_ENCODINGZCHUNKEDZheaders_listbodyZbody_strdr   r   r   r   parse_copy_object_response9   s,   



r-   c              
   C   s   t | trz| d} W n ty } ztd| d}~ww | s%td| dD ]}|dkr6td|  |dkr@td	|  q*dS )
aX  
    Validate object key against path traversal and malformed URI attacks.
    Rules align with BOS server-side behavior:
      - empty key is rejected
      - '..' segments are rejected (400 Bad Request)
      - '.' segments are rejected (400 InvalidURI)
      - Leading '//' double-slash is normalized away by strip('/') before this call
    r   z.Invalid object key: key is not valid UTF-8: %sNz)Invalid object key: key must not be empty/z..z?Invalid object key: path traversal with '..' is not allowed: %s.z7Invalid object key: '.' path segment is not allowed: %s)r	   r   r
   r   r   split)keyr   segmentr   r   r   validate_object_keyV   s(   
	r3   )__doc__r"   reZbaidubcer   r   Zbaidubce.exceptionr   Zbaidubce.httpr   builtinsr   r   compiler   r   r-   r3   r   r   r   r   <module>   s   
