
    Pi                        d Z ddlmZ ddlmZmZ dgZ eddh          Z eh d          Z	 eh d          Z
 eh d	          Z eh d
          ZddZddZdS )z
Curl command handler for Dippy.

Approves GET/HEAD requests, blocks data-sending operations.
Output flags (-o, --output) return redirect_targets for config rule checking.
    )annotations)ClassificationHandlerContextcurl-o--output>   -F-T-d--data--form--json
--data-raw--data-ascii--data-binary--form-string--upload-file--data-urlencode>   -K--config--mail-from--mail-rcpt--ftp-create-dirs>   GETHEADTRACEOPTIONS>   CWDPWDCDUPFEATHELPLISTMDTMNLSTNOOPPASVSIZESTATSYSTTYPEtokens	list[str]return
str | Nonec                   t          |           D ]\  }}|dk    r#|dz   t          |           k     r| |dz            c S |                    d          r4t          |          dk    r!|                    d          s|dd         c S |dk    r#|dz   t          |           k     r| |dz            c S |                    d          r|dd         c S dS )	z.Extract the output file from -o/--output flag.r         z-o=Nr   z	--output=	   )	enumeratelen
startswith)r,   its      //root/projects/gits/Dippy/src/dippy/cli/curl.py_extract_output_filer:   I   s    &!!  199QV,,!a%=   << 	#a&&1**Q\\%5H5H*QRR5LLL
??q1us6{{22!a%=   <<$$ 	QRR5LLL	4    ctxr   r   c                Z   | j         }|r|d         nd}t          |          D ]O\  }}|t          v rt          d| d|           c S |t          v rt          d| d|           c S t          D ]4}|                    |dz             rt          d| d|           c c S 5|dv rT|dz   t          |          k     r>||dz                                            }|t          vrt          d| d|           c S |                    d	          rO|	                    dd          d                                         }|t          vrt          d| d|           c S |                    d
          ret          |          dk    rR|                    d          s=|dd                                         }|t          vrt          d| d|           c S |dv r|dz   t          |          k     r{||dz            
                                
                    d          	                                d                                         }|t          vrt          d| d|           c S Qt          |          }|r|dvrt          d||f          S t          d|          S )z<Classify curl command (GET/HEAD without data flags is safe).r   r   ask )description=>   	--request-Xr1   z
--request=rC   r2   z-X=N>   -Q--quotez'")-z	/dev/nullallow)r@   redirect_targets)r,   r4   UNSAFE_FLAGSr   
DATA_FLAGSr6   r5   upperSAFE_METHODSsplitstripSAFE_FTP_COMMANDSr:   )	r<   r,   baser7   r8   flagmethodftp_cmdoutput_files	            r9   classifyrU   [   s6   ZF*6!99FD&!! $L $L1!%]]q]]CCCCCC 
??!%]]q]]CCCCCC  	K 	KD||D3J'' K%eD9I9I49I9IJJJJJJJJK ###1us6{{""A,,..--)%=O=Ov=O=OPPPPPP <<%% 	MWWS!__Q'--//F\))%eD9K9K69K9KLLLLLL<< 	M#a&&1**Q\\%5H5H*qrrU[[]]F\))%eD9K9K69K9KLLLLLL !!!1us6{{"" Q---//55e<<BBDDQGMMOO"333)%]]q]]KKKKKK 'v..K 
{*<<<)^
 
 
 	
 't4444r;   N)r,   r-   r.   r/   )r<   r   r.   r   )__doc__
__future__r   	dippy.clir   r   COMMANDS	frozensetOUTPUT_FLAGSrJ   rI   rL   rO   r:   rU    r;   r9   <module>r]      s	    # " " " " " 4 4 4 4 4 4 4 48 y$
+,, Y   
& y    y<<<== I    (   $35 35 35 35 35 35r;   