installed plugin W3 Total Cache
version 2.3.2
This commit is contained in:
wp-content/plugins/w3-total-cache
Base_Page_Settings.phpBrowserCache_ConfigLabels.phpBrowserCache_Core.phpBrowserCache_Environment.phpBrowserCache_Environment_Apache.phpBrowserCache_Environment_LiteSpeed.phpBrowserCache_Environment_Nginx.phpBrowserCache_Page.phpBrowserCache_Page_View_QuickReference.phpBrowserCache_Page_View_SectionSecurity.phpBrowserCache_Plugin.phpBrowserCache_Plugin_Admin.phpCache.phpCacheFlush.phpCacheFlush_Locally.phpCacheGroups_Plugin_Admin.phpCacheGroups_Plugin_Admin_View.jsCacheGroups_Plugin_Admin_View.phpCache_Apc.phpCache_Apcu.phpCache_Base.phpCache_Eaccelerator.phpCache_File.phpCache_File_Cleaner.phpCache_File_Cleaner_Generic.phpCache_File_Cleaner_Generic_HardDelete.phpCache_File_Generic.phpCache_Memcache.phpCache_Memcached.phpCache_Memcached_Stats.phpCache_Nginx_Memcached.phpCache_Redis.phpCache_Wincache.phpCache_Xcache.phpCdnEngine.phpCdnEngine_Azure.phpCdnEngine_Base.phpCdnEngine_CloudFront.phpCdnEngine_Ftp.phpCdnEngine_GoogleDrive.phpCdnEngine_Mirror.phpCdnEngine_Mirror_Akamai.phpCdnEngine_Mirror_Att.phpCdnEngine_Mirror_CloudFront.phpCdnEngine_Mirror_Cotendo.phpCdnEngine_Mirror_Edgecast.phpCdnEngine_Mirror_Highwinds.phpCdnEngine_Mirror_LimeLight.phpCdnEngine_Mirror_RackSpaceCdn.phpCdnEngine_Mirror_StackPath.phpCdnEngine_Mirror_StackPath2.phpCdnEngine_RackSpaceCloudFiles.phpCdnEngine_S3.phpCdnEngine_S3_Compatible.phpCdn_AdminActions.phpCdn_AdminNotes.phpCdn_CacheFlush.phpCdn_ConfigLabels.phpCdn_Core.phpCdn_Core_Admin.phpCdn_Environment.phpCdn_Environment_LiteSpeed.phpCdn_Environment_Nginx.phpCdn_GeneralPage_View.phpCdn_GoogleDrive_AdminActions.phpCdn_GoogleDrive_Page.phpCdn_GoogleDrive_Page_View.jsCdn_GoogleDrive_Page_View.phpCdn_GoogleDrive_Popup_AuthReturn.phpCdn_GoogleDrive_Popup_AuthReturn_View.phpCdn_Highwinds_Api.phpCdn_Highwinds_Page.phpCdn_Highwinds_Page_View.jsCdn_Highwinds_Page_View.phpCdn_Highwinds_Popup.phpCdn_Highwinds_Popup_View_ConfigureCnamesForm.phpCdn_Highwinds_Popup_View_Intro.phpCdn_Highwinds_Popup_View_SelectHost.phpCdn_Highwinds_Widget.phpCdn_Highwinds_Widget_View.cssCdn_Highwinds_Widget_View.jsCdn_Highwinds_Widget_View.phpCdn_Highwinds_Widget_View_NotConfigured.phpCdn_LimeLight_Page.phpCdn_LimeLight_Page_View.jsCdn_LimeLight_Page_View.phpCdn_LimeLight_Popup.phpCdn_LimeLight_Popup_View_Intro.phpCdn_LimeLight_Popup_View_Success.phpCdn_Page.phpCdn_Page_View_Fsd_HeaderActions.phpCdn_Page_View_Header.phpCdn_Plugin.phpCdn_Plugin_Admin.phpCdn_RackSpaceCdn_AdminActions.phpCdn_RackSpaceCdn_Page.phpCdn_RackSpaceCdn_Page_View.jsCdn_RackSpaceCdn_Page_View.phpCdn_RackSpaceCdn_Popup.phpCdn_RackSpaceCdn_Popup_View_ConfigureDomains.phpCdn_RackSpaceCdn_Popup_View_Intro.phpCdn_RackSpaceCdn_Popup_View_Regions.phpCdn_RackSpaceCdn_Popup_View_Service_Actualize.phpCdn_RackSpaceCdn_Popup_View_Service_Create.phpCdn_RackSpaceCdn_Popup_View_Service_Created.phpCdn_RackSpaceCdn_Popup_View_Services.phpCdn_RackSpaceCloudFiles_Page.phpCdn_RackSpaceCloudFiles_Page_View.jsCdn_RackSpaceCloudFiles_Page_View.phpCdn_RackSpaceCloudFiles_Popup.phpCdn_RackSpaceCloudFiles_Popup_View_Containers.phpCdn_RackSpaceCloudFiles_Popup_View_Intro.phpCdn_RackSpaceCloudFiles_Popup_View_Regions.phpCdn_RackSpace_Api_CaCert-example.pemCdn_RackSpace_Api_Cdn.phpCdn_RackSpace_Api_CloudFiles.phpCdn_RackSpace_Api_CloudFilesCdn.phpCdn_RackSpace_Api_Tokens.phpCdn_StackPath2_Api.phpCdn_StackPath2_Page.phpCdn_StackPath2_Page_View.jsCdn_StackPath2_Page_View.phpCdn_StackPath2_Popup.phpCdn_StackPath2_Popup_View_Intro.phpCdn_StackPath2_Popup_View_Sites.phpCdn_StackPath2_Popup_View_Stacks.phpCdn_StackPath2_Popup_View_Success.phpCdn_StackPath2_Widget.phpCdn_StackPath2_Widget_View.cssCdn_StackPath2_Widget_View.jsCdn_StackPath2_Widget_View_Authorized.phpCdn_StackPath2_Widget_View_Unauthorized.phpCdn_StackPath_Api.phpCdn_StackPath_Page.phpCdn_StackPath_Page_View.jsCdn_StackPath_Page_View.phpCdn_StackPath_Popup.phpCdn_StackPath_Popup_View_Intro.phpCdn_StackPath_Popup_View_Success.phpCdn_StackPath_Popup_View_Zone.phpCdn_StackPath_Popup_View_Zones.phpCdn_StackPath_Widget.phpCdn_StackPath_Widget_View.cssCdn_StackPath_Widget_View.jsCdn_StackPath_Widget_View_Authorized.phpCdn_StackPath_Widget_View_Unauthorized.phpCdn_Util.phpCdnfsd_CacheFlush.phpCdnfsd_CloudFront_Engine.phpCdnfsd_CloudFront_Page.phpCdnfsd_CloudFront_Page_View.jsCdnfsd_CloudFront_Page_View.phpCdnfsd_CloudFront_Popup.phpCdnfsd_CloudFront_Popup_View_Distribution.phpCdnfsd_CloudFront_Popup_View_Distributions.phpCdnfsd_CloudFront_Popup_View_Intro.phpCdnfsd_CloudFront_Popup_View_Success.phpCdnfsd_Core.phpCdnfsd_GeneralPage_View.phpCdnfsd_LimeLight_Api.phpCdnfsd_LimeLight_Engine.phpCdnfsd_LimeLight_Page.phpCdnfsd_LimeLight_Page_View.jsCdnfsd_LimeLight_Page_View.phpCdnfsd_LimeLight_Popup.phpCdnfsd_LimeLight_Popup_View_Intro.phpCdnfsd_LimeLight_Popup_View_Success.phpCdnfsd_Page_View_Header.phpCdnfsd_Plugin.phpCdnfsd_Plugin_Admin.phpCdnfsd_StackPath2_Engine.phpCdnfsd_StackPath2_Page.phpCdnfsd_StackPath2_Page_View.jsCdnfsd_StackPath2_Page_View.phpCdnfsd_StackPath2_Popup.phpCdnfsd_StackPath2_Popup_View_Intro.phpCdnfsd_StackPath2_Popup_View_Sites.phpCdnfsd_StackPath2_Popup_View_Stacks.phpCdnfsd_StackPath2_Popup_View_Success.phpCdnfsd_StackPath_Engine.phpCdnfsd_StackPath_Page.phpCdnfsd_StackPath_Page_View.jsCdnfsd_StackPath_Page_View.phpCdnfsd_StackPath_Popup.phpCdnfsd_StackPath_Popup_View_Intro.phpCdnfsd_StackPath_Popup_View_Success.phpCdnfsd_StackPath_Popup_View_Zone.phpCdnfsd_StackPath_Popup_View_Zones.phpCdnfsd_TransparentCDN_Engine.phpCdnfsd_TransparentCDN_Page.phpCdnfsd_TransparentCDN_Page_View.jsCdnfsd_TransparentCDN_Page_View.phpCdnfsd_Util.phpCli.phpConfig.phpConfigCache.phpConfigCompiler.phpConfigDbStorage.phpConfigKeys.phpConfigState.phpConfigStateNote.phpConfigUtil.phpDbCache_ConfigLabels.phpDbCache_Core.phpDbCache_Environment.phpDbCache_Page.phpDbCache_Plugin.phpDbCache_Plugin_Admin.phpDbCache_Wpdb.phpDbCache_WpdbBase.phpDbCache_WpdbInjection.phpDbCache_WpdbInjection_QueryCaching.phpDbCache_WpdbLegacy.phpDbCache_WpdbNew.phpDispatcher.phpEnterprise_CacheFlush_MakeSnsEvent.phpEnterprise_Dbcache_WpdbInjection_Cluster.phpEnterprise_SnsBase.phpEnterprise_SnsServer.phpExtension_Amp_Page_View.phpExtension_Amp_Plugin.phpExtension_Amp_Plugin_Admin.phpExtension_CloudFlare_AdminActions.phpExtension_CloudFlare_Api.phpExtension_CloudFlare_Cdn_Page_View.phpExtension_CloudFlare_GeneralPage_View.phpExtension_CloudFlare_Page.phpExtension_CloudFlare_Page_View.jsExtension_CloudFlare_Page_View.phpExtension_CloudFlare_Plugin.phpExtension_CloudFlare_Plugin_Admin.phpExtension_CloudFlare_Popup.phpExtension_CloudFlare_Popup_View_Intro.phpExtension_CloudFlare_Popup_View_Zones.phpExtension_CloudFlare_SettingsForUi.phpExtension_CloudFlare_View_Dashboard.jsExtension_CloudFlare_Widget.phpExtension_CloudFlare_Widget_Logo.pngExtension_CloudFlare_Widget_View.cssExtension_CloudFlare_Widget_View.phpExtension_FragmentCache_Api.phpExtension_FragmentCache_Core.phpExtension_FragmentCache_Environment.phpExtension_FragmentCache_GeneralPage.phpExtension_FragmentCache_GeneralPage_View.phpExtension_FragmentCache_Page.phpExtension_FragmentCache_Page_View.phpExtension_FragmentCache_Plugin.phpExtension_FragmentCache_Plugin_Admin.phpExtension_FragmentCache_WpObjectCache.phpExtension_Genesis_Page.phpExtension_Genesis_Page_View.phpExtension_Genesis_Plugin.phpExtension_Genesis_Plugin_Admin.phpExtension_ImageService_Api.phpExtension_ImageService_Cron.phpExtension_ImageService_Environment.phpExtension_ImageService_Page_View.phpExtension_ImageService_Plugin.phpExtension_ImageService_Plugin_Admin.cssExtension_ImageService_Plugin_Admin.jsExtension_ImageService_Plugin_Admin.phpExtension_NewRelic_AdminActions.phpExtension_NewRelic_AdminNotes.phpExtension_NewRelic_Api.phpExtension_NewRelic_Core.phpExtension_NewRelic_GeneralPage.phpExtension_NewRelic_GeneralPage_View.phpExtension_NewRelic_Page.phpExtension_NewRelic_Page_View_Apm.phpExtension_NewRelic_Plugin.phpExtension_NewRelic_Plugin_Admin.phpExtension_NewRelic_Popup.phpExtension_NewRelic_Popup_View.jsExtension_NewRelic_Popup_View_Intro.phpExtension_NewRelic_Popup_View_ListApplications.phpExtension_NewRelic_Service.phpExtension_NewRelic_Widget.phpExtension_NewRelic_Widget_View.cssExtension_NewRelic_Widget_View.jsExtension_NewRelic_Widget_View_Apm.phpExtension_NewRelic_Widget_View_Browser.phpExtension_NewRelic_Widget_View_NotConfigured.phpExtension_Swarmify_AdminActions.phpExtension_Swarmify_Core.phpExtension_Swarmify_Page.phpExtension_Swarmify_Page_View.phpExtension_Swarmify_Plugin.phpExtension_Swarmify_Plugin_Admin.phpExtension_Swarmify_Widget.phpExtension_Swarmify_Widget_View.cssExtension_Swarmify_Widget_View_NotConfigured.phpExtension_WordPressSeo_Plugin.phpExtension_WordPressSeo_Plugin_Admin.phpExtension_Wpml_Plugin.phpExtension_Wpml_Plugin_Admin.phpExtensions_AdminActions.phpExtensions_Page.phpExtensions_Plugin_Admin.phpExtensions_Util.phpFeatureShowcase_Plugin_Admin.phpFeatureShowcase_Plugin_Admin_View.phpGeneric_AdminActions_Config.phpGeneric_AdminActions_Default.phpGeneric_AdminActions_Flush.phpGeneric_AdminActions_Test.phpGeneric_AdminNotes.phpGeneric_ConfigLabels.phpGeneric_Environment.phpGeneric_Faq.phpGeneric_GeneralPage_View_ShowEdge.jsGeneric_GeneralPage_View_ShowSupportUs.jsGeneric_Page_About.phpGeneric_Page_Dashboard.phpGeneric_Page_Dashboard_View.cssGeneric_Page_General.phpGeneric_Page_Install.phpGeneric_Page_PurgeLog.phpGeneric_Page_PurgeLog_View.phpGeneric_Plugin.phpGeneric_Plugin_Admin.phpGeneric_Plugin_AdminCompatibility.phpGeneric_Plugin_AdminNotifications.phpGeneric_Plugin_AdminRowActions.phpGeneric_Plugin_Admin_View_Faq.phpGeneric_Plugin_WidgetForum.phpGeneric_Plugin_WidgetNews.phpGeneric_WidgetBoldGrid.phpGeneric_WidgetBoldGrid_AdminActions.phpGeneric_WidgetBoldGrid_Logo.svgGeneric_WidgetBoldGrid_View.jsGeneric_WidgetBoldGrid_View.phpGeneric_WidgetCommunity.phpGeneric_WidgetCommunity_View.phpGeneric_WidgetServices.phpGeneric_WidgetServices_View.phpGeneric_WidgetSpreadTheWord.jsGeneric_WidgetSpreadTheWord_Plugin.phpGeneric_WidgetSpreadTheWord_View.phpLICENSELicensing_AdminActions.phpLicensing_Core.phpLicensing_Plugin_Admin.phpMinify_AutoCss.phpMinify_AutoJs.phpMinify_ConfigLabels.phpMinify_ContentMinifier.phpMinify_Core.phpMinify_Environment.phpMinify_Environment_LiteSpeed.phpMinify_Extract.phpMinify_GeneralPage_View_ShowHelp.jsMinify_GeneralPage_View_ShowHelpForce.jsMinify_HelpPopup_View.phpMinify_MinifiedFileRequestHandler.phpMinify_Page.phpMinify_Plugin.phpMinify_Plugin_Admin.phpMobile_Base.phpMobile_Redirect.phpMobile_Referrer.phpMobile_UserAgent.phpModuleStatus.phpObjectCache_ConfigLabels.phpObjectCache_Environment.phpObjectCache_Page.phpObjectCache_Page_View_PurgeLog.phpObjectCache_Plugin.phpObjectCache_Plugin_Admin.phpObjectCache_WpObjectCache.phpObjectCache_WpObjectCache_Regular.phpPageSpeed_Api.phpPageSpeed_Data.phpPageSpeed_Instructions.phpPageSpeed_Page.phpPageSpeed_Page_View.cssPageSpeed_Page_View.jsPageSpeed_Page_View.phpPageSpeed_Page_View_FromAPI.phpPageSpeed_Widget.phpPageSpeed_Widget_View.cssPageSpeed_Widget_View.jsPageSpeed_Widget_View.phpPageSpeed_Widget_View_FromApi.phpPgCache_ConfigLabels.phpPgCache_ContentGrabber.phpPgCache_Environment.phpPgCache_Flush.phpPgCache_Page.phpPgCache_Plugin.phpPgCache_Plugin_Admin.phpPgCache_QsExempts.phpRoot_AdminActions.phpRoot_AdminActivation.phpRoot_AdminMenu.phpRoot_Environment.phpRoot_Loader.phpSetupGuide_Plugin_Admin.phpSupport_AdminActions.phpSupport_Page.phpSupport_Page_View_DoneContent.phpSupport_Page_View_PageContent.phpSystemOpCache_AdminActions.phpSystemOpCache_Core.phpSystemOpCache_GeneralPage_View.phpSystemOpCache_Plugin_Admin.phpUsageStatistics_AdminActions.phpUsageStatistics_Core.phpUsageStatistics_GeneralPage.phpUsageStatistics_GeneralPage_View.phpUsageStatistics_Page.phpUsageStatistics_Page_DbRequests_View.phpUsageStatistics_Page_ObjectCacheLog_View.phpUsageStatistics_Page_PageCacheRequests_View.phpUsageStatistics_Page_View.cssUsageStatistics_Page_View.jsUsageStatistics_Page_View.phpUsageStatistics_Page_View_Ad.phpUsageStatistics_Page_View_Disabled.phpUsageStatistics_Page_View_Free.phpUsageStatistics_Page_View_NoDebugMode.phpUsageStatistics_Plugin.phpUsageStatistics_Plugin_Admin.phpUsageStatistics_Source_AccessLog.phpUsageStatistics_Source_DbQueriesLog.phpUsageStatistics_Source_ObjectCacheLog.phpUsageStatistics_Source_PageCacheLog.phpUsageStatistics_Source_Wpdb.phpUsageStatistics_Sources.phpUsageStatistics_Sources_Apc.phpUsageStatistics_Sources_Memcached.phpUsageStatistics_Sources_Redis.phpUsageStatistics_StorageReader.phpUsageStatistics_StorageWriter.phpUsageStatistics_Widget.phpUsageStatistics_Widget_View.jsUsageStatistics_Widget_View.phpUsageStatistics_Widget_View_Disabled.phpUserExperience_Emoji_Extension.phpUserExperience_GeneralPage.phpUserExperience_GeneralPage_View.phpUserExperience_LazyLoad_GoogleMaps_GoogleMapsEasy.phpUserExperience_LazyLoad_GoogleMaps_WPGoogleMapPlugin.phpUserExperience_LazyLoad_GoogleMaps_WPGoogleMaps.phpUserExperience_LazyLoad_Mutator.phpUserExperience_LazyLoad_Mutator_Picture.phpUserExperience_LazyLoad_Mutator_Unmutable.phpUserExperience_LazyLoad_Page_View.phpUserExperience_LazyLoad_Plugin.phpUserExperience_OEmbed_Extension.phpUserExperience_Page.phpUserExperience_Page_View.phpUserExperience_Plugin_Admin.phpUserExperience_Plugin_Jquery.phpUtil_Activation.phpUtil_Admin.phpUtil_AttachToActions.phpUtil_Bus.phpUtil_ConfigLabel.phpUtil_Content.phpUtil_Debug.phpUtil_DebugPurgeLog_Reader.phpUtil_Environment.phpUtil_Environment_Exception.phpUtil_Environment_Exceptions.phpUtil_File.phpUtil_Http.phpUtil_Installed.phpUtil_Mime.phpUtil_PageSpeed.phpUtil_PageUrls.phpUtil_Request.phpUtil_Rule.phpUtil_Theme.phpUtil_Ui.phpUtil_UsageStatistics.phpUtil_Widget.phpUtil_WpFile.phpUtil_WpFile_FilesystemChmodException.phpUtil_WpFile_FilesystemCopyException.phpUtil_WpFile_FilesystemMkdirException.phpUtil_WpFile_FilesystemModifyException.phpUtil_WpFile_FilesystemOperationException.phpUtil_WpFile_FilesystemRmException.phpUtil_WpFile_FilesystemRmdirException.phpUtil_WpFile_FilesystemWriteException.phpUtil_WpmuBlogmap.phpVarnish_Flush.phpVarnish_Plugin.phppress.txtreadme.txt
extension-example
Extension_Example.phpExtension_Example_Admin.phpExtension_Example_Page_View.phpw3-total-cache-example.php
inc
define.php
index.htmlemail
error.phpindex.htmllightbox
mime
options
about.phpbrowsercache.phpcdn.php
cdn
akamai.phpatt.phpazure.phpcf.phpcf2.php
common
cotendo.phpedgecast.phpftp.phpindex.htmlmirror.phprscf.phps3.phps3_compatible.phpcommon
dashboard.phpdbcache.phpedd
enterprise
extensions.phpextensions
general.phpindex.htmlinstall.phpminify.phpminify
ccjs.phpccjs2.phpcss.phpcsstidy.phpcsstidy2.phpgoogleccjs2.phphtml.phphtmltidy.phphtmltidy2.phpindex.htmljs.phpyuicss2.phpyuijs.phpyuijs2.php
objectcache.phpparts
pgcache.phpsupport.phppopup
cdn_export_file.phpcdn_export_library.phpcdn_import_library.phpcdn_purge.phpcdn_queue.phpcdn_rename_domain.php
common
index.htmlwidget
index.htmllatest.phplatest_ajax.phplatest_control.phplatest_news.phplatest_news_ajax.phplatest_news_control.php
wizard
ini
apache_conf
apc.iniconfig-db-sample.phpdbcluster-config-sample.phpeaccelerator.iniindex.htmlmemcache.ininginx-network-sample-config.confnginx-standalone-sample-config.confopcache.iniphp.append.inis3-sample-policy.txtvarnish-sample-config.vclweb.configxcache.inilanguages
lib
Azure
GuzzleHttp
Client.phpClientInterface.php
Cookie
Exception
BadResponseException.phpClientException.phpConnectException.phpGuzzleException.phpRequestException.phpSeekException.phpServerException.phpTooManyRedirectsException.phpTransferException.php
Handler
CurlFactory.phpCurlFactoryInterface.phpCurlHandler.phpCurlMultiHandler.phpEasyHandle.phpMockHandler.phpProxy.phpStreamHandler.php
HandlerStack.phpMessageFormatter.phpMiddleware.phpPool.phpPrepareBodyMiddleware.phpPromise
AggregateException.phpCancellationException.phpCoroutine.phpEachPromise.phpFulfilledPromise.phpPromise.phpPromiseInterface.phpPromisorInterface.phpRejectedPromise.phpRejectionException.phpTaskQueue.phpTaskQueueInterface.phpfunctions.phpfunctions_include.php
Psr7
AppendStream.phpBufferStream.phpCachingStream.phpDroppingStream.phpFnStream.phpInflateStream.phpLazyOpenStream.phpLimitStream.phpMessageTrait.phpMultipartStream.phpNoSeekStream.phpPumpStream.phpRequest.phpResponse.phpServerRequest.phpStream.phpStreamDecoratorTrait.phpStreamWrapper.phpUploadedFile.phpUri.phpfunctions.phpfunctions_include.php
RedirectMiddleware.phpRequestOptions.phpRetryMiddleware.phpTransferStats.phpUriTemplate.phpfunctions.phpfunctions_include.phpMicrosoftAzureStorage
Blob
BlobRestProxy.php
Internal
Models
AccessCondition.phpAccessPolicy.phpAcquireLeaseOptions.phpAcquireLeaseResult.phpBlob.phpBlobBlockType.phpBlobPrefix.phpBlobProperties.phpBlobServiceOptions.phpBlobType.phpBlock.phpBlockList.phpBreakLeaseResult.phpCommitBlobBlocksOptions.phpContainer.phpContainerACL.phpContainerProperties.phpCopyBlobOptions.phpCopyBlobResult.phpCreateBlobBlockOptions.phpCreateBlobOptions.phpCreateBlobPagesOptions.phpCreateBlobPagesResult.phpCreateBlobSnapshotOptions.phpCreateBlobSnapshotResult.phpCreateContainerOptions.phpDeleteBlobOptions.phpDeleteContainerOptions.phpGetBlobMetadataOptions.phpGetBlobMetadataResult.phpGetBlobOptions.phpGetBlobPropertiesOptions.phpGetBlobPropertiesResult.phpGetBlobResult.phpGetContainerACLResult.phpGetContainerPropertiesResult.phpLeaseMode.phpListBlobBlocksOptions.phpListBlobBlocksResult.phpListBlobsOptions.phpListBlobsResult.phpListContainersOptions.phpListContainersResult.phpListPageBlobRangesOptions.phpListPageBlobRangesResult.phpPageRange.phpPageWriteOption.phpPublicAccessType.phpSetBlobMetadataOptions.phpSetBlobMetadataResult.phpSetBlobPropertiesOptions.phpSetBlobPropertiesResult.phpSetContainerMetadataOptions.phpSignedIdentifier.php
Common
CloudConfigurationManager.php
Internal
Authentication
ConnectionStringParser.phpConnectionStringSource.phpFilterableService.phpFilters
AuthenticationFilter.phpDateFilter.phpExponentialRetryPolicy.phpHeadersFilter.phpRetryPolicy.phpRetryPolicyFilter.php
Http
HttpFormatter.phpIServiceFilter.phpInvalidArgumentTypeException.phpLogger.phpResources.phpRestProxy.phpRetryMiddlewareFactory.phpSerialization
ServiceRestProxy.phpServiceSettings.phpStorageServiceSettings.phpUtilities.phpValidate.phpModels
ServiceException.phpServicesBuilder.phpPsrHttpMessage
MessageInterface.phpRequestInterface.phpResponseInterface.phpServerRequestInterface.phpStreamInterface.phpUploadedFileInterface.phpUriInterface.php
loader.phpCSSTidy
Db
Google
Auth
Cache
Client.phpCollection.phpConfig.phpException.phpHttp
IO
Model.phpService.phpService
Signer
Utils.phpUtils
Verifier
Minify
HTTP
JSMin.phpJSMinPlus.phpMinify.phpMinify
Build.phpCSS.php
index.htmlCSS
CSSTidy.phpCache
ClosureCompiler.phpCombineOnly.phpCommentPreserver.phpController
DebugDetector.phpHTML.phpHTML
HTMLTidy.phpIgnoredCommentPreserver.phpImportProcessor.phpInline.phpInline
JS
Lines.phpLogger.phpPacker.phpSource.phpYUI
YUICompressor.phpindex.htmlNetDNA
NewRelic
Nusoap
class.nusoap_base.phpclass.soap_fault.phpclass.soap_parser.phpclass.soap_transport_http.phpclass.soap_val.phpclass.soapclient.phpclass.wsdl.phpclass.wsdlcache.phpclass.xmlschema.phpindex.htmlnusoap.php
OAuth
S3Compatible.phpSNS
YuiCssMin
index.htmlpub
css
error.cssfeature-counter.cssfeature-showcase.cssindex.htmllightbox.cssoptions.csspopup.csssetup-guide.csswidget.csswizard.css
fonts
img
W3TC_dashboard_logo_title-retina.pngW3TC_dashboard_logo_title.pngbutton-grad-active.pngbutton-grad.pngcdn-highwinds-logo.pngclose.pnggoogle-logo.pngindex.htmlmoon-bottom-left.pngmoon-bottom-right.pngopen.png
index.htmloverlay
ceo.pnggauge-bg-tp.pnggray-check.pnglite-gray-check.pnglock.pngoverlay-close.pngoverlay-down-arrow.pngoverlay-logo.pngsave-close.pngselect-arrow.pngtwitter-bird-dark-bgs.pngwordpress-logo-simplified-rgb.png
ps_bar.gifps_grad.gifps_scores.pngsidebar-background.pngstats-bg.pngtransparent-comet-moon.pngtransparent-comet.pngusage-statistics-widget.pngw3tc_cube-shadow.pngw3tc_google-logo-retina.pngw3tc_google-logo.pngw3tc_netdna-logo-retina.pngw3tc_netdna-logo.pngw3tc_newrelic-logo-retina.pngw3tc_newrelic-logo.pngw3tc_stackpath_logo.svgw3tc_swarmify-logo-retina.pngw3tc_swarmify-logo.pngw3tc_w3edge-logo-retina.pngw3tc_w3edge-logo.pngw3tc_w3tc-logo-retina.pngw3tc_w3tc-logo.pngwhite-grad-active.pngwhite-grad.pngwpspin_light.gifjs
chartjs.min.jsfeature-counter.jsindex.htmljquery.masonry.min.jslazyload.min.jslazyload.version.txtlightbox.jsmetadata.jsoptions-validator.jsoptions.jspopup.jssetup-guide.jswidget.jswizard.js
sns.phpvendor
autoload.php
w3-total-cache-api.phpw3-total-cache-old-php.phpw3-total-cache.phpaws
aws-php-sns-message-validator
.github
.travis.ymlCODE_OF_CONDUCT.mdCONTRIBUTING.mdLICENSE.mdNOTICE.mdREADME.mdcomposer.jsonphpunit.xml.distsrc
tests
aws-sdk-php
CODE_OF_CONDUCT.mdLICENSE.mdNOTICE.mdcomposer.jsonaliases.json.phpendpoints.json.phpendpoints_prefix_history.json.phpmanifest.json.php
src
ACMPCA
AbstractConfigurationProvider.phpAccessAnalyzer
Acm
AlexaForBusiness
Amplify
AmplifyBackend
Api
AbstractModel.phpApiProvider.phpDateTimeResult.phpDocModel.php
ErrorParser
AbstractErrorParser.phpJsonParserTrait.phpJsonRpcErrorParser.phpRestJsonErrorParser.phpXmlErrorParser.php
ListShape.phpMapShape.phpOperation.phpParser
AbstractParser.phpAbstractRestParser.phpCrc32ValidatingParser.phpDecodingEventStreamIterator.phpEventParsingIterator.php
Exception
JsonParser.phpJsonRpcParser.phpMetadataParserTrait.phpPayloadParserTrait.phpQueryParser.phpRestJsonParser.phpRestXmlParser.phpXmlParser.phpSerializer
Ec2ParamBuilder.phpJsonBody.phpJsonRpcSerializer.phpQueryParamBuilder.phpQuerySerializer.phpRestJsonSerializer.phpRestSerializer.phpRestXmlSerializer.phpXmlBody.php
Service.phpShape.phpShapeMap.phpStructureShape.phpTimestampShape.phpValidator.phpApiGateway
ApiGatewayManagementApi
ApiGatewayV2
AppConfig
AppIntegrationsService
AppMesh
AppRegistry
AppRunner
AppSync
Appflow
ApplicationAutoScaling
ApplicationCostProfiler
ApplicationDiscoveryService
ApplicationInsights
Appstream
Arn
AccessPointArn.phpAccessPointArnInterface.phpArn.phpArnInterface.phpArnParser.php
Exception
ObjectLambdaAccessPointArn.phpResourceTypeAndIdTrait.phpS3
Athena
AuditManager
AugmentedAIRuntime
AutoScaling
AutoScalingPlans
AwsClient.phpAwsClientInterface.phpAwsClientTrait.phpBackup
Batch
Braket
Budgets
CacheInterface.phpChime
ClientResolver.phpClientSideMonitoring
AbstractMonitoringMiddleware.phpApiCallAttemptMonitoringMiddleware.phpApiCallMonitoringMiddleware.phpConfiguration.phpConfigurationInterface.phpConfigurationProvider.php
Exception
MonitoringMiddlewareInterface.phpCloud9
CloudDirectory
CloudFormation
CloudFront
CloudHSMV2
CloudHsm
CloudSearch
CloudSearchDomain
CloudTrail
CloudWatch
CloudWatchEvents
CloudWatchLogs
CodeArtifact
CodeBuild
CodeCommit
CodeDeploy
CodeGuruProfiler
CodeGuruReviewer
CodePipeline
CodeStar
CodeStarNotifications
CodeStarconnections
CognitoIdentity
CognitoIdentityProvider
CognitoSync
Command.phpCommandInterface.phpCommandPool.phpComprehend
ComprehendMedical
ComputeOptimizer
ConfigService
ConfigurationProviderInterface.phpConnect
ConnectContactLens
ConnectParticipant
CostExplorer
CostandUsageReportService
Credentials
AssumeRoleCredentialProvider.phpAssumeRoleWithWebIdentityCredentialProvider.phpCredentialProvider.phpCredentials.phpCredentialsInterface.phpEcsCredentialProvider.phpInstanceProfileProvider.php
Crypto
AbstractCryptoClient.phpAbstractCryptoClientV2.phpAesDecryptingStream.phpAesEncryptingStream.phpAesGcmDecryptingStream.phpAesGcmEncryptingStream.phpAesStreamInterface.phpAesStreamInterfaceV2.php
Cipher
DecryptionTrait.phpDecryptionTraitV2.phpEncryptionTrait.phpEncryptionTraitV2.phpKmsMaterialsProvider.phpKmsMaterialsProviderV2.phpMaterialsProvider.phpMaterialsProviderInterface.phpMaterialsProviderInterfaceV2.phpMaterialsProviderV2.phpMetadataEnvelope.phpMetadataStrategyInterface.phpPolyfill
CustomerProfiles
DAX
DLM
DataExchange
DataPipeline
DataSync
DatabaseMigrationService
Detective
DevOpsGuru
DeviceFarm
DirectConnect
DirectoryService
DocDB
DoctrineCacheAdapter.phpDynamoDb
BinaryValue.phpDynamoDbClient.php
Exception
LockingSessionConnection.phpMarshaler.phpNumberValue.phpSessionConnectionConfigTrait.phpSessionConnectionInterface.phpSessionHandler.phpSetValue.phpStandardSessionConnection.phpWriteRequestBatch.phpDynamoDbStreams
EBS
EC2InstanceConnect
ECRPublic
EKS
EMRContainers
Ec2
Ecr
Ecs
Efs
ElastiCache
ElasticBeanstalk
ElasticInference
ElasticLoadBalancing
ElasticLoadBalancingV2
ElasticTranscoder
ElasticsearchService
Emr
Endpoint
EndpointProvider.phpPartition.phpPartitionEndpointProvider.phpPartitionInterface.phpPatternEndpointProvider.php
EndpointDiscovery
Configuration.phpConfigurationInterface.phpConfigurationProvider.phpEndpointDiscoveryMiddleware.phpEndpointList.php
EndpointParameterMiddleware.phpException
EventBridge
Exception
AwsException.phpCouldNotCreateChecksumException.phpCredentialsException.phpCryptoException.phpCryptoPolyfillException.phpEventStreamDataException.phpIncalculablePayloadException.phpInvalidJsonException.phpInvalidRegionException.phpMultipartUploadException.phpUnresolvedApiException.phpUnresolvedEndpointException.phpUnresolvedSignatureException.php
FIS
FMS
FSx
FinSpaceData
Firehose
ForecastQueryService
ForecastService
FraudDetector
GameLift
Glacier
GlobalAccelerator
Glue
GlueDataBrew
Greengrass
GreengrassV2
GroundStation
GuardDuty
Handler
HandlerList.phpHasDataTrait.phpHasMonitoringEventsTrait.phpHashInterface.phpHashingStream.phpHealth
HealthLake
History.phpHoneycode
IVS
Iam
IdempotencyTokenMiddleware.phpIdentityStore
ImportExport
InputValidationMiddleware.phpInspector
IoT1ClickDevicesService
IoT1ClickProjects
IoTAnalytics
IoTDeviceAdvisor
IoTEvents
IoTEventsData
IoTFleetHub
IoTJobsDataPlane
IoTSecureTunneling
IoTSiteWise
IoTThingsGraph
IoTWireless
Iot
IotDataPlane
JsonCompiler.phpKafka
Kinesis
KinesisAnalytics
KinesisAnalyticsV2
KinesisVideo
KinesisVideoArchivedMedia
KinesisVideoMedia
KinesisVideoSignalingChannels
Kms
LakeFormation
Lambda
LexModelBuildingService
LexModelsV2
LexRuntimeService
LexRuntimeV2
LicenseManager
Lightsail
LocationService
LookoutEquipment
LookoutMetrics
LookoutforVision
LruArrayCache.phpMQ
MTurk
MWAA
MachineLearning
Macie
Macie2
ManagedBlockchain
MarketplaceCatalog
MarketplaceCommerceAnalytics
MarketplaceEntitlementService
MarketplaceMetering
MediaConnect
MediaConvert
MediaLive
MediaPackage
MediaPackageVod
MediaStore
MediaStoreData
MediaTailor
Middleware.phpMigrationHub
MigrationHubConfig
Mobile
MockHandler.phpMonitoringEventsInterface.phpMultiRegionClient.phpMultipart
Neptune
NetworkFirewall
NetworkManager
NimbleStudio
OpsWorks
OpsWorksCM
Organizations
Outposts
PI
Personalize
PersonalizeEvents
PersonalizeRuntime
PhpHash.phpPinpoint
PinpointEmail
PinpointSMSVoice
Polly
PresignUrlMiddleware.phpPricing
PrometheusService
Psr16CacheAdapter.phpPsrCacheAdapter.phpQLDB
QLDBSession
QuickSight
RAM
RDSDataService
Rds
Redshift
RedshiftDataAPIService
Rekognition
ResourceGroups
ResourceGroupsTaggingAPI
ResponseContainerInterface.phpResult.phpResultInterface.phpResultPaginator.phpRetry
Configuration.phpConfigurationInterface.phpConfigurationProvider.php
RetryMiddleware.phpRetryMiddlewareV2.phpException
QuotaManager.phpRateLimiter.phpRetryHelperTrait.phpRoboMaker
Route53
Route53Domains
Route53Resolver
S3
AmbiguousSuccessParser.phpApplyChecksumMiddleware.phpBatchDelete.phpBucketEndpointArnMiddleware.phpBucketEndpointMiddleware.php
Crypto
CryptoParamsTrait.phpCryptoParamsTraitV2.phpHeadersMetadataStrategy.phpInstructionFileMetadataStrategy.phpS3EncryptionClient.phpS3EncryptionClientV2.phpS3EncryptionMultipartUploader.phpS3EncryptionMultipartUploaderV2.phpUserAgentTrait.php
EndpointRegionHelperTrait.phpException
DeleteMultipleObjectsException.phpPermanentRedirectException.phpS3Exception.phpS3MultipartUploadException.php
GetBucketLocationParser.phpMultipartCopy.phpMultipartUploader.phpMultipartUploadingTrait.phpObjectCopier.phpObjectUploader.phpPermanentRedirectMiddleware.phpPostObject.phpPostObjectV4.phpPutObjectUrlMiddleware.phpRegionalEndpoint
RetryableMalformedResponseParser.phpS3Client.phpS3ClientInterface.phpS3ClientTrait.phpS3EndpointMiddleware.phpS3MultiRegionClient.phpS3UriParser.phpSSECMiddleware.phpStreamWrapper.phpTransfer.phpUseArnRegion
S3Control
S3Outposts
SSMContacts
SSMIncidents
SSO
SSOAdmin
SSOOIDC
SageMaker
SageMakerFeatureStoreRuntime
SageMakerRuntime
SagemakerEdgeManager
SavingsPlans
Schemas
Sdk.phpSecretsManager
SecurityHub
ServerlessApplicationRepository
ServiceCatalog
ServiceDiscovery
ServiceQuotas
Ses
SesV2
Sfn
Shield
Signature
AnonymousSignature.phpS3SignatureV4.phpSignatureInterface.phpSignatureProvider.phpSignatureTrait.phpSignatureV4.php
Sms
SnowBall
Sns
Sqs
Ssm
StorageGateway
StreamRequestPayloadMiddleware.phpSts
Exception
RegionalEndpoints
StsClient.phpSupport
Swf
Synthetics
Textract
TimestreamQuery
TimestreamWrite
TraceMiddleware.phpTranscribeService
Transfer
Translate
WAFV2
Waf
WafRegional
Waiter.phpWellArchitected
WorkDocs
WorkLink
WorkMail
WorkMailMessageFlow
WorkSpaces
WrappedHttpHandler.phpXRay
data
accessanalyzer
2019-11-01
acm-pca
acm
alexaforbusiness
2017-11-09
amp
2020-08-01
amplify
2017-07-25
amplifybackend
2020-08-11
apigateway
apigatewaymanagementapi
2018-11-29
apigatewayv2
2018-11-29
appconfig
2019-10-09
appflow
2020-08-23
appintegrations
2020-07-29
application-autoscaling
application-insights
2018-11-25
applicationcostprofiler
2020-09-10
appmesh
apprunner
2020-05-15
appstream
appsync
2017-07-25
athena
auditmanager
2017-07-25
autoscaling-plans
2018-01-06
autoscaling
backup
2018-11-15
batch
braket
2019-09-01
budgets
2016-10-20
ce
2017-10-25
chime
2018-05-01
cloud9
2017-09-23
clouddirectory
cloudformation
cloudfront
2015-07-27
2016-01-28
2016-08-01
2016-08-20
2016-09-07
2016-09-29
2016-11-25
2017-03-25
2017-10-30
2018-06-18
2018-11-05
2019-03-26
2020-05-31
cloudhsm
2014-05-30
cloudhsmv2
cloudsearch
cloudsearchdomain
2013-01-01
cloudtrail
codeartifact
2018-09-22
codebuild
codecommit
codedeploy
codeguru-reviewer
2019-09-19
codeguruprofiler
2019-07-18
codepipeline
codestar-connections
2019-12-01
codestar-notifications
2019-10-15
codestar
cognito-identity
cognito-idp
cognito-sync
comprehend
2017-11-27
comprehendmedical
2018-10-30
compute-optimizer
2019-11-01
config
connect-contact-lens
2020-08-21
connect
2017-08-08
connectparticipant
2018-09-07
cur
customer-profiles
2020-08-15
data.iot
databrew
2017-07-25
dataexchange
2017-07-25
datapipeline
2012-10-29
datasync
2018-11-09
dax
2017-04-19
detective
2018-10-26
devicefarm
devops-guru
2020-12-01
directconnect
discovery
dlm
2018-01-12
dms
docdb
ds
dynamodb
2011-12-05
2012-08-10
ebs
2019-11-02
ec2-instance-connect
2018-04-02
ec2
2015-10-01
2016-04-01
2016-09-15
2016-11-15
ecr-public
2020-10-30
ecr
ecs
eks
elastic-inference
2017-07-25
elasticache
elasticbeanstalk
elasticfilesystem
elasticloadbalancing
elasticloadbalancingv2
elasticmapreduce
elastictranscoder
email
emr-containers
2020-10-01
entitlement.marketplace
2017-01-11
es
eventbridge
events
finspace-data
2020-07-13
finspace
2021-03-12
firehose
fis
2020-12-01
fms
2018-01-01
forecast
2018-06-26
forecastquery
2018-06-26
frauddetector
2019-11-15
fsx
2018-03-01
gamelift
glacier
globalaccelerator
2018-08-08
glue
greengrass
2017-06-07
greengrassv2
2020-11-30
groundstation
2019-05-23
guardduty
2017-11-28
health
2016-08-04
healthlake
2017-07-01
honeycode
2020-03-01
iam
identitystore
2020-06-15
imagebuilder
2019-12-02
importexport
2010-06-01
inspector
iot-jobs-data
2017-09-29
iot
iot1click-devices
2018-05-14
iot1click-projects
2018-05-14
iotanalytics
2017-11-27
iotdeviceadvisor
2020-09-18
iotevents-data
2018-10-23
iotevents
2018-07-27
iotfleethub
2020-11-03
iotsecuretunneling
2018-10-05
iotsitewise
iotthingsgraph
2018-09-06
iotwireless
2020-11-22
ivs
2020-07-14
kafka
2018-11-14
kendra
2019-02-03
kinesis-video-archived-media
2017-09-30
kinesis-video-media
2017-09-30
kinesis-video-signaling
2019-12-04
kinesis
kinesisanalytics
2015-08-14
kinesisanalyticsv2
2018-05-23
kinesisvideo
2017-09-30
kms
lakeformation
2017-03-31
lambda
lex-models
2017-04-19
license-manager
2018-08-01
lightsail
location
2020-11-19
logs
lookoutequipment
2020-12-15
lookoutmetrics
2017-07-25
lookoutvision
2020-11-20
machinelearning
macie
2017-12-19
macie2
2020-01-01
managedblockchain
2018-09-24
marketplace-catalog
2018-09-17
marketplacecommerceanalytics
mediaconnect
mediaconvert
2017-08-29
medialive
mediapackage-vod
2018-11-07
mediapackage
2017-10-12
mediastore-data
2017-09-01
mediastore
2017-09-01
mediatailor
2018-04-23
metering.marketplace
2016-01-14
mgh
2017-05-31
mgn
2020-02-26
migrationhub-config
2019-06-30
mobile
2017-07-01
models.lex.v2
2020-08-07
monitoring
mq
2017-11-27
mturk-requester
mwaa
2020-07-01
neptune
network-firewall
2020-11-12
networkmanager
2019-07-05
nimble
2020-08-01
opsworks
opsworkscm
organizations
2016-11-28
outposts
2019-12-03
personalize-events
2018-03-22
personalize-runtime
2018-05-22
personalize
2018-05-22
pi
2018-02-27
pinpoint-email
2018-07-26
pinpoint
2016-12-01
polly
pricing
2017-10-15
qldb-session
2019-07-11
qldb
2019-01-02
quicksight
2018-04-01
ram
2018-01-04
rds-data
2018-08-01
rds
2014-09-01
2014-10-31
redshift-data
2019-12-20
redshift
rekognition
resource-groups
2017-11-27
resourcegroupstaggingapi
2017-01-26
robomaker
2018-06-29
route53
route53domains
route53resolver
runtime.lex.v2
2020-08-07
runtime.lex
2016-11-28
runtime.sagemaker
2017-05-13
s3
s3control
2018-08-20
s3outposts
2017-07-25
sagemaker-a2i-runtime
2019-11-07
sagemaker-edge
2020-09-23
sagemaker-featurestore-runtime
2020-07-01
sagemaker
savingsplans
2019-06-28
schemas
secretsmanager
securityhub
2018-10-26
serverlessrepo
2017-09-08
service-quotas
2019-06-24
servicecatalog-appregistry
2020-06-24
servicecatalog
servicediscovery
2017-03-14
sesv2
2019-09-27
shield
signer
sms-voice
2018-09-05
sms
snowball
sns
sqs
ssm-contacts
2021-05-03
ssm-incidents
ssm
sso-admin
2020-07-20
sso-oidc
2019-06-10
sso
2019-06-10
states
storagegateway
2013-06-30
streams.dynamodb
2012-08-10
sts
support
swf
2012-01-25
synthetics
2017-10-11
textract
2018-06-27
timestream-query
2018-11-01
timestream-write
2018-11-01
transcribe
2017-10-26
transfer
2018-11-05
translate
2017-07-01
waf-regional
waf
wafv2
wellarchitected
2020-03-31
workdocs
2016-05-01
worklink
2018-09-25
workmail
2017-10-01
workmailmessageflow
2019-05-01
workspaces
xray
2016-04-12
finspace
functions.phpimagebuilder
kendra
mgn
signer
bin
composer
ClassLoader.phpLICENSEautoload_classmap.phpautoload_files.phpautoload_namespaces.phpautoload_psr4.phpautoload_real.phpautoload_static.phpinstalled.json
guzzlehttp
guzzle
.php_csCHANGELOG.mdDockerfileLICENSEREADME.mdUPGRADING.mdcomposer.json
src
Client.phpClientInterface.php
Cookie
Exception
BadResponseException.phpClientException.phpConnectException.phpGuzzleException.phpInvalidArgumentException.phpRequestException.phpSeekException.phpServerException.phpTooManyRedirectsException.phpTransferException.php
Handler
CurlFactory.phpCurlFactoryInterface.phpCurlHandler.phpCurlMultiHandler.phpEasyHandle.phpMockHandler.phpProxy.phpStreamHandler.php
HandlerStack.phpMessageFormatter.phpMiddleware.phpPool.phpPrepareBodyMiddleware.phpRedirectMiddleware.phpRequestOptions.phpRetryMiddleware.phpTransferStats.phpUriTemplate.phpUtils.phpfunctions.phpfunctions_include.phppromises
psr7
.github
.php_cs.distCHANGELOG.mdLICENSEREADME.mdcomposer.jsonsrc
AppendStream.phpBufferStream.phpCachingStream.phpDroppingStream.phpFnStream.phpHeader.phpInflateStream.phpLazyOpenStream.phpLimitStream.phpMessage.phpMessageTrait.phpMimeType.phpMultipartStream.phpNoSeekStream.phpPumpStream.phpQuery.phpRequest.phpResponse.phpRfc7230.phpServerRequest.phpStream.phpStreamDecoratorTrait.phpStreamWrapper.phpUploadedFile.phpUri.phpUriComparator.phpUriNormalizer.phpUriResolver.phpUtils.phpfunctions.phpfunctions_include.php
mtdowling
jmespath.php
psr
http-message
ralouphie
getallheaders
symfony
polyfill-intl-idn
polyfill-intl-normalizer
wp-content
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright 2010 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Abstract class for the Authentication in the API client
|
||||
* @author Chris Chabot <chabotc@google.com>
|
||||
*
|
||||
*/
|
||||
abstract class W3TCG_Google_Auth_Abstract
|
||||
{
|
||||
/**
|
||||
* An utility function that first calls $this->auth->sign($request) and then
|
||||
* executes makeRequest() on that signed request. Used for when a request
|
||||
* should be authenticated
|
||||
* @param W3TCG_Google_Http_Request $request
|
||||
* @return W3TCG_Google_Http_Request $request
|
||||
*/
|
||||
abstract public function authenticatedRequest(W3TCG_Google_Http_Request $request);
|
||||
abstract public function sign(W3TCG_Google_Http_Request $request);
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* WARNING - this class depends on the Google App Engine PHP library
|
||||
* which is 5.3 and above only, so if you include this in a PHP 5.2
|
||||
* setup or one without 5.3 things will blow up.
|
||||
*/
|
||||
use google\appengine\api\app_identity\AppIdentityService;
|
||||
|
||||
/**
|
||||
* Authentication via the Google App Engine App Identity service.
|
||||
*/
|
||||
class W3TCG_Google_Auth_AppIdentity extends W3TCG_Google_Auth_Abstract
|
||||
{
|
||||
const CACHE_PREFIX = "W3TCG_Google_Auth_AppIdentity::";
|
||||
private $key = null;
|
||||
private $client;
|
||||
private $token = false;
|
||||
private $tokenScopes = false;
|
||||
|
||||
public function __construct(W3TCG_Google_Client $client, $config = null)
|
||||
{
|
||||
$this->client = $client;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve an access token for the scopes supplied.
|
||||
*/
|
||||
public function authenticateForScope($scopes)
|
||||
{
|
||||
if ($this->token && $this->tokenScopes == $scopes) {
|
||||
return $this->token;
|
||||
}
|
||||
|
||||
$cacheKey = self::CACHE_PREFIX;
|
||||
if (is_string($scopes)) {
|
||||
$cacheKey .= $scopes;
|
||||
} else if (is_array($scopes)) {
|
||||
$cacheKey .= implode(":", $scopes);
|
||||
}
|
||||
|
||||
$this->token = $this->client->getCache()->get($cacheKey);
|
||||
if (!$this->token) {
|
||||
$this->token = AppIdentityService::getAccessToken($scopes);
|
||||
if ($this->token) {
|
||||
$this->client->getCache()->set(
|
||||
$cacheKey,
|
||||
$this->token
|
||||
);
|
||||
}
|
||||
}
|
||||
$this->tokenScopes = $scopes;
|
||||
return $this->token;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an authenticated / signed apiHttpRequest.
|
||||
* This function takes the apiHttpRequest, calls apiAuth->sign on it
|
||||
* (which can modify the request in what ever way fits the auth mechanism)
|
||||
* and then calls apiCurlIO::makeRequest on the signed request
|
||||
*
|
||||
* @param W3TCG_Google_Http_Request $request
|
||||
* @return W3TCG_Google_Http_Request The resulting HTTP response including the
|
||||
* responseHttpCode, responseHeaders and responseBody.
|
||||
*/
|
||||
public function authenticatedRequest(W3TCG_Google_Http_Request $request)
|
||||
{
|
||||
$request = $this->sign($request);
|
||||
return $this->client->getIo()->makeRequest($request);
|
||||
}
|
||||
|
||||
public function sign(W3TCG_Google_Http_Request $request)
|
||||
{
|
||||
if (!$this->token) {
|
||||
// No token, so nothing to do.
|
||||
return $request;
|
||||
}
|
||||
// Add the OAuth2 header to the request
|
||||
$request->setRequestHeaders(
|
||||
array('Authorization' => 'Bearer ' . $this->token['access_token'])
|
||||
);
|
||||
|
||||
return $request;
|
||||
}
|
||||
}
|
@ -0,0 +1,134 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright 2012 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Credentials object used for OAuth 2.0 Signed JWT assertion grants.
|
||||
*
|
||||
* @author Chirag Shah <chirags@google.com>
|
||||
*/
|
||||
class W3TCG_Google_Auth_AssertionCredentials
|
||||
{
|
||||
const MAX_TOKEN_LIFETIME_SECS = 3600;
|
||||
|
||||
public $serviceAccountName;
|
||||
public $scopes;
|
||||
public $privateKey;
|
||||
public $privateKeyPassword;
|
||||
public $assertionType;
|
||||
public $sub;
|
||||
/**
|
||||
* @deprecated
|
||||
* @link http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06
|
||||
*/
|
||||
public $prn;
|
||||
private $useCache;
|
||||
|
||||
/**
|
||||
* @param $serviceAccountName
|
||||
* @param $scopes array List of scopes
|
||||
* @param $privateKey
|
||||
* @param string $privateKeyPassword
|
||||
* @param string $assertionType
|
||||
* @param bool|string $sub The email address of the user for which the
|
||||
* application is requesting delegated access.
|
||||
* @param bool useCache Whether to generate a cache key and allow
|
||||
* automatic caching of the generated token.
|
||||
*/
|
||||
public function __construct(
|
||||
$serviceAccountName,
|
||||
$scopes,
|
||||
$privateKey,
|
||||
$privateKeyPassword = 'notasecret',
|
||||
$assertionType = 'http://oauth.net/grant_type/jwt/1.0/bearer',
|
||||
$sub = false,
|
||||
$useCache = true
|
||||
) {
|
||||
$this->serviceAccountName = $serviceAccountName;
|
||||
$this->scopes = is_string($scopes) ? $scopes : implode(' ', $scopes);
|
||||
$this->privateKey = $privateKey;
|
||||
$this->privateKeyPassword = $privateKeyPassword;
|
||||
$this->assertionType = $assertionType;
|
||||
$this->sub = $sub;
|
||||
$this->prn = $sub;
|
||||
$this->useCache = $useCache;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a unique key to represent this credential.
|
||||
* @return string
|
||||
*/
|
||||
public function getCacheKey()
|
||||
{
|
||||
if (!$this->useCache) {
|
||||
return false;
|
||||
}
|
||||
$h = $this->sub;
|
||||
$h .= $this->assertionType;
|
||||
$h .= $this->privateKey;
|
||||
$h .= $this->scopes;
|
||||
$h .= $this->serviceAccountName;
|
||||
return md5($h);
|
||||
}
|
||||
|
||||
public function generateAssertion()
|
||||
{
|
||||
$now = time();
|
||||
|
||||
$jwtParams = array(
|
||||
'aud' => W3TCG_Google_Auth_OAuth2::OAUTH2_TOKEN_URI,
|
||||
'scope' => $this->scopes,
|
||||
'iat' => $now,
|
||||
'exp' => $now + self::MAX_TOKEN_LIFETIME_SECS,
|
||||
'iss' => $this->serviceAccountName,
|
||||
);
|
||||
|
||||
if ($this->sub !== false) {
|
||||
$jwtParams['sub'] = $this->sub;
|
||||
} else if ($this->prn !== false) {
|
||||
$jwtParams['prn'] = $this->prn;
|
||||
}
|
||||
|
||||
return $this->makeSignedJwt($jwtParams);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a signed JWT.
|
||||
* @param array $payload
|
||||
* @return string The signed JWT.
|
||||
*/
|
||||
private function makeSignedJwt($payload)
|
||||
{
|
||||
$header = array('typ' => 'JWT', 'alg' => 'RS256');
|
||||
|
||||
$payload = json_encode($payload);
|
||||
// Handle some overzealous escaping in PHP json that seemed to cause some errors
|
||||
// with claimsets.
|
||||
$payload = str_replace('\/', '/', $payload);
|
||||
|
||||
$segments = array(
|
||||
W3TCG_Google_Utils::urlSafeB64Encode(json_encode($header)),
|
||||
W3TCG_Google_Utils::urlSafeB64Encode($payload)
|
||||
);
|
||||
|
||||
$signingInput = implode('.', $segments);
|
||||
$signer = new W3TCG_Google_Signer_P12($this->privateKey, $this->privateKeyPassword);
|
||||
$signature = $signer->sign($signingInput);
|
||||
$segments[] = W3TCG_Google_Utils::urlSafeB64Encode($signature);
|
||||
|
||||
return implode(".", $segments);
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright 2013 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
class W3TCG_Google_Auth_Exception extends W3TCG_Google_Exception
|
||||
{
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright 2011 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class to hold information about an authenticated login.
|
||||
*
|
||||
* @author Brian Eaton <beaton@google.com>
|
||||
*/
|
||||
class W3TCG_Google_Auth_LoginTicket
|
||||
{
|
||||
const USER_ATTR = "sub";
|
||||
|
||||
// Information from id token envelope.
|
||||
private $envelope;
|
||||
|
||||
// Information from id token payload.
|
||||
private $payload;
|
||||
|
||||
/**
|
||||
* Creates a user based on the supplied token.
|
||||
*
|
||||
* @param string $envelope Header from a verified authentication token.
|
||||
* @param string $payload Information from a verified authentication token.
|
||||
*/
|
||||
public function __construct($envelope, $payload)
|
||||
{
|
||||
$this->envelope = $envelope;
|
||||
$this->payload = $payload;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the numeric identifier for the user.
|
||||
* @throws W3TCG_Google_Auth_Exception
|
||||
* @return
|
||||
*/
|
||||
public function getUserId()
|
||||
{
|
||||
if (array_key_exists(self::USER_ATTR, $this->payload)) {
|
||||
return $this->payload[self::USER_ATTR];
|
||||
}
|
||||
throw new W3TCG_Google_Auth_Exception("No user_id in token");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns attributes from the login ticket. This can contain
|
||||
* various information about the user session.
|
||||
* @return array
|
||||
*/
|
||||
public function getAttributes()
|
||||
{
|
||||
return array("envelope" => $this->envelope, "payload" => $this->payload);
|
||||
}
|
||||
}
|
618
wp-content/plugins/w3-total-cache/lib/Google/Auth/OAuth2.php
Normal file
618
wp-content/plugins/w3-total-cache/lib/Google/Auth/OAuth2.php
Normal file
@ -0,0 +1,618 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright 2008 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Authentication class that deals with the OAuth 2 web-server authentication flow
|
||||
*
|
||||
* @author Chris Chabot <chabotc@google.com>
|
||||
* @author Chirag Shah <chirags@google.com>
|
||||
*
|
||||
*/
|
||||
class W3TCG_Google_Auth_OAuth2 extends W3TCG_Google_Auth_Abstract
|
||||
{
|
||||
const OAUTH2_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke';
|
||||
const OAUTH2_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token';
|
||||
const OAUTH2_AUTH_URL = 'https://accounts.google.com/o/oauth2/auth';
|
||||
const CLOCK_SKEW_SECS = 300; // five minutes in seconds
|
||||
const AUTH_TOKEN_LIFETIME_SECS = 300; // five minutes in seconds
|
||||
const MAX_TOKEN_LIFETIME_SECS = 86400; // one day in seconds
|
||||
const OAUTH2_ISSUER = 'accounts.google.com';
|
||||
|
||||
/** @var W3TCG_Google_Auth_AssertionCredentials $assertionCredentials */
|
||||
private $assertionCredentials;
|
||||
|
||||
/**
|
||||
* @var string The state parameters for CSRF and other forgery protection.
|
||||
*/
|
||||
private $state;
|
||||
|
||||
/**
|
||||
* @var array The token bundle.
|
||||
*/
|
||||
private $token = array();
|
||||
|
||||
/**
|
||||
* @var W3TCG_Google_Client the base client
|
||||
*/
|
||||
private $client;
|
||||
|
||||
/**
|
||||
* Instantiates the class, but does not initiate the login flow, leaving it
|
||||
* to the discretion of the caller.
|
||||
*/
|
||||
public function __construct(W3TCG_Google_Client $client)
|
||||
{
|
||||
$this->client = $client;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an authenticated / signed apiHttpRequest.
|
||||
* This function takes the apiHttpRequest, calls apiAuth->sign on it
|
||||
* (which can modify the request in what ever way fits the auth mechanism)
|
||||
* and then calls apiCurlIO::makeRequest on the signed request
|
||||
*
|
||||
* @param W3TCG_Google_Http_Request $request
|
||||
* @return W3TCG_Google_Http_Request The resulting HTTP response including the
|
||||
* responseHttpCode, responseHeaders and responseBody.
|
||||
*/
|
||||
public function authenticatedRequest(W3TCG_Google_Http_Request $request)
|
||||
{
|
||||
$request = $this->sign($request);
|
||||
return $this->client->getIo()->makeRequest($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $code
|
||||
* @throws W3TCG_Google_Auth_Exception
|
||||
* @return string
|
||||
*/
|
||||
public function authenticate($code)
|
||||
{
|
||||
if (strlen($code) == 0) {
|
||||
throw new W3TCG_Google_Auth_Exception("Invalid code");
|
||||
}
|
||||
|
||||
// We got here from the redirect from a successful authorization grant,
|
||||
// fetch the access token
|
||||
$request = new W3TCG_Google_Http_Request(
|
||||
self::OAUTH2_TOKEN_URI,
|
||||
'POST',
|
||||
array(),
|
||||
array(
|
||||
'code' => $code,
|
||||
'grant_type' => 'authorization_code',
|
||||
'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
|
||||
'client_id' => $this->client->getClassConfig($this, 'client_id'),
|
||||
'client_secret' => $this->client->getClassConfig($this, 'client_secret')
|
||||
)
|
||||
);
|
||||
$request->disableGzip();
|
||||
$response = $this->client->getIo()->makeRequest($request);
|
||||
|
||||
if ($response->getResponseHttpCode() == 200) {
|
||||
$this->setAccessToken($response->getResponseBody());
|
||||
$this->token['created'] = time();
|
||||
return $this->getAccessToken();
|
||||
} else {
|
||||
$decodedResponse = json_decode($response->getResponseBody(), true);
|
||||
if ($decodedResponse != null && $decodedResponse['error']) {
|
||||
$errorText = $decodedResponse['error'];
|
||||
if (isset($decodedResponse['error_description'])) {
|
||||
$errorText .= ": " . $decodedResponse['error_description'];
|
||||
}
|
||||
}
|
||||
throw new W3TCG_Google_Auth_Exception(
|
||||
sprintf(
|
||||
"Error fetching OAuth2 access token, message: '%s'",
|
||||
$errorText
|
||||
),
|
||||
$response->getResponseHttpCode()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a URL to obtain user authorization.
|
||||
* The authorization endpoint allows the user to first
|
||||
* authenticate, and then grant/deny the access request.
|
||||
* @param string $scope The scope is expressed as a list of space-delimited strings.
|
||||
* @return string
|
||||
*/
|
||||
public function createAuthUrl($scope)
|
||||
{
|
||||
$params = array(
|
||||
'response_type' => 'code',
|
||||
'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
|
||||
'client_id' => $this->client->getClassConfig($this, 'client_id'),
|
||||
'scope' => $scope,
|
||||
'access_type' => $this->client->getClassConfig($this, 'access_type'),
|
||||
);
|
||||
|
||||
// Prefer prompt to approval prompt.
|
||||
if ($this->client->getClassConfig($this, 'prompt')) {
|
||||
$params = $this->maybeAddParam($params, 'prompt');
|
||||
} else {
|
||||
$params = $this->maybeAddParam($params, 'approval_prompt');
|
||||
}
|
||||
$params = $this->maybeAddParam($params, 'login_hint');
|
||||
$params = $this->maybeAddParam($params, 'hd');
|
||||
$params = $this->maybeAddParam($params, 'openid.realm');
|
||||
$params = $this->maybeAddParam($params, 'include_granted_scopes');
|
||||
|
||||
// If the list of scopes contains plus.login, add request_visible_actions
|
||||
// to auth URL.
|
||||
$rva = $this->client->getClassConfig($this, 'request_visible_actions');
|
||||
if (strpos($scope, 'plus.login') && strlen($rva) > 0) {
|
||||
$params['request_visible_actions'] = $rva;
|
||||
}
|
||||
|
||||
if (isset($this->state)) {
|
||||
$params['state'] = $this->state;
|
||||
}
|
||||
|
||||
return self::OAUTH2_AUTH_URL . "?" . http_build_query($params, '', '&');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $token
|
||||
* @throws W3TCG_Google_Auth_Exception
|
||||
*/
|
||||
public function setAccessToken($token)
|
||||
{
|
||||
$token = json_decode($token, true);
|
||||
if ($token == null) {
|
||||
throw new W3TCG_Google_Auth_Exception('Could not json decode the token');
|
||||
}
|
||||
if (! isset($token['access_token'])) {
|
||||
throw new W3TCG_Google_Auth_Exception("Invalid token format");
|
||||
}
|
||||
$this->token = $token;
|
||||
}
|
||||
|
||||
public function getAccessToken()
|
||||
{
|
||||
return json_encode($this->token);
|
||||
}
|
||||
|
||||
public function getRefreshToken()
|
||||
{
|
||||
if (array_key_exists('refresh_token', $this->token)) {
|
||||
return $this->token['refresh_token'];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public function setState($state)
|
||||
{
|
||||
$this->state = $state;
|
||||
}
|
||||
|
||||
public function setAssertionCredentials(W3TCG_Google_Auth_AssertionCredentials $creds)
|
||||
{
|
||||
$this->assertionCredentials = $creds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Include an accessToken in a given apiHttpRequest.
|
||||
* @param W3TCG_Google_Http_Request $request
|
||||
* @return W3TCG_Google_Http_Request
|
||||
* @throws W3TCG_Google_Auth_Exception
|
||||
*/
|
||||
public function sign(W3TCG_Google_Http_Request $request)
|
||||
{
|
||||
// add the developer key to the request before signing it
|
||||
if ($this->client->getClassConfig($this, 'developer_key')) {
|
||||
$request->setQueryParam('key', $this->client->getClassConfig($this, 'developer_key'));
|
||||
}
|
||||
|
||||
// Cannot sign the request without an OAuth access token.
|
||||
if (null == $this->token && null == $this->assertionCredentials) {
|
||||
return $request;
|
||||
}
|
||||
|
||||
// Check if the token is set to expire in the next 30 seconds
|
||||
// (or has already expired).
|
||||
if ($this->isAccessTokenExpired()) {
|
||||
if ($this->assertionCredentials) {
|
||||
$this->refreshTokenWithAssertion();
|
||||
} else {
|
||||
if (! array_key_exists('refresh_token', $this->token)) {
|
||||
throw new W3TCG_Google_Auth_Exception(
|
||||
"The OAuth 2.0 access token has expired,"
|
||||
." and a refresh token is not available. Refresh tokens"
|
||||
." are not returned for responses that were auto-approved."
|
||||
);
|
||||
}
|
||||
$this->refreshToken($this->token['refresh_token']);
|
||||
}
|
||||
}
|
||||
|
||||
// Add the OAuth2 header to the request
|
||||
$request->setRequestHeaders(
|
||||
array('Authorization' => 'Bearer ' . $this->token['access_token'])
|
||||
);
|
||||
|
||||
return $request;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches a fresh access token with the given refresh token.
|
||||
* @param string $refreshToken
|
||||
* @return void
|
||||
*/
|
||||
public function refreshToken($refreshToken)
|
||||
{
|
||||
$this->refreshTokenRequest(
|
||||
array(
|
||||
'client_id' => $this->client->getClassConfig($this, 'client_id'),
|
||||
'client_secret' => $this->client->getClassConfig($this, 'client_secret'),
|
||||
'refresh_token' => $refreshToken,
|
||||
'grant_type' => 'refresh_token'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches a fresh access token with a given assertion token.
|
||||
* @param W3TCG_Google_Auth_AssertionCredentials $assertionCredentials optional.
|
||||
* @return void
|
||||
*/
|
||||
public function refreshTokenWithAssertion($assertionCredentials = null)
|
||||
{
|
||||
if (!$assertionCredentials) {
|
||||
$assertionCredentials = $this->assertionCredentials;
|
||||
}
|
||||
|
||||
$cacheKey = $assertionCredentials->getCacheKey();
|
||||
|
||||
if ($cacheKey) {
|
||||
// We can check whether we have a token available in the
|
||||
// cache. If it is expired, we can retrieve a new one from
|
||||
// the assertion.
|
||||
$token = $this->client->getCache()->get($cacheKey);
|
||||
if ($token) {
|
||||
$this->setAccessToken($token);
|
||||
}
|
||||
if (!$this->isAccessTokenExpired()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$this->refreshTokenRequest(
|
||||
array(
|
||||
'grant_type' => 'assertion',
|
||||
'assertion_type' => $assertionCredentials->assertionType,
|
||||
'assertion' => $assertionCredentials->generateAssertion(),
|
||||
)
|
||||
);
|
||||
|
||||
if ($cacheKey) {
|
||||
// Attempt to cache the token.
|
||||
$this->client->getCache()->set(
|
||||
$cacheKey,
|
||||
$this->getAccessToken()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private function refreshTokenRequest($params)
|
||||
{
|
||||
$http = new W3TCG_Google_Http_Request(
|
||||
self::OAUTH2_TOKEN_URI,
|
||||
'POST',
|
||||
array(),
|
||||
$params
|
||||
);
|
||||
$http->disableGzip();
|
||||
$request = $this->client->getIo()->makeRequest($http);
|
||||
|
||||
$code = $request->getResponseHttpCode();
|
||||
$body = $request->getResponseBody();
|
||||
if (200 == $code) {
|
||||
$token = json_decode($body, true);
|
||||
if ($token == null) {
|
||||
throw new W3TCG_Google_Auth_Exception("Could not json decode the access token");
|
||||
}
|
||||
|
||||
if (! isset($token['access_token']) || ! isset($token['expires_in'])) {
|
||||
throw new W3TCG_Google_Auth_Exception("Invalid token format");
|
||||
}
|
||||
|
||||
if (isset($token['id_token'])) {
|
||||
$this->token['id_token'] = $token['id_token'];
|
||||
}
|
||||
$this->token['access_token'] = $token['access_token'];
|
||||
$this->token['expires_in'] = $token['expires_in'];
|
||||
$this->token['created'] = time();
|
||||
} else {
|
||||
throw new W3TCG_Google_Auth_Exception("Error refreshing the OAuth2 token, message: '$body'", $code);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Revoke an OAuth2 access token or refresh token. This method will revoke the current access
|
||||
* token, if a token isn't provided.
|
||||
* @throws W3TCG_Google_Auth_Exception
|
||||
* @param string|null $token The token (access token or a refresh token) that should be revoked.
|
||||
* @return boolean Returns True if the revocation was successful, otherwise False.
|
||||
*/
|
||||
public function revokeToken($token = null)
|
||||
{
|
||||
if (!$token) {
|
||||
if (!$this->token) {
|
||||
// Not initialized, no token to actually revoke
|
||||
return false;
|
||||
} elseif (array_key_exists('refresh_token', $this->token)) {
|
||||
$token = $this->token['refresh_token'];
|
||||
} else {
|
||||
$token = $this->token['access_token'];
|
||||
}
|
||||
}
|
||||
$request = new W3TCG_Google_Http_Request(
|
||||
self::OAUTH2_REVOKE_URI,
|
||||
'POST',
|
||||
array(),
|
||||
"token=$token"
|
||||
);
|
||||
$request->disableGzip();
|
||||
$response = $this->client->getIo()->makeRequest($request);
|
||||
$code = $response->getResponseHttpCode();
|
||||
if ($code == 200) {
|
||||
$this->token = null;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the access_token is expired.
|
||||
* @return bool Returns True if the access_token is expired.
|
||||
*/
|
||||
public function isAccessTokenExpired()
|
||||
{
|
||||
if (!$this->token || !isset($this->token['created'])) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If the token is set to expire in the next 30 seconds.
|
||||
$expired = ($this->token['created']
|
||||
+ ($this->token['expires_in'] - 30)) < time();
|
||||
|
||||
return $expired;
|
||||
}
|
||||
|
||||
// Gets federated sign-on certificates to use for verifying identity tokens.
|
||||
// Returns certs as array structure, where keys are key ids, and values
|
||||
// are PEM encoded certificates.
|
||||
private function getFederatedSignOnCerts()
|
||||
{
|
||||
return $this->retrieveCertsFromLocation(
|
||||
$this->client->getClassConfig($this, 'federated_signon_certs_url')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve and cache a certificates file.
|
||||
*
|
||||
* @param $url string location
|
||||
* @throws W3TCG_Google_Auth_Exception
|
||||
* @return array certificates
|
||||
*/
|
||||
public function retrieveCertsFromLocation($url)
|
||||
{
|
||||
// If we're retrieving a local file, just grab it.
|
||||
if ("http" != substr($url, 0, 4)) {
|
||||
$file = file_get_contents($url);
|
||||
if ($file) {
|
||||
return json_decode($file, true);
|
||||
} else {
|
||||
throw new W3TCG_Google_Auth_Exception(
|
||||
"Failed to retrieve verification certificates: '" .
|
||||
$url . "'."
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// This relies on makeRequest caching certificate responses.
|
||||
$request = $this->client->getIo()->makeRequest(
|
||||
new W3TCG_Google_Http_Request(
|
||||
$url
|
||||
)
|
||||
);
|
||||
if ($request->getResponseHttpCode() == 200) {
|
||||
$certs = json_decode($request->getResponseBody(), true);
|
||||
if ($certs) {
|
||||
return $certs;
|
||||
}
|
||||
}
|
||||
throw new W3TCG_Google_Auth_Exception(
|
||||
"Failed to retrieve verification certificates: '" .
|
||||
$request->getResponseBody() . "'.",
|
||||
$request->getResponseHttpCode()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies an id token and returns the authenticated apiLoginTicket.
|
||||
* Throws an exception if the id token is not valid.
|
||||
* The audience parameter can be used to control which id tokens are
|
||||
* accepted. By default, the id token must have been issued to this OAuth2 client.
|
||||
*
|
||||
* @param $id_token
|
||||
* @param $audience
|
||||
* @return W3TCG_Google_Auth_LoginTicket
|
||||
*/
|
||||
public function verifyIdToken($id_token = null, $audience = null)
|
||||
{
|
||||
if (!$id_token) {
|
||||
$id_token = $this->token['id_token'];
|
||||
}
|
||||
$certs = $this->getFederatedSignonCerts();
|
||||
if (!$audience) {
|
||||
$audience = $this->client->getClassConfig($this, 'client_id');
|
||||
}
|
||||
|
||||
return $this->verifySignedJwtWithCerts($id_token, $certs, $audience, self::OAUTH2_ISSUER);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies the id token, returns the verified token contents.
|
||||
*
|
||||
* @param $jwt string the token
|
||||
* @param $certs array of certificates
|
||||
* @param $required_audience string the expected consumer of the token
|
||||
* @param [$issuer] the expected issues, defaults to Google
|
||||
* @param [$max_expiry] the max lifetime of a token, defaults to MAX_TOKEN_LIFETIME_SECS
|
||||
* @throws W3TCG_Google_Auth_Exception
|
||||
* @return mixed token information if valid, false if not
|
||||
*/
|
||||
public function verifySignedJwtWithCerts(
|
||||
$jwt,
|
||||
$certs,
|
||||
$required_audience,
|
||||
$issuer = null,
|
||||
$max_expiry = null
|
||||
) {
|
||||
if (!$max_expiry) {
|
||||
// Set the maximum time we will accept a token for.
|
||||
$max_expiry = self::MAX_TOKEN_LIFETIME_SECS;
|
||||
}
|
||||
|
||||
$segments = explode(".", $jwt);
|
||||
if (count($segments) != 3) {
|
||||
throw new W3TCG_Google_Auth_Exception("Wrong number of segments in token: $jwt");
|
||||
}
|
||||
$signed = $segments[0] . "." . $segments[1];
|
||||
$signature = W3TCG_Google_Utils::urlSafeB64Decode($segments[2]);
|
||||
|
||||
// Parse envelope.
|
||||
$envelope = json_decode(W3TCG_Google_Utils::urlSafeB64Decode($segments[0]), true);
|
||||
if (!$envelope) {
|
||||
throw new W3TCG_Google_Auth_Exception("Can't parse token envelope: " . $segments[0]);
|
||||
}
|
||||
|
||||
// Parse token
|
||||
$json_body = W3TCG_Google_Utils::urlSafeB64Decode($segments[1]);
|
||||
$payload = json_decode($json_body, true);
|
||||
if (!$payload) {
|
||||
throw new W3TCG_Google_Auth_Exception("Can't parse token payload: " . $segments[1]);
|
||||
}
|
||||
|
||||
// Check signature
|
||||
$verified = false;
|
||||
foreach ($certs as $keyName => $pem) {
|
||||
$public_key = new W3TCG_Google_Verifier_Pem($pem);
|
||||
if ($public_key->verify($signed, $signature)) {
|
||||
$verified = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$verified) {
|
||||
throw new W3TCG_Google_Auth_Exception("Invalid token signature: $jwt");
|
||||
}
|
||||
|
||||
// Check issued-at timestamp
|
||||
$iat = 0;
|
||||
if (array_key_exists("iat", $payload)) {
|
||||
$iat = $payload["iat"];
|
||||
}
|
||||
if (!$iat) {
|
||||
throw new W3TCG_Google_Auth_Exception("No issue time in token: $json_body");
|
||||
}
|
||||
$earliest = $iat - self::CLOCK_SKEW_SECS;
|
||||
|
||||
// Check expiration timestamp
|
||||
$now = time();
|
||||
$exp = 0;
|
||||
if (array_key_exists("exp", $payload)) {
|
||||
$exp = $payload["exp"];
|
||||
}
|
||||
if (!$exp) {
|
||||
throw new W3TCG_Google_Auth_Exception("No expiration time in token: $json_body");
|
||||
}
|
||||
if ($exp >= $now + $max_expiry) {
|
||||
throw new W3TCG_Google_Auth_Exception(
|
||||
sprintf("Expiration time too far in future: %s", $json_body)
|
||||
);
|
||||
}
|
||||
|
||||
$latest = $exp + self::CLOCK_SKEW_SECS;
|
||||
if ($now < $earliest) {
|
||||
throw new W3TCG_Google_Auth_Exception(
|
||||
sprintf(
|
||||
"Token used too early, %s < %s: %s",
|
||||
$now,
|
||||
$earliest,
|
||||
$json_body
|
||||
)
|
||||
);
|
||||
}
|
||||
if ($now > $latest) {
|
||||
throw new W3TCG_Google_Auth_Exception(
|
||||
sprintf(
|
||||
"Token used too late, %s > %s: %s",
|
||||
$now,
|
||||
$latest,
|
||||
$json_body
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$iss = $payload['iss'];
|
||||
if ($issuer && $iss != $issuer) {
|
||||
throw new W3TCG_Google_Auth_Exception(
|
||||
sprintf(
|
||||
"Invalid issuer, %s != %s: %s",
|
||||
$iss,
|
||||
$issuer,
|
||||
$json_body
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Check audience
|
||||
$aud = $payload["aud"];
|
||||
if ($aud != $required_audience) {
|
||||
throw new W3TCG_Google_Auth_Exception(
|
||||
sprintf(
|
||||
"Wrong recipient, %s != %s:",
|
||||
$aud,
|
||||
$required_audience,
|
||||
$json_body
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// All good.
|
||||
return new W3TCG_Google_Auth_LoginTicket($envelope, $payload);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a parameter to the auth params if not empty string.
|
||||
*/
|
||||
private function maybeAddParam($params, $name)
|
||||
{
|
||||
$param = $this->client->getClassConfig($this, $name);
|
||||
if ($param != '') {
|
||||
$params[$name] = $param;
|
||||
}
|
||||
return $params;
|
||||
}
|
||||
}
|
59
wp-content/plugins/w3-total-cache/lib/Google/Auth/Simple.php
Normal file
59
wp-content/plugins/w3-total-cache/lib/Google/Auth/Simple.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright 2010 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Simple API access implementation. Can either be used to make requests
|
||||
* completely unauthenticated, or by using a Simple API Access developer
|
||||
* key.
|
||||
* @author Chris Chabot <chabotc@google.com>
|
||||
* @author Chirag Shah <chirags@google.com>
|
||||
*/
|
||||
class W3TCG_Google_Auth_Simple extends W3TCG_Google_Auth_Abstract
|
||||
{
|
||||
private $key = null;
|
||||
private $client;
|
||||
|
||||
public function __construct(W3TCG_Google_Client $client, $config = null)
|
||||
{
|
||||
$this->client = $client;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an authenticated / signed apiHttpRequest.
|
||||
* This function takes the apiHttpRequest, calls apiAuth->sign on it
|
||||
* (which can modify the request in what ever way fits the auth mechanism)
|
||||
* and then calls apiCurlIO::makeRequest on the signed request
|
||||
*
|
||||
* @param W3TCG_Google_Http_Request $request
|
||||
* @return W3TCG_Google_Http_Request The resulting HTTP response including the
|
||||
* responseHttpCode, responseHeaders and responseBody.
|
||||
*/
|
||||
public function authenticatedRequest(W3TCG_Google_Http_Request $request)
|
||||
{
|
||||
$request = $this->sign($request);
|
||||
return $this->io->makeRequest($request);
|
||||
}
|
||||
|
||||
public function sign(W3TCG_Google_Http_Request $request)
|
||||
{
|
||||
$key = $this->client->getClassConfig($this, 'developer_key');
|
||||
if ($key) {
|
||||
$request->setQueryParam('key', $key);
|
||||
}
|
||||
return $request;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user