
    -pj                         S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSK
Jr  \R                  " S	5      rS
 rS rS rg)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                     U c  g[        U [        5      (       a   U R                  S5      n [
        R                  U 5      (       d  [	        SU -  5      eg! [         a  n[	        SU-  5      eSnAff = f)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)bucket_namees     ]/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/baidubce/services/bos/bos_handler.pyvalidate_bucket_namer   !   s     +u%%	M%,,W5K ##K0024?@
 	
 1 " 	MG!KLL	Ms   A 
A2A--A2c                 r   [         R                  " S5      n[         R                  " S5      nU R                  5        VVs0 s H>  u  pE[         R                  " U5      R                  5       [         R                  " U5      _M@     nnnUR	                  US5      U:X  a  U R                  5       nU(       a  [         R                  " U5      n[        R                  " U5      n	SU	;   a$  U R                  5         [        U	S   U	S   U	S   S9eUR                  R                  [        R                  " U[        R                  S9R                  5        U R                  5          g
[        U R                  UR                  R                   S	9n
U R                  5         U
e["        R$                  " X5      $ s  snnf )z!
response parser for copy object
ztransfer-encodingchunked codemessage	requestId)r   
request_id)object_hook)r   T)r   convert_to_string
getheaderslowergetreadjsonloadscloser   __dict__updater   dict_to_python_objectreasonmetadatabce_request_idr   
parse_json)http_responseresponseTRANSFER_ENCODINGCHUNKEDkvheaders_listbodybody_strdr   s              r   parse_copy_object_responser6   9   ss    001DE&&y1G - 8 8 :< : ,,Q/5579Q9QRS9TT :  <)2.'9!!#//5H

8$A{##%$Qy\&	aP[n]]!!((JJxU5P5PQZZ\##%
  }33@Q@Q@`@`aA!G !!-::+<s    AF3c                    [        U [        5      (       a   U R                  S5      n U (       d  [	        S5      eU S:X  d  U S:X  d  U S:X  d  U S:X  d  U S	:X  a  [	        S
5      eU R                  S5       H+  nUS:X  a  [	        SU -  5      eUS:X  d  M  [	        SU -  5      e   g! [         a  n[	        SU-  5      eSnAff = f)a<  
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/v1zv1/V1zV1/zIInvalid object key: key must not be '/' or 'v1' or 'v1/' or 'V1' or 'V1/'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   segments      r   validate_object_keyr?   V   s     #u	S**W%C DEE
czSD[C5LC4K3%<dee99S>d?QTWW  c>ICO  " " 	SMPQQRR	Ss   B$ $
C.B<<C)__doc__r"   rebaidubcer   r   baidubce.exceptionr   baidubce.httpr   builtinsr   r   compiler   r   r6   r?        r   <module>rI      sE     	   - !   ZZ EF 
0;:rH   