{"id":242235,"date":"2025-07-25T15:44:19","date_gmt":"2025-07-25T15:44:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/edd-s3-compatible-storage\/"},"modified":"2026-02-24T09:49:54","modified_gmt":"2026-02-24T09:49:54","slug":"storage-for-edd-via-s3-compatible","status":"publish","type":"plugin","link":"https:\/\/ro.wordpress.org\/plugins\/storage-for-edd-via-s3-compatible\/","author":16849722,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.0","stable_tag":"1.2.0","tested":"6.9.4","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Storage for EDD via S3-Compatible","header_author":"mohammadr3z","header_description":"Enable secure cloud storage and delivery of your digital products through S3-compatible services for Easy Digital Downloads.","assets_banners_color":"1d2428","last_updated":"2026-02-24 09:49:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":0,"downloads":943,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.7":{"tag":"1.0.7","author":"mohammadr3z","date":"2025-07-25 20:48:52"},"1.0.7.1":{"tag":"1.0.7.1","author":"mohammadr3z","date":"2025-07-25 20:48:52"},"1.0.7.2":{"tag":"1.0.7.2","author":"mohammadr3z","date":"2025-07-25 21:05:06"},"1.0.8":{"tag":"1.0.8","author":"mohammadr3z","date":"2025-07-28 21:39:55"},"1.0.9":{"tag":"1.0.9","author":"mohammadr3z","date":"2025-09-07 12:07:54"},"1.1.0":{"tag":"1.1.0","author":"mohammadr3z","date":"2025-09-29 12:59:12"},"1.1.1":{"tag":"1.1.1","author":"mohammadr3z","date":"2025-11-30 17:14:09"},"1.1.10":{"tag":"1.1.10","author":"mohammadr3z","date":"2026-02-04 20:25:28"},"1.1.2":{"tag":"1.1.2","author":"mohammadr3z","date":"2025-12-22 08:34:14"},"1.1.3":{"tag":"1.1.3","author":"mohammadr3z","date":"2025-12-29 10:53:03"},"1.1.4":{"tag":"1.1.4","author":"mohammadr3z","date":"2025-12-29 10:53:03"},"1.1.5":{"tag":"1.1.5","author":"mohammadr3z","date":"2025-12-29 10:53:03"},"1.1.6":{"tag":"1.1.6","author":"mohammadr3z","date":"2025-12-31 08:41:11"},"1.1.7":{"tag":"1.1.7","author":"mohammadr3z","date":"2026-01-07 13:15:21"},"1.1.8":{"tag":"1.1.8","author":"mohammadr3z","date":"2026-01-28 19:55:20"},"1.1.9":{"tag":"1.1.9","author":"mohammadr3z","date":"2026-01-29 13:23:03"},"1.2.0":{"tag":"1.2.0","author":"mohammadr3z","date":"2026-02-24 09:49:54"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3334455,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3334243,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3430264,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3430264,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.7","1.0.7.1","1.0.7.2","1.0.8","1.0.9","1.1.0","1.1.1","1.1.10","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","1.1.9","1.2.0"],"block_files":[],"assets_screenshots":{"Screenshot-4.png":{"filename":"Screenshot-4.png","revision":3434369,"resolution":"4","location":"assets","locale":""},"screenshot-1.png":{"filename":"screenshot-1.png","revision":3334368,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3434369,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3434369,"resolution":"3","location":"assets","locale":""}},"screenshots":{"1":"Admin panel user interface","2":"File selection from S3 storage section","3":"File upload to S3 storage interface"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[5484,2665,217,245501,2216],"plugin_category":[45,59],"plugin_contributors":[170856],"plugin_business_model":[],"class_list":["post-242235","plugin","type-plugin","status-publish","hentry","plugin_tags-easy-digital-downloads","plugin_tags-edd","plugin_tags-s3","plugin_tags-s3-compatible","plugin_tags-storage","plugin_category-ecommerce","plugin_category-utilities-and-tools","plugin_contributors-mohammadr3z","plugin_committers-mohammadr3z","plugin_committers-thisismrez"],"banners":{"banner":"https:\/\/ps.w.org\/storage-for-edd-via-s3-compatible\/assets\/banner-772x250.png?rev=3430264","banner_2x":"https:\/\/ps.w.org\/storage-for-edd-via-s3-compatible\/assets\/banner-1544x500.png?rev=3430264","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/storage-for-edd-via-s3-compatible\/assets\/icon-128x128.png?rev=3334455","icon_2x":"https:\/\/ps.w.org\/storage-for-edd-via-s3-compatible\/assets\/icon-256x256.png?rev=3334243","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/storage-for-edd-via-s3-compatible\/assets\/screenshot-1.png?rev=3334368","caption":"Admin panel user interface"},{"src":"https:\/\/ps.w.org\/storage-for-edd-via-s3-compatible\/assets\/screenshot-2.png?rev=3434369","caption":"File selection from S3 storage section"},{"src":"https:\/\/ps.w.org\/storage-for-edd-via-s3-compatible\/assets\/screenshot-3.png?rev=3434369","caption":"File upload to S3 storage interface"},{"src":"https:\/\/ps.w.org\/storage-for-edd-via-s3-compatible\/assets\/Screenshot-4.png?rev=3434369","caption":""}],"raw_content":"<!--section=description-->\n<p>Storage for EDD via S3-Compatible is a powerful extension for Easy Digital Downloads that allows you to store and deliver your digital products using S3-compatible storage services. This plugin provides seamless integration with various S3-compatible storage providers including MinIO, DigitalOcean Spaces, Linode Object Storage, and many others.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>S3 Compatible Storage Support<\/strong>: Works with MinIO, DigitalOcean Spaces, Linode Object Storage, and other S3-compatible services<\/li>\n<li><strong>Secure File Delivery<\/strong>: Generates time-limited, secure download URLs with enforced timeout limits (1-60 minutes) for your digital products<\/li>\n<li><strong>Easy File Management<\/strong>: Upload files directly to S3 storage through WordPress admin<\/li>\n<li><strong>Media Library Integration<\/strong>: Browse and select files from your S3 storage within WordPress<\/li>\n<li><strong>Configurable Expiry<\/strong>: Set custom expiration times for download links with automatic validation<\/li>\n<li><strong>Customizable URL Prefix<\/strong>: Developers can customize the URL prefix (default: edd-s3cs:\/\/) using WordPress hooks<\/li>\n<li><strong>Security First<\/strong>: Built with WordPress security best practices including timeout enforcement and input validation<\/li>\n<li><strong>Developer Friendly<\/strong>: Clean, well-documented code with hooks and filters<\/li>\n<\/ul>\n\n<h3>Configuration<\/h3>\n\n<ol>\n<li>Go to Downloads &gt; Settings &gt; Extensions &gt; S3 Storage<\/li>\n<li>Enter your S3 credentials:\n\n<ul>\n<li>Access Key<\/li>\n<li>Secret Key<\/li>\n<li>Endpoint URL (e.g., https:\/\/s3.example.com)<\/li>\n<li>Bucket Name<\/li>\n<\/ul><\/li>\n<li>Set the download link expiry time (in minutes, between 1-60 minutes)<\/li>\n<li>Save the settings<\/li>\n<\/ol>\n\n<h3>Usage<\/h3>\n\n<h4>Browsing and Selecting Files<\/h4>\n\n<ol>\n<li>When creating or editing a download in Easy Digital Downloads<\/li>\n<li>Click the \"Browse S3\" button next to the file URL field<\/li>\n<li>Browse your S3 storage using the folder navigation<\/li>\n<li>Use the breadcrumb navigation bar to quickly jump to parent folders<\/li>\n<li>Use the search box in the header to filter files by name<\/li>\n<li>Click \"Select\" to use an existing file for your download<\/li>\n<\/ol>\n\n<h4>Uploading New Files<\/h4>\n\n<ol>\n<li>In the S3 browser, click the \"Upload\" button in the header row<\/li>\n<li>The upload form will appear above the file list<\/li>\n<li>Choose your file and click \"Upload\"<\/li>\n<li>After a successful upload, the file URL will be automatically set with the S3 prefix<\/li>\n<li>Click the button again to hide the upload form<\/li>\n<\/ol>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to your configured S3-compatible storage service to manage files, create download links, and handle file transfers.<\/p>\n\n<p>It sends the necessary authentication signatures and file requests to your S3 provider's servers. This happens when you browse your S3 files in the dashboard, upload files, or when a customer downloads a file.<\/p>\n\n<ul>\n<li><strong>Service<\/strong>: Your S3-Compatible Provider (e.g., AWS S3, DigitalOcean Spaces, etc.)<\/li>\n<li><strong>Used for<\/strong>: File browsing, uploading, and generating secure download links.<\/li>\n<li><strong>Data sent<\/strong>: Authentication headers (Signature V4), file metadata, file content (during upload).<\/li>\n<li><strong>URLs<\/strong>: Configured by the user in the plugin settings (Endpoint URL).<\/li>\n<li><strong>Legal<\/strong>: Refer to your S1-Compatible provider's Terms of Service and Privacy Policy.<\/li>\n<\/ul>\n\n<h3>Support<\/h3>\n\n<p>For support and bug reports, please use the WordPress.org plugin support forum.<\/p>\n\n<p>If you find this plugin helpful, please consider leaving a review on WordPress.org.<\/p>\n\n<h3>Other Storage Providers<\/h3>\n\n<p>Looking for a different storage provider? Check out our other plugins:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/storage-for-edd-via-box\/\">Storage for EDD via Box<\/a> - Use Box for your digital product storage<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/storage-for-edd-via-dropbox\/\">Storage for EDD via Dropbox<\/a> - Use Dropbox for your digital product storage<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/storage-for-edd-via-onedrive\/\">Storage for EDD via OneDrive<\/a> - Use Microsoft OneDrive for your digital product storage<\/li>\n<\/ul>\n\n<h3>Privacy Policy<\/h3>\n\n<p>This plugin does not collect or store any personal data. All file storage and delivery is handled through your configured S3-compatible storage service.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/storage-for-edd-via-s3-compatible<\/code> directory, or install the plugin through the WordPress plugins screen directly.<\/li>\n<li>Make sure you have Easy Digital Downloads plugin installed and activated.<\/li>\n<li>Run <code>composer install<\/code> in the plugin directory if installing from source (not needed for release versions).<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress.<\/li>\n<li>Navigate to Downloads &gt; Settings &gt; Extensions &gt; S3 Storage to configure the plugin.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20s3-compatible%20services%20are%20supported%3F\"><h3>Which S3-compatible services are supported?<\/h3><\/dt>\n<dd><p>This plugin works with any S3-compatible storage service including:\n* Amazon S3\n* DigitalOcean Spaces\n* Linode Object Storage\n* Wasabi\n* Backblaze B2 (with S3-compatible API)\n* Cloudflare R2\n* MinIO\n* Storj\n* ArvanCloud\n* Hetzner Object Storage\n* And many others<\/p><\/dd>\n<dt id=\"how%20secure%20are%20the%20download%20links%3F\"><h3>How secure are the download links?<\/h3><\/dt>\n<dd><p>The plugin generates presigned URLs with configurable expiration times (default 3 minutes). These URLs are temporary and cannot be shared or reused after expiration, ensuring your digital products remain secure.<\/p>\n\n<p>For enhanced security, the plugin enforces timeout limits:\n* Minimum expiry time: 1 minute (ensures links work for legitimate downloads)\n* Maximum expiry time: 60 minutes (prevents long-term unauthorized access)\n* Even if you try to set values outside this range, the plugin automatically adjusts them to stay within safe limits<\/p>\n\n<p>This prevents abuse scenarios such as:\n* Links that expire too quickly (0 minutes)\n* Links that remain valid for days or weeks\n* Unauthorized long-term access to your digital products<\/p><\/dd>\n<dt id=\"what%20file%20types%20are%20supported%20for%20upload%3F\"><h3>What file types are supported for upload?<\/h3><\/dt>\n<dd><p>The plugin supports safe file types including:\n* Archives: ZIP, RAR, 7Z, TAR, GZ\n* Documents: PDF, DOC, DOCX, TXT, RTF, XLS, XLSX, CSV, PPT, PPTX\n* Images: JPG, JPEG, PNG, GIF, WEBP\n* Audio: MP3, WAV, OGG, FLAC, M4A\n* Video: MP4, AVI, MOV, WMV, FLV, WEBM\n* E-books: EPUB, MOBI, AZW, AZW3\n* Web files: CSS, JS, JSON, XML<\/p>\n\n<p>Dangerous file types (executables, scripts) are automatically blocked for security.<\/p><\/dd>\n<dt id=\"how%20does%20the%20plugin%20validate%20uploaded%20files%3F\"><h3>How does the plugin validate uploaded files?<\/h3><\/dt>\n<dd><p>The plugin implements multiple layers of security validation:<\/p>\n\n<ul>\n<li><strong>Extension Validation<\/strong>: Checks file extensions against a whitelist of allowed types<\/li>\n<li><strong>MIME Type Validation<\/strong>: Validates the actual file content type (not just the extension) to prevent file type spoofing<\/li>\n<li><strong>Content-Type Matching<\/strong>: Ensures the file extension matches the actual MIME type to detect malicious files with fake extensions<\/li>\n<li><strong>Size Validation<\/strong>: Enforces WordPress upload size limits<\/li>\n<li><strong>Nonce Verification<\/strong>: Protects against CSRF attacks<\/li>\n<\/ul>\n\n<p>This multi-layered approach prevents attackers from uploading malicious files disguised with safe extensions (e.g., a PHP file renamed to .jpg).<\/p><\/dd>\n<dt id=\"can%20i%20browse%20existing%20files%20in%20my%20s3%20storage%3F\"><h3>Can I browse existing files in my S3 storage?<\/h3><\/dt>\n<dd><p>Yes, the plugin includes an S3 Library feature that allows you to browse and select existing files from your S3 bucket directly within the WordPress admin interface.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20url%20prefix%20for%20s3%20files%3F\"><h3>Can I customize the URL prefix for S3 files?<\/h3><\/dt>\n<dd><p>Yes, developers can customize the URL prefix using the <code>s3cs_edd_url_prefix<\/code> filter. Add this code to your theme's functions.php:<\/p>\n\n<pre><code>function customize_s3_url_prefix($prefix) {\n    return 'edd-myprefix:\/\/'; \/\/ Change to your preferred prefix\n}\nadd_filter('s3cs_edd_url_prefix', 'customize_s3_url_prefix');\n<\/code><\/pre><\/dd>\n<dt id=\"can%20i%20customize%20the%20allowed%20file%20types%20%28mime%20types%29%3F\"><h3>Can I customize the allowed file types (MIME types)?<\/h3><\/dt>\n<dd><p>Yes, developers can customize the allowed MIME types using the <code>s3cs_edd_allowed_mime_types<\/code> filter. Add this code to your theme's functions.php:<\/p>\n\n<pre><code>function customize_allowed_mime_types($mime_types) {\n    \/\/ Add custom MIME types\n    $mime_types[] = 'application\/x-rar'; \/\/ Add RAR support\n    $mime_types[] = 'video\/x-matroska'; \/\/ Add MKV video support\n\n    \/\/ Or remove specific MIME types\n    $mime_types = array_diff($mime_types, array('video\/x-flv')); \/\/ Remove FLV\n\n    return $mime_types;\n}\nadd_filter('s3cs_edd_allowed_mime_types', 'customize_allowed_mime_types');\n<\/code><\/pre><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Major Refactor: Replaced legacy iframe browser with modern AJAX implementation for improved performance.<\/li>\n<li>Fixed: Critical issue where S3 uploads were considered successful despite 4xx\/5xx HTTP errors.<\/li>\n<li>Fixed: Signature mismatch in download presigned URLs for files with special characters or spaces.<\/li>\n<li>Added: Strict pre-upload file validation (hash, size, and stream) for enhanced reliability.<\/li>\n<li>Security: Sanitized <code>response-content-disposition<\/code> header in download links to prevent header injection.<\/li>\n<\/ul>\n\n<h4>1.1.10<\/h4>\n\n<ul>\n<li>Improved: UI styles and enhanced layout consistency for better harmony.<\/li>\n<li>Improved: Comprehensive code improvements and stability optimizations.<\/li>\n<li>Added: Skeleton loader with shimmer animation for better UX while loading S3 browser modal.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Updated: Guzzle HTTP library to version 7.10.0 for PHP 8.5 compatibility.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>Use wp_enqueue commands: Replaced inline  and  in includes\/class-media-library.php (admin media library)<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Added: New \"Browse\" button next to file inputs for easier file selection.<\/li>\n<li>Improved: Modernized file browser UI with a dedicated modal window.<\/li>\n<li>Improved: File browser is now context-aware, opening directly to the selected file's folder.<\/li>\n<li>Improved: Browse button is automatically hidden if the plugin is not configured.<\/li>\n<li>Improved: Removed legacy \"S3 Library\" tab from the standard WordPress media uploader for a cleaner interface.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Added: Native search input type with clear (\"X\") icon support for a cleaner UI.<\/li>\n<li>Improved: Mobile breadcrumb navigation with path wrapping for long directory names.<\/li>\n<li>Improved: Reduced separator spacing in breadcrumbs on mobile devices.<\/li>\n<li>Improved: Standardized header row spacing and title font sizes for UI consistency.<\/li>\n<li>Improved: Enhanced notice detail styling for better error\/success message readability.<\/li>\n<li>Security: Standardized use of wp_json_encode() for client-side data.<\/li>\n<li>Cleaned: Removed unused \"Owner\" metadata logic and legacy CSS rules.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Improved: Media library table styling for more consistent file and folder display.<\/li>\n<li>Improved: Redesigned folder rows with better icons and refined hover effects.<\/li>\n<li>Improved: Enhanced mobile responsiveness for the file browser table.<\/li>\n<li>Fixed: Corrected file name and path display order in the media library.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Added: Breadcrumb navigation in file browser - click any folder in the path to navigate directly.<\/li>\n<li>Improved: Integrated search functionality directly into the breadcrumb navigation bar for a cleaner UI.<\/li>\n<li>Improved: Better navigation experience without needing the Back button.<\/li>\n<li>Improved: Enhanced styling for search inputs and buttons, including compact padding.<\/li>\n<li>Fixed: RTL layout issues for breadcrumbs and navigation buttons.<\/li>\n<li>Cleaned: Removed legacy CSS and unused search container elements.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Changed: Merged Upload tab into Library tab for a unified experience.<\/li>\n<li>Improved: Upload form toggles with a button in the header row.<\/li>\n<li>Improved: Back button moved to header row with new styling (orange for Upload, blue for Back).<\/li>\n<li>Improved: Success notice no longer persists after navigating back in the media library.<\/li>\n<li>Fixed: Critical issue with S3 uploads to folders with spaces in their names (AWS Signature V4 mismatch).<\/li>\n<li>Improved: Better RTL support for styling and layout.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Fixed: Removed non-prefixed global variable to comply with WordPress coding standards.<\/li>\n<li>Improved: Optimized admin settings to only fetch bucket list when viewing the S3 settings section, preventing unnecessary API calls on other EDD settings pages.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Improved: File display in S3 Library now shows filename prominently with path as a subtle subtitle for better readability.<\/li>\n<li>Improved: Enhanced visual hierarchy in file listings with larger, bolder filenames and cleaner path display.<\/li>\n<li>Improved: Better responsive design for file display on mobile and tablet devices.<\/li>\n<li>Improved: Simplified file path styling with better contrast and spacing for improved user experience.<\/li>\n<li>Security: Enforced timeout limits for presigned URLs (minimum 1 minute, maximum 60 minutes) to prevent abuse and ensure reasonable download link expiration.<\/li>\n<li>Security: Enhanced endpoint URL validation with SSRF protection, blocking private IP addresses, localhost, and internal networks to prevent server-side request forgery attacks.<\/li>\n<li>Security: Added comprehensive Content-Type (MIME type) validation to prevent file type spoofing attacks where malicious files are disguised with safe extensions.<\/li>\n<li>Security: Implemented multi-layered file validation including extension matching, MIME type verification, and content-type header validation for S3 uploads.<\/li>\n<li>Security: Added filter hook (s3cs_edd_allowed_mime_types) to allow developers to customize allowed MIME types while maintaining security.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added: URL prefix customization hook (<code>s3cs_edd_url_prefix<\/code> filter) for improved developer flexibility.<\/li>\n<li>Added: Search functionality for S3 Library with real-time file filtering.<\/li>\n<li>Added: Clear search button and keyboard shortcuts (Ctrl+F\/Cmd+F) for enhanced user experience.<\/li>\n<li>Improved: S3 Library interface with modern search container styling.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Security: Added capability-based access control for S3 media library and upload functionality<\/li>\n<li>Security: Removed debug console.log statements to prevent file path exposure<\/li>\n<li>Security: Removed admin_post_nopriv_s3cs_upload action hook to restrict upload access to logged-in users only<\/li>\n<li>Security: Removed SVG from allowed file extensions to prevent XSS attacks via malicious SVG files<\/li>\n<li>Security: Replaced raw S3 error message display with generic user-friendly messages while logging detailed errors for debugging<\/li>\n<li>Security: Reduced XML parser logging to prevent sensitive server response data exposure in logs<\/li>\n<li>Security: Removed \"No Auth\" fallback from authentication methods to prevent unauthenticated requests<\/li>\n<li>Security: Deleted unused <code>makeRequestWithoutAuth<\/code> method to enhance security posture<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Added: File type validation with enhanced security against dangerous file uploads<\/li>\n<li>Added: Translators comments for all internationalization strings with placeholders<\/li>\n<li>Improved: Better internationalization support for translators<\/li>\n<li>Improved: Debug logging now uses WordPress standards with proper sanitization<\/li>\n<li>Fixed: All output from internationalization functions properly escaped to prevent XSS vulnerabilities<\/li>\n<li>Fixed: Proper nonce verification for all form data processing to prevent CSRF attacks<\/li>\n<li>Fixed: Removed production-unsafe debug code and replaced with WordPress-compatible logging<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Automatically prepended <code>https:\/\/<\/code> to Endpoint URL to prevent XML parsing errors.<\/li>\n<li>Improved Endpoint URL validation and user guidance.<\/li>\n<li>XML parsing errors in S3 client and media library functions.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Centralized version management using S3CS_EDD_VERSION constant<\/li>\n<li>Updated Persian translation files<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Removed: Dark mode support to simplify styling and improve consistency across all themes.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed: Responsive S3 file selection now displays file name, size, date, and select button on mobile.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed <code>WP_Scripts::localize<\/code> error by using <code>wp_add_inline_script()<\/code> for non-array values.<\/li>\n<li>Separated all inline JavaScript into dedicated <code>.js<\/code> files for better maintainability and performance.<\/li>\n<li>Separated inline CSS into dedicated <code>.css<\/code> files.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Enhanced S3 upload section styling for a modern look and improved user experience.<\/li>\n<li>Improved responsive design for better display on various screen sizes.<\/li>\n<li>Refined the display of the current directory\/bucket name in the S3 upload section.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added a non-dismissible admin notice to alert users when S3 Access Key or Secret Key are not configured, with a direct link to settings.<\/li>\n<li>Added Persian language support.<\/li>\n<li>Implemented direct file download functionality, preventing files like JSON or text from opening in the browser and forcing download.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>S3-compatible storage integration<\/li>\n<li>Secure presigned URL generation<\/li>\n<li>Media library integration<\/li>\n<li>File upload functionality<\/li>\n<li>Admin settings interface<\/li>\n<li>Security enhancements and validation<\/li>\n<li>Internationalization support<\/li>\n<\/ul>","raw_excerpt":"Enable secure cloud storage and delivery of your digital products through S3-compatible services for Easy Digital Downloads.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/242235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=242235"}],"author":[{"embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mohammadr3z"}],"wp:attachment":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=242235"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=242235"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=242235"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=242235"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=242235"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=242235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}