o
    ưiL                     @   sV  d dl Z d dlZejd e jd 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Zd	e je je jed
 Zdg ddiddiddiddiddiddiddiddiddiddiddiddiddiddiddiddided dd ed! dd"ed# dd$ed% dd&ed' dd(ed) dd*ed+ dd,ed- dd.ed/ dd0ed1 dd2ed3 dd4ed5 dd6ed7 dd8ed9 dd:ed; dd<ed= dd>ed? dd@edA ddBedC ddDedE ddFedG ddHedI ddJedK ddLedM ddNedO ddPedQ ddRedS ddTedU ddVedW ddXedY ddZed[ dd\ed] dd^ed_ dd`eda ddbedc dddede ddfedg ddhedi ddjedk ddledm ddnedo ddpedq ddreds ddtedu ddvedw ddxedy ddzed{ dd|ed} dd~ed dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded dded ddddڜdddڜiZG dd݄ deZdS )    Nz../..)Optional)verbose_proxy_logger)	DualCache)CustomGuardrail)UserAPIKeyAuthZhide_secretszfile://Zsecrets_pluginsZplugins_usednameZSoftlayerDetectorZStripeDetectorZNpmDetectorZIbmCosHmacDetectorZDiscordBotTokenDetectorZBasicAuthDetectorZAzureStorageKeyDetectorZArtifactoryDetectorZAWSKeyDetectorZCloudantDetectorZIbmCloudIamDetectorZJwtTokenDetectorZMailchimpDetectorZSquareOAuthDetectorZPrivateKeyDetectorZTwilioKeyDetectorZAdafruitKeyDetectorz/adafruit.py)r   pathZAdobeSecretDetectorz	/adobe.pyZAgeSecretKeyDetectorz/age_secret_key.pyZAirtableApiKeyDetectorz/airtable_api_key.pyZAlgoliaApiKeyDetectorz/algolia_api_key.pyZAlibabaSecretDetectorz/alibaba.pyZAsanaSecretDetectorz	/asana.pyZAtlassianApiTokenDetectorz/atlassian_api_token.pyZAuthressAccessKeyDetectorz/authress_access_key.pyZBittrexDetectorz/beamer_api_token.pyZBitbucketDetectorz/bitbucket.pyZBeamerApiTokenDetectorz/bittrex.pyZClojarsApiTokenDetectorz/clojars_api_token.pyZCodecovAccessTokenDetectorz/codecov_access_token.pyZCoinbaseAccessTokenDetectorz/coinbase_access_token.pyZConfluentDetectorz/confluent.pyZContentfulApiTokenDetectorz/contentful_api_token.pyZDatabricksApiTokenDetectorz/databricks_api_token.pyZDatadogAccessTokenDetectorz/datadog_access_token.pyZ!DefinedNetworkingApiTokenDetectorz /defined_networking_api_token.pyZDigitaloceanDetectorz/digitalocean.pyZDopplerApiTokenDetectorz/doppler_api_token.pyZDroneciAccessTokenDetectorz/droneci_access_token.pyZDuffelApiTokenDetectorz/duffel_api_token.pyZDynatraceApiTokenDetectorz/dynatrace_api_token.pyZDiscordDetectorz/discord.pyZDropboxDetectorz/dropbox.pyZEasyPostDetectorz/easypost.pyZEtsyAccessTokenDetectorz/etsy_access_token.pyZFacebookAccessTokenDetectorz/facebook_access_token.pyZFastlyApiKeyDetectorz/fastly_api_token.pyZFinicityDetectorz/finicity.pyZFinnhubAccessTokenDetectorz/finnhub_access_token.pyZFlickrAccessTokenDetectorz/flickr_access_token.pyZFlutterwaveDetectorz/flutterwave.pyZFrameIoApiTokenDetectorz/frameio_api_token.pyZFreshbooksAccessTokenDetectorz/freshbooks_access_token.pyZGCPApiKeyDetectorz/gcp_api_key.pyZGitHubTokenCustomDetectorz/github_token.pyZGitLabDetectorz
/gitlab.pyZGitterAccessTokenDetectorz/gitter_access_token.pyZGoCardlessApiTokenDetectorz/gocardless_api_token.pyZGrafanaDetectorz/grafana.pyZHashiCorpTFApiTokenDetectorz/hashicorp_tf_api_token.pyZHerokuApiKeyDetectorz/heroku_api_key.pyZHubSpotApiTokenDetectorz/hubspot_api_key.pyZHuggingFaceDetectorz/huggingface.pyZIntercomApiTokenDetectorz/intercom_api_key.pyZJFrogDetectorz	/jfrog.pyZJWTBase64Detectorz/jwt.pyZKrakenAccessTokenDetectorz/kraken_access_token.pyZKucoinDetectorz
/kucoin.pyZLaunchdarklyAccessTokenDetectorz/launchdarkly_access_token.pyZLinearDetectorz
/linear.pyZLinkedInDetectorz/linkedin.pyZLobDetectorz/lob.pyZMailgunDetectorz/mailgun.pyZMapBoxApiTokenDetectorz/mapbox_api_token.pyZMattermostAccessTokenDetectorz/mattermost_access_token.pyZMessageBirdDetectorz/messagebird.pyZMicrosoftTeamsWebhookDetectorz/microsoft_teams_webhook.pyZNetlifyAccessTokenDetectorz/netlify_access_token.pyZNewRelicDetectorz/new_relic.pyZNYTimesAccessTokenDetectorz/nytimes_access_token.pyZOktaAccessTokenDetectorz/okta_access_token.pyZOpenAIApiKeyDetectorz/openai_api_key.pyZPlanetScaleDetectorz/planetscale.pyZPostmanApiTokenDetectorz/postman_api_token.pyZPrefectApiTokenDetectorz/prefect_api_token.pyZPulumiApiTokenDetectorz/pulumi_api_token.pyZPyPiUploadTokenDetectorz/pypi_upload_token.pyZRapidApiAccessTokenDetectorz/rapidapi_access_token.pyZReadmeApiTokenDetectorz/readme_api_token.pyZRubygemsApiTokenDetectorz/rubygems_api_token.pyZScalingoApiTokenDetectorz/scalingo_api_token.pyZSendbirdDetectorz/sendbird.pyZSendGridApiTokenDetectorz/sendgrid_api_token.pyZSendinBlueApiTokenDetectorz/sendinblue_api_token.pyZSentryAccessTokenDetectorz/sentry_access_token.pyZShippoApiTokenDetectorz/shippo_api_token.pyZShopifyDetectorz/shopify.pyZSlackDetectorz	/slack.pyZSnykApiTokenDetectorz/snyk_api_token.pyZSquarespaceAccessTokenDetectorz/squarespace_access_token.pyZSumoLogicDetectorz/sumologic.pyZTelegramBotApiTokenDetectorz/telegram_bot_api_token.pyZTravisCiAccessTokenDetectorz/travisci_access_token.pyZTwitchApiTokenDetectorz/twitch_api_token.pyZTwitterDetectorz/twitter.pyZTypeformApiTokenDetectorz/typeform_api_token.pyZVaultDetectorz	/vault.pyZYandexDetectorz
/yandex.pyZZendeskSecretKeyDetectorz/zendesk_secret_key.pyZBase64HighEntropyStringg      @)r   limitZHexHighEntropyStringc                       sb   e Zd Zddee f fddZdefddZded	e	fd
dZ
dedededefddZ  ZS )_ENTERPRISE_SecretDetectionNdetect_secrets_configc                    s   || _ t jdi | d S )N )"user_defined_detect_secrets_configsuper__init__)selfr   kwargs	__class__r   o/home/app/Keep/.python/lib/python3.10/site-packages/litellm_enterprise/enterprise_callbacks/secret_detection.pyr     s   z$_ENTERPRISE_SecretDetection.__init__message_contentc           
      C   s   ddl m} ddlm} tjdd}||d |  | }| j	p%t
}|| ||j W d    n1 s;w   Y  t|j g }|jD ]}|| D ]}	|	jd u rYqQ||	j|	jd qQqK|S )Nr   )SecretsCollection)transient_settingsF)deletezutf-8)typevalue)Zdetect_secretsr   Zdetect_secrets.settingsr   tempfileNamedTemporaryFilewriteencodecloser   _default_detect_secrets_configZ	scan_filer   osremovefilesZsecret_valueappendr   )
r   r   r   r   	temp_fileZsecretsr   detected_secretsfileZfound_secretr   r   r   scan_message_for_secrets  s,   


z4_ENTERPRISE_SecretDetection.scan_message_for_secretsuser_api_key_dictreturnc                    s,   |j d urt|j v r|j t du rdS dS )NFT)ZpermissionsGUARDRAIL_NAME)r   r)   r   r   r   should_run_check  s   

z,_ENTERPRISE_SecretDetection.should_run_checkcachedata	call_typec                    s  |  |I d H du rd S d|v r]t|d tr]|d D ]@}d|v r\t|d tr\| |d }|D ]}|d |d d|d< q2t|dkrWdd |D }td	|  qt	d
 qd|v rt|d tr| |d }|D ]}|d |d d|d< qqt|dkrdd |D }td|  n:t|d tr|d D ].}	t|	tr| |	}|D ]
}|	|d d}	qt|dkrdd |D }td|  qd|v rZt|d tr| |d }|D ]}|d |d d|d< qt|dkrdd |D }td|  d S t|d trZ|d }
t
|
D ]6\}}	t|	trR| |	}|D ]}|	|d d|
|< q.t|dkrRdd |D }td|  qt	d| d S )NFmessagescontentr   z
[REDACTED]r   c                 S      g | ]}|d  qS r   r   .0secretr   r   r   
<listcomp>      zC_ENTERPRISE_SecretDetection.async_pre_call_hook.<locals>.<listcomp>z*Detected and redacted secrets in message: zNo secrets detected on input.promptc                 S   r2   r3   r   r4   r   r   r   r7     r8   z)Detected and redacted secrets in prompt: c                 S   r2   r3   r   r4   r   r   r   r7         inputc                 S   r2   r3   r   r4   r   r   r   r7     r8   z(Detected and redacted secrets in input: c                 S   r2   r3   r   r4   r   r   r   r7     r:   zData after redacting input %s)r,   
isinstanceliststrr(   replacelenr   warningdebug	enumerate)r   r)   r-   r.   r/   messager&   r6   Zsecret_typesitemZ_input_in_requestidxr   r   r   async_pre_call_hook  s   






z/_ENTERPRISE_SecretDetection.async_pre_call_hook)N)__name__
__module____qualname__r   dictr   r>   r(   r   boolr,   r   rG   __classcell__r   r   r   r   r
     s    	r
   )r!   sysr   insertabspathr   typingr   Zlitellm._loggingr   Zlitellm.caching.cachingr   Z%litellm.integrations.custom_guardrailr   Zlitellm.proxy._typesr   r+   joindirname__file__Z_custom_plugins_pathr    r
   r   r   r   r   <module>   s   	
"&*.26:>BFJNRVZ^bfjnrvz~                 #  '  +  /  3  7  ;  ?  C  G  K  O  S  W  [  _  c  g  k  o  s  w  {                                      $    (    ,    0    4    8    <    @    D    H    L    P    T    X    \    `    d    h    l    p    t    x    |                      	      