{"id":31107817,"url":"https://github.com/quickbox/rutorrent_hide-dotpaths","last_synced_at":"2025-09-17T05:50:27.991Z","repository":{"id":307955434,"uuid":"1031058914","full_name":"QuickBox/rutorrent_hide-dotpaths","owner":"QuickBox","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-03T09:15:46.000Z","size":63,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-03T09:24:05.383Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/QuickBox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-02T23:16:03.000Z","updated_at":"2025-08-03T09:15:49.000Z","dependencies_parsed_at":"2025-08-03T09:39:35.611Z","dependency_job_id":null,"html_url":"https://github.com/QuickBox/rutorrent_hide-dotpaths","commit_stats":null,"previous_names":["quickbox/rutorrent_hide-dotpaths"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/QuickBox/rutorrent_hide-dotpaths","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickBox%2Frutorrent_hide-dotpaths","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickBox%2Frutorrent_hide-dotpaths/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickBox%2Frutorrent_hide-dotpaths/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickBox%2Frutorrent_hide-dotpaths/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/QuickBox","download_url":"https://codeload.github.com/QuickBox/rutorrent_hide-dotpaths/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickBox%2Frutorrent_hide-dotpaths/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275542090,"owners_count":25483420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-17T02:00:09.119Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-17T05:50:26.669Z","updated_at":"2025-09-17T05:50:27.980Z","avatar_url":"https://github.com/QuickBox.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ruTorrent hide-dotpaths Plugin\n\n\u003cdiv align=\"center\"\u003e\n\n![hide-dotpaths Plugin](https://img.shields.io/badge/hide--dotpaths-Plugin-blue?style=for-the-badge\u0026logo=github)\n[![ruTorrent](https://img.shields.io/badge/ruTorrent-v5.2%2B-4dc187?style=for-the-badge\u0026logo=serverless\u0026logoColor=4dc187)](https://github.com/Novik/ruTorrent)\n[![License](https://img.shields.io/badge/License-GPL%20v3-blue?style=for-the-badge)](https://github.com/QuickBox/rutorrent_hide-dotpaths/blob/main/LICENSE)\n\n**Instantly hide dot-prefixed files and directories from all ruTorrent path dropdowns**\n\n[![Install](https://img.shields.io/badge/Install-Now-success?style=for-the-badge\u0026logo=download)](https://github.com/QuickBox/rutorrent_hide-dotpaths#-installation)\n[![Documentation](https://img.shields.io/badge/Documentation-Read-blue?style=for-the-badge\u0026logo=book)](https://github.com/QuickBox/rutorrent_hide-dotpaths#-table-of-contents)\n[![Community](https://img.shields.io/badge/Community-Join-7289da?style=for-the-badge\u0026logo=discord\u0026logoColor=7289da)](https://discord.gg/mca7RSv5pa)\n\n\u003c/div\u003e\n\n---\n\n## 📋 Table of Contents\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🚀 Quick Start\u003c/strong\u003e\u003c/summary\u003e\n\n- [Overview](#overview)\n- [Why This Exists](#why-this-exists)\n- [Features](#features)\n- [Installation](#installation)\n- [Configuration](#configuration)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🔧 Advanced Usage\u003c/strong\u003e\u003c/summary\u003e\n\n- [Debug System](#debug-system)\n- [Testing](#testing)\n- [Troubleshooting](#troubleshooting)\n\n\u003c/details\u003e\n\n---\n\n## 📖 Overview\n\n\u003e [!NOTE]\n\u003e **hide-dotpaths Plugin** instantly hides dot-prefixed files and directories from all ruTorrent path dropdowns and file browsers. It uses advanced DOM interception technology to remove dot-prefixed items before they become visible to users.\n\n### 🎯 Key Benefits\n\n- **🔍 Instant Filtering** - Items removed before they become visible\n- **⚡ Real-time Interception** - Uses MutationObserver for immediate response\n- **🛡️ Dual Protection** - Client-side filtering + server-side filemanager patch\n- **🌍 Multi-Language** - Support for 7 languages\n- **🔧 Configurable** - Flexible settings for different environments\n- **📊 Advanced Debug** - Intelligent logging with deduplication\n\n---\n\n## 🎯 Why This Exists\n\n\u003e [!IMPORTANT]\n\u003e **Server Admin Problem**: ruTorrent users can see and navigate into hidden directories (`.config`, `.cache`, `.ssh`, etc.) that contain sensitive system files, configuration data, and application settings. This creates security risks and cluttered navigation.\n\n### 🛡️ **The Problem**\n\n**Server administrators face a real challenge**: When users browse directories in ruTorrent's file manager, they can see and access hidden dot-prefixed files and directories like:\n- `.config/` - Application configuration files\n- `.cache/` - System cache directories  \n- `.ssh/` - SSH keys and configuration\n- `.bashrc`, `.profile` - User shell configurations\n- `.git/` - Git repositories\n- `.htaccess` - Web server configuration\n- `.env` - Environment variables and secrets\n\n**This creates several issues:**\n- **🔒 Security Risk**: Users can access sensitive system files\n- **🗂️ Cluttered Navigation**: Hidden files pollute the browsing experience\n- **❓ User Confusion**: Non-technical users see system files they shouldn't access\n- **🛠️ Support Burden**: Admins deal with users accidentally modifying system files\n\n\u003e [!NOTE]\n\u003e **Important Clarification**: This plugin does **not** block legitimate access to hidden files. Users can still access their own hidden directories via CLI, SFTP, or other file access methods. This plugin simply reduces the **accidental exposure** and **clutter** in the ruTorrent web interface, providing a cleaner user experience while maintaining full file access capabilities.\n\n### 💡 **The Solution**\n\n**hide-dotpaths Plugin** provides a **server admin solution** that:\n\n1. **🔍 Instantly Hides** dot-prefixed files and directories from all ruTorrent interfaces\n2. **🛡️ Dual Protection** - Combines client-side filtering with server-side enforcement\n3. **📊 Advanced Monitoring** - Detailed logging for server admins to audit what's being filtered\n4. **🎯 Clean User Experience** - Users see only relevant files and directories\n5. **🔧 Configurable** - Admins can fine-tune what gets hidden and what doesn't\n\n### 👨‍💼 **For Server Administrators**\n\n**This plugin is designed for server admins who want to:**\n- **Protect sensitive system files** from accidental access via web interface\n- **Clean up the user experience** by hiding irrelevant system files\n- **Monitor filtering activity** with detailed debug logging\n- **Maintain control** over what users can see and access in the web interface\n- **Reduce support tickets** from users confused by system files\n\n**The advanced debug system allows admins to:**\n- **Review exactly what files/directories are being filtered**\n- **Catch any errors in detail** should they occur\n- **Monitor filtering performance** and effectiveness\n- **Troubleshoot issues** with comprehensive logging\n- **Audit security** by seeing what hidden files exist\n\n### 🎯 **Use Cases**\n\n- **🔒 Shared Hosting**: Reduce accidental exposure of system files in web interface\n- **🏢 Enterprise Environments**: Protect sensitive configuration files from web access\n- **👥 Multi-User Servers**: Clean up navigation for non-technical users\n- **🛡️ Security-Conscious Admins**: Reduce margin for unintentional errors\n- **📊 Monitoring**: Track what hidden files exist and are being filtered (Debug Logging)\n\n---\n\n## ✨ Features\n\n### 🔍 Instant Filtering\n- **Real-time Removal**: Dot-prefixed items removed immediately\n- **Comprehensive Coverage**: All ruTorrent browse dialogs, dropdowns, and menus\n- **Generic Filtering**: Works with any dot-prefixed path (`.anything`, `.whatever`, etc.)\n- **Preserves Navigation**: Keeps `..` parent directory references intact\n\n### 🛡️ Dual Protection Technology\n- **Client-Side**: Advanced DOM interception using MutationObserver\n- **Server-Side**: Programmatic override of filemanager settings\n- **Runtime Enforcement**: Forces hidden files to stay hidden\n\n### 🔧 Advanced Debug System\n- **Intelligent Deduplication**: Prevents duplicate log entries\n- **Scoped Debugging**: Enable specific scopes (general, filter, patch, cache, performance)\n- **Rate Limiting**: Configurable rate limiting to prevent spam\n- **Memory Management**: Automatic cleanup prevents memory leaks\n\n---\n\n## 🚀 Installation\n\n### 📋 Prerequisites\n\n\u003e [!IMPORTANT]\n\u003e **Requirements:**\n\u003e - ✅ ruTorrent v5.2+ installed and configured\n\u003e - ✅ Modern web browser with ES6+ support\n\u003e - ✅ Access to ruTorrent plugins directory\n\u003e - ✅ Proper file permissions for web server\n\n### ⚡ QuickBox Installation (Recommended)\n\n```bash\n# Clone to QuickBox ruTorrent plugins directory\ngit clone \"https://github.com/QuickBox/rutorrent_hide-dotpaths.git\" \"/srv/rutorrent/plugins/hide-dotpaths\"\n\n# Set permissions\nchown www-data:www-data -R \"/srv/rutorrent/plugins/hide-dotpaths\"\nchmod 755 \"/srv/rutorrent/plugins/hide-dotpaths/\"\nchmod 644 \"/srv/rutorrent/plugins/hide-dotpaths/\"*.js\nchmod 644 \"/srv/rutorrent/plugins/hide-dotpaths/\"*.php\nchmod 644 \"/srv/rutorrent/plugins/hide-dotpaths/\"*.info\n\n# Restart services\nsudo systemctl restart php8.1-fpm nginx\nsource /opt/quickbox/config/system/mflibs/quickbox \u003e/dev/null 2\u003e\u00261\nread -d '' -ra users_all \u003c\u003c\u003c\"$(quickbox::database \"SELECT username FROM user_information\")\"\nfor user in \"${users_all[@]:-}\"; do\n  sudo systemctl restart rtorrent@\"${user}\"\ndone\n```\n\n### 🔧 Standard Installation\n\n```bash\n# Clone and copy to plugins directory\ngit clone https://github.com/QuickBox/rutorrent_hide-dotpaths.git\ncp -r rutorrent_hide-dotpaths /path/to/rutorrent/plugins/hide-dotpaths\n\n# Set permissions\nchmod 755 /path/to/rutorrent/plugins/hide-dotpaths/\nchmod 644 /path/to/rutorrent/plugins/hide-dotpaths/*.js\nchmod 644 /path/to/rutorrent/plugins/hide-dotpaths/*.php\nchmod 644 /path/to/rutorrent/plugins/hide-dotpaths/*.info\n```\n\n### 📦 Manual Installation\n\n1. Download from [GitHub Releases](https://github.com/QuickBox/rutorrent_hide-dotpaths/releases)\n2. Extract and copy to ruTorrent plugins directory\n3. Set permissions as shown above\n\n---\n\n## ⚙️ Configuration\n\nEdit `conf.php` to customize behavior:\n\n```php\n\u003c?php\n// Main settings\n$hide_dotpaths = true;           // Enable/disable plugin\n$filter_selects = true;          // Filter \u003cselect\u003e dropdowns\n$filter_modals = true;           // Filter modal file browsers\n$filter_autocomplete = true;     // Filter autocomplete dropdowns\n$filter_ajax = true;             // Filter AJAX responses\n$filter_filemanager = true;      // Filter filemanager plugin table rows\n$preserve_parent_dirs = true;    // Keep \"..\" parent directory references\n$debug_mode = false;             // Enable debug logging\n$apply_filemanager_patch = true; // Apply server-side filemanager patch\n\n// Advanced debug settings\n$debug_scopes = 'general,filter';   // Debug scopes: general,filter,patch,cache,performance,all\n$debug_rate_limit = 2000;           // Rate limit in milliseconds\n$debug_deduplication_window = 5000; // Deduplication window in milliseconds\n$debug_enable_internal = false;     // Enable internal cache debugging\n?\u003e\n```\n\n### 📊 Configuration Options\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `$hide_dotpaths` | `true` | Main enable/disable switch |\n| `$filter_selects` | `true` | Filter `\u003cselect\u003e` dropdowns |\n| `$filter_modals` | `true` | Filter modal file browsers |\n| `$filter_autocomplete` | `true` | Filter autocomplete dropdowns |\n| `$filter_ajax` | `true` | Filter AJAX responses |\n| `$filter_filemanager` | `true` | Filter filemanager plugin table rows |\n| `$preserve_parent_dirs` | `true` | Keep `..` parent directory references |\n| `$debug_mode` | `false` | Enable debug logging |\n| `$apply_filemanager_patch` | `true` | Apply server-side filemanager patch |\n| `$debug_scopes` | `'general,filter'` | Comma-separated debug scopes |\n| `$debug_rate_limit` | `2000` | Rate limit in milliseconds |\n| `$debug_deduplication_window` | `5000` | Deduplication window in milliseconds |\n| `$debug_enable_internal` | `false` | Enable internal cache debugging |\n\n---\n\n## 🔧 Debug System\n\n### Debug Scopes\n- `general`: Default scope for general messages\n- `filter`: Filtering-related messages\n- `patch`: Filemanager patch messages\n- `cache`: Cache operation messages\n- `performance`: Performance and timing messages\n- `all`: Enable all scopes\n\n### Usage Examples\n\n```javascript\n// Get debug statistics\nconst stats = window.getDebugStats();\nconsole.log('Deduplication rate:', stats.skippedDuplicates / stats.totalCalls);\n\n// Test the deduplication system\nwindow.testAdvancedDebug();\n\n// Clear debug cache manually\nwindow.clearDebugCache();\n```\n\n### Advanced Configuration\n\n```php\n// Enable specific scopes\n$debug_scopes = 'general,filter,performance';\n\n// Set custom rate limit (2 seconds)\n$debug_rate_limit = 2000;\n\n// Set deduplication window (5 seconds)\n$debug_deduplication_window = 5000;\n\n// Enable internal cache debugging\n$debug_enable_internal = true;\n```\n\n\n\n## 🧪 Testing\n\n### Enable Debug Mode\n\n```php\n$debug_mode = true;\n```\n\n### Test Dual Protection\n\n```javascript\n// Test client-side filtering\ntestHideDotpaths();\n\n// Check if filemanager patch is applied\nconsole.log('Filemanager patch applied:', window.flm?.settings?.getSettingValue('showhidden') === false);\n```\n\n### Manual Testing\n\nOpen browser console and run:\n\n```javascript\ntestHideDotpaths();\n```\n\n---\n\n## 📋 Compatibility\n\n- **ruTorrent v5.2+** - Full support with enhanced features (tested:confirmed)\n- **All browsers** - Modern browser support (ES6+)\n- **QuickBox Pro v3** - Full integration support\n- **Filemanager Plugin** - Compatible with filemanager plugin\n\n---\n\n## 🛠️ Troubleshooting\n\n### ❗ Common Problems\n\n#### 🔌 Plugin Not Working\n- **Problem**: Plugin doesn't filter dot-prefixed directories\n- **Solution**: Check if plugin is enabled in ruTorrent Settings → Plugins\n- **Check**: Verify file permissions and browser console for errors\n\n#### 👁️ Still Seeing Dot-Prefixed Directories\n- **Problem**: Dot-prefixed directories still visible after installation\n- **Solution**: Refresh the page and clear browser cache\n- **Check**: Verify configuration in `conf.php` and enable debug mode\n\n#### ⚡ Performance Issues\n- **Problem**: Plugin causes performance issues or slow loading\n- **Solution**: Reduce cleanup frequency or disable unused filters\n- **Check**: Monitor browser performance and check for conflicts\n\n### 🔧 Debug Mode\n\n```php\n$debug_mode = true;\n$debug_enable_internal = true;  // For detailed cache debugging\n```\n\n### 📊 Performance Optimization\n\n```php\n// Reduce debug output\n$debug_rate_limit = 5000;           // 5 seconds between logs\n$debug_deduplication_window = 10000; // 10 seconds deduplication\n\n// Disable unused filters\n$filter_ajax = false;               // If not using AJAX dropdowns\n$filter_autocomplete = false;       // If not using autocomplete\n```\n\n---\n\n## 🏗️ Architecture\n\n```\nPlugin Structure\n├── init.js          # Main plugin logic (623 lines)\n├── conf.php         # Configuration (58 lines)\n├── debug-utils.js   # Advanced debug utilities (330 lines)\n├── debug-cache.js   # Smart debug logging cache (119 lines)\n├── plugin.info      # Plugin metadata\n├── lang/            # Multi-language support (7 languages)\n├── LICENSE          # GPL v3 license\n└── README.md        # This documentation\n```\n\n### Key Components\n\n- **MutationObserver** - Real-time element interception\n- **Event Listeners** - Real-time DOM monitoring\n- **Advanced Debug System** - Intelligent logging with deduplication\n- **Configuration System** - Flexible settings management\n- **Multi-Language Support** - Internationalization for 7 languages\n\n\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n---\n\n## 📄 License\n\n\u003cdiv align=\"center\"\u003e\n\n[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg?style=for-the-badge)](https://www.gnu.org/licenses/gpl-3.0.html)\n\n[GNU General Public License v3.0](LICENSE)\n\n\u003c/div\u003e\n\nThis project is licensed under the GNU General Public License v3.0.\n\n**Parent Software:**\n- **ruTorrent** - Copyright (C) 2009 novik65@gmail.com\n- **License**: GNU General Public License v3.0\n\n---\n\n## 🙏 Acknowledgments\n\n\u003cdiv align=\"center\"\u003e\n\n**Made with ❤️ by the QuickBox Team**\n\n\u003c/div\u003e\n\n- **🏗️ QuickBox Team**: For the amazing QuickBox Pro v3 framework\n- **🎭 ruTorrent Team**: For the excellent plugin system\n- **👥 Community**: For feedback, testing, and contributions\n\n---\n\n## 🆘 Support\n\n\u003cdiv align=\"center\"\u003e\n\n[![Discord](https://img.shields.io/badge/Discord-Join%20Community-7289DA?style=for-the-badge\u0026logo=discord\u0026logoColor=7289DA)](https://discord.gg/mca7RSv5pa)\n[![GitHub Issues](https://img.shields.io/badge/GitHub-Report%20Issues-181717?style=for-the-badge\u0026logo=github)](https://github.com/QuickBox/rutorrent_hide-dotpaths/issues)\n[![Documentation](https://img.shields.io/badge/Documentation-Read-blue?style=for-the-badge\u0026logo=book)](https://github.com/QuickBox/rutorrent_hide-dotpaths#-table-of-contents)\n\n\u003c/div\u003e\n\n- **💬 Community**: Join the [QuickBox Community](https://discord.gg/mca7RSv5pa)\n- **🐛 Issues**: Report bugs on [GitHub Issues](https://github.com/QuickBox/rutorrent_hide-dotpaths/issues)\n- **📖 Documentation**: This README and inline code comments\n\n**Version:** 2.5.210\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n[⬆️ Back to Top](#rutorrent-hide-dotpaths-plugin)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquickbox%2Frutorrent_hide-dotpaths","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquickbox%2Frutorrent_hide-dotpaths","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquickbox%2Frutorrent_hide-dotpaths/lists"}