Skip to main content

sherlock_io/patterns/
php.rs

1use regex::Regex;
2
3pub struct PhpPatterns {
4    external_patterns: Vec<Regex>,
5    cache_patterns: Vec<Regex>,
6    extensions: Vec<String>,
7}
8
9impl PhpPatterns {
10    pub fn new() -> Self {
11        let external_patterns = vec![
12            // Composer
13            Regex::new(r"vendor/").unwrap(),
14            Regex::new(r"composer\.lock").unwrap(),
15            Regex::new(r"composer\.phar").unwrap(),
16            
17            // PEAR
18            Regex::new(r"\.pear/").unwrap(),
19            
20            // Build artifacts
21            Regex::new(r"\.phar$").unwrap(),
22            
23            // Laravel specific
24            Regex::new(r"bootstrap/cache/").unwrap(),
25            Regex::new(r"storage/app/").unwrap(),
26            Regex::new(r"storage/framework/").unwrap(),
27            Regex::new(r"storage/logs/").unwrap(),
28            Regex::new(r"public/storage/").unwrap(),
29            
30            // Symfony specific
31            Regex::new(r"var/cache/").unwrap(),
32            Regex::new(r"var/logs/").unwrap(),
33            Regex::new(r"var/sessions/").unwrap(),
34            
35            // WordPress specific
36            Regex::new(r"wp-content/uploads/").unwrap(),
37            Regex::new(r"wp-content/cache/").unwrap(),
38            Regex::new(r"wp-content/backup/").unwrap(),
39            
40            // Drupal specific
41            Regex::new(r"sites/default/files/").unwrap(),
42            Regex::new(r"sites/default/private/").unwrap(),
43            
44            // Magento specific
45            Regex::new(r"var/cache/").unwrap(),
46            Regex::new(r"var/session/").unwrap(),
47            Regex::new(r"var/log/").unwrap(),
48            Regex::new(r"media/").unwrap(),
49            
50            // CodeIgniter specific
51            Regex::new(r"application/cache/").unwrap(),
52            Regex::new(r"application/logs/").unwrap(),
53            
54            // Yii specific
55            Regex::new(r"protected/runtime/").unwrap(),
56            Regex::new(r"assets/").unwrap(),
57            
58            // Zend specific
59            Regex::new(r"data/cache/").unwrap(),
60            Regex::new(r"data/logs/").unwrap(),
61            
62            // CakePHP specific
63            Regex::new(r"tmp/cache/").unwrap(),
64            Regex::new(r"tmp/logs/").unwrap(),
65            Regex::new(r"tmp/sessions/").unwrap(),
66            
67            // PHPUnit
68            Regex::new(r"\.phpunit\.result\.cache").unwrap(),
69            
70            // Codeception
71            Regex::new(r"tests/_output/").unwrap(),
72            
73            // Behat
74            Regex::new(r"behat\.yml").unwrap(),
75            
76            // Phing
77            Regex::new(r"build/").unwrap(),
78            
79            // Deployer
80            Regex::new(r"\.dep/").unwrap(),
81            
82            // IDE files
83            Regex::new(r"\.vscode/").unwrap(),
84            Regex::new(r"\.idea/").unwrap(),
85            Regex::new(r"\.sublime-").unwrap(),
86            
87            // OS files
88            Regex::new(r"\.DS_Store").unwrap(),
89            Regex::new(r"Thumbs\.db").unwrap(),
90            
91            // Backup files
92            Regex::new(r"\.bak$").unwrap(),
93            Regex::new(r"\.swp$").unwrap(),
94            Regex::new(r"\.swo$").unwrap(),
95            Regex::new(r"~$").unwrap(),
96            
97            // Log files
98            Regex::new(r"\.log$").unwrap(),
99            Regex::new(r"error_log").unwrap(),
100            
101            // Session files
102            Regex::new(r"sess_").unwrap(),
103            
104            // Temporary files
105            Regex::new(r"\.tmp$").unwrap(),
106            Regex::new(r"\.temp$").unwrap(),
107            
108            // Upload directories
109            Regex::new(r"uploads/").unwrap(),
110            
111            // Cache directories
112            Regex::new(r"cache/").unwrap(),
113            
114            // Config files with sensitive data
115            Regex::new(r"\.env$").unwrap(),
116            Regex::new(r"\.env\.local$").unwrap(),
117            
118            // Database files
119            Regex::new(r"\.sqlite$").unwrap(),
120            Regex::new(r"\.db$").unwrap(),
121            
122            // Compiled templates
123            Regex::new(r"\.twig\.cache").unwrap(),
124            Regex::new(r"\.smarty\.cache").unwrap(),
125            
126            // Minified files
127            Regex::new(r"\.min\.js$").unwrap(),
128            Regex::new(r"\.min\.css$").unwrap(),
129            
130            // Source maps
131            Regex::new(r"\.map$").unwrap(),
132            
133            // Bower
134            Regex::new(r"bower_components/").unwrap(),
135            
136            // Node modules (for frontend)
137            Regex::new(r"node_modules/").unwrap(),
138            
139            // NPM
140            Regex::new(r"package-lock\.json").unwrap(),
141            
142            // Yarn
143            Regex::new(r"yarn\.lock").unwrap(),
144            
145            // Docker
146            Regex::new(r"\.dockerignore").unwrap(),
147            
148            // Vagrant
149            Regex::new(r"\.vagrant/").unwrap(),
150            
151            // Homestead
152            Regex::new(r"Homestead\.yaml").unwrap(),
153            Regex::new(r"Homestead\.json").unwrap(),
154            
155            // Valet
156            Regex::new(r"\.valet/").unwrap(),
157            
158            // MAMP
159            Regex::new(r"\.mamp/").unwrap(),
160            
161            // XAMPP
162            Regex::new(r"\.xampp/").unwrap(),
163            
164            // WampServer
165            Regex::new(r"\.wamp/").unwrap(),
166            
167            // PhpStorm
168            Regex::new(r"\.phpstorm\.meta\.php").unwrap(),
169            
170            // NetBeans
171            Regex::new(r"nbproject/").unwrap(),
172            
173            // Eclipse
174            Regex::new(r"\.buildpath").unwrap(),
175            Regex::new(r"\.project").unwrap(),
176            Regex::new(r"\.settings/").unwrap(),
177            
178            // Aptana
179            Regex::new(r"\.aptana/").unwrap(),
180        ];
181
182        let cache_patterns = vec![
183            // Composer cache
184            Regex::new(r"vendor/").unwrap(),
185            
186            // Framework caches
187            Regex::new(r"bootstrap/cache/").unwrap(),
188            Regex::new(r"storage/framework/cache/").unwrap(),
189            Regex::new(r"storage/framework/sessions/").unwrap(),
190            Regex::new(r"storage/framework/views/").unwrap(),
191            Regex::new(r"var/cache/").unwrap(),
192            Regex::new(r"tmp/cache/").unwrap(),
193            Regex::new(r"application/cache/").unwrap(),
194            Regex::new(r"protected/runtime/").unwrap(),
195            Regex::new(r"data/cache/").unwrap(),
196            
197            // Test caches
198            Regex::new(r"\.phpunit\.result\.cache").unwrap(),
199            Regex::new(r"tests/_output/").unwrap(),
200            
201            // Log files
202            Regex::new(r"storage/logs/").unwrap(),
203            Regex::new(r"var/logs/").unwrap(),
204            Regex::new(r"tmp/logs/").unwrap(),
205            Regex::new(r"application/logs/").unwrap(),
206            Regex::new(r"data/logs/").unwrap(),
207            Regex::new(r"\.log$").unwrap(),
208            Regex::new(r"error_log").unwrap(),
209            
210            // Session files
211            Regex::new(r"storage/framework/sessions/").unwrap(),
212            Regex::new(r"var/sessions/").unwrap(),
213            Regex::new(r"tmp/sessions/").unwrap(),
214            Regex::new(r"sess_").unwrap(),
215            
216            // Temporary files
217            Regex::new(r"\.tmp$").unwrap(),
218            Regex::new(r"\.temp$").unwrap(),
219            
220            // IDE caches
221            Regex::new(r"\.vscode/").unwrap(),
222            Regex::new(r"\.idea/").unwrap(),
223            
224            // OS caches
225            Regex::new(r"\.DS_Store").unwrap(),
226            Regex::new(r"Thumbs\.db").unwrap(),
227            
228            // Editor files
229            Regex::new(r"\.swp$").unwrap(),
230            Regex::new(r"\.swo$").unwrap(),
231            Regex::new(r"~$").unwrap(),
232            
233            // Build artifacts
234            Regex::new(r"build/").unwrap(),
235            
236            // Upload directories
237            Regex::new(r"uploads/").unwrap(),
238            
239            // Media directories
240            Regex::new(r"media/").unwrap(),
241            
242            // Assets
243            Regex::new(r"assets/").unwrap(),
244            
245            // Public storage
246            Regex::new(r"public/storage/").unwrap(),
247            
248            // Compiled templates
249            Regex::new(r"\.twig\.cache").unwrap(),
250            Regex::new(r"\.smarty\.cache").unwrap(),
251            
252            // Frontend build artifacts
253            Regex::new(r"node_modules/").unwrap(),
254            Regex::new(r"bower_components/").unwrap(),
255            
256            // Minified files
257            Regex::new(r"\.min\.js$").unwrap(),
258            Regex::new(r"\.min\.css$").unwrap(),
259            
260            // Source maps
261            Regex::new(r"\.map$").unwrap(),
262        ];
263
264        let extensions = vec![
265            // PHP files
266            "php".to_string(), "php3".to_string(), "php4".to_string(),
267            "php5".to_string(), "php7".to_string(), "php8".to_string(),
268            "phtml".to_string(), "phps".to_string(),
269            
270            // PHP archives
271            "phar".to_string(),
272            
273            // Template files
274            "twig".to_string(), "blade".to_string(),
275            "smarty".to_string(), "tpl".to_string(),
276            
277            // Configuration files
278            "ini".to_string(), "conf".to_string(),
279            
280            // YAML (common in PHP projects)
281            "yml".to_string(), "yaml".to_string(),
282            
283            // JSON (common in PHP projects)
284            "json".to_string(),
285            
286            // XML (common in PHP projects)
287            "xml".to_string(),
288            
289            // Markdown
290            "md".to_string(), "markdown".to_string(),
291            
292            // SQL
293            "sql".to_string(),
294            
295            // Web files
296            "html".to_string(), "htm".to_string(),
297            "css".to_string(), "js".to_string(),
298            
299            // Environment files
300            "env".to_string(),
301            
302            // Lock files
303            "lock".to_string(),
304            
305            // Log files
306            "log".to_string(),
307            
308            // Backup files
309            "bak".to_string(), "backup".to_string(),
310        ];
311
312        Self {
313            external_patterns,
314            cache_patterns,
315            extensions,
316        }
317    }
318
319    pub fn get_external_patterns(&self) -> &[Regex] {
320        &self.external_patterns
321    }
322
323    pub fn get_cache_patterns(&self) -> &[Regex] {
324        &self.cache_patterns
325    }
326
327    pub fn get_extensions(&self) -> &[String] {
328        &self.extensions
329    }
330
331    pub fn get_script_names() -> Vec<&'static str> {
332        vec![
333            // Composer
334            "composer.json", "composer.lock", "composer.phar",
335            
336            // PHP configuration
337            "php.ini", ".htaccess", "web.config",
338            
339            // Laravel
340            "artisan", ".env", ".env.example", ".env.local",
341            "server.php", "webpack.mix.js", "vite.config.js",
342            
343            // Symfony
344            "symfony", "console", "bin/console",
345            
346            // WordPress
347            "wp-config.php", "wp-config-sample.php",
348            "wp-load.php", "wp-settings.php",
349            "functions.php", "style.css", "index.php",
350            
351            // Drupal
352            "settings.php", "settings.local.php",
353            "services.yml", "routing.yml",
354            
355            // Magento
356            "app/etc/config.xml", "app/etc/local.xml",
357            "index.php", "cron.php",
358            
359            // CodeIgniter
360            "index.php", "config/config.php",
361            "config/database.php", "config/routes.php",
362            
363            // Yii
364            "index.php", "protected/config/main.php",
365            "protected/config/console.php",
366            
367            // Zend
368            "index.php", "application/configs/application.ini",
369            "public/index.php",
370            
371            // CakePHP
372            "index.php", "app/Config/core.php",
373            "app/Config/database.php",
374            
375            // Build tools
376            "build.xml", "phing.xml", "Makefile",
377            "gulpfile.js", "Gruntfile.js",
378            
379            // Testing
380            "phpunit.xml", "phpunit.xml.dist",
381            "codeception.yml", "behat.yml",
382            ".phpunit.result.cache",
383            
384            // Code quality
385            ".php_cs", ".php_cs.dist", "phpcs.xml",
386            "phpcs.xml.dist", "phpmd.xml",
387            ".phpstan.neon", "psalm.xml",
388            
389            // Documentation
390            "README.md", "CHANGELOG.md", "LICENSE",
391            "CONTRIBUTING.md", "phpdoc.xml",
392            
393            // CI/CD
394            ".github/workflows/php.yml", ".travis.yml",
395            ".gitlab-ci.yml", "circle.yml", "appveyor.yml",
396            
397            // Docker
398            "Dockerfile", "docker-compose.yml", ".dockerignore",
399            
400            // Vagrant
401            "Vagrantfile", ".vagrant/",
402            
403            // Deployment
404            "deploy.php", "Capfile", "config/deploy.rb",
405            
406            // Environment
407            ".env", ".env.local", ".env.example",
408            ".env.development", ".env.production", ".env.testing",
409            
410            // Package managers
411            "package.json", "package-lock.json", "yarn.lock",
412            "bower.json", ".bowerrc",
413            
414            // Frontend build
415            "webpack.config.js", "webpack.mix.js",
416            "vite.config.js", "rollup.config.js",
417            
418            // IDE
419            ".vscode/", ".idea/", ".sublime-project",
420            
421            // Git
422            ".gitignore", ".gitattributes", ".gitmodules",
423            
424            // Editors
425            ".editorconfig", ".eslintrc", ".prettierrc",
426            
427            // Security
428            ".htaccess", ".htpasswd", "robots.txt",
429            
430            // Database
431            "schema.sql", "migrations/", "seeds/",
432            
433            // API
434            "api.php", "routes/api.php", "swagger.json",
435            "openapi.json", "postman.json",
436            
437            // Caching
438            "redis.conf", "memcached.conf",
439            
440            // Web server
441            "nginx.conf", "apache.conf", ".htaccess",
442            
443            // SSL
444            "ssl.conf", "certificate.pem", "private.key",
445            
446            // Monitoring
447            "newrelic.ini", "blackfire.ini",
448            
449            // Logging
450            "monolog.yml", "log4php.xml",
451            
452            // Localization
453            "locale/", "lang/", "resources/lang/",
454            
455            // Assets
456            "public/", "assets/", "resources/",
457            
458            // Storage
459            "storage/", "var/", "tmp/", "temp/",
460            
461            // Uploads
462            "uploads/", "files/", "media/",
463            
464            // Cache
465            "cache/", "tmp/cache/", "var/cache/",
466            
467            // Sessions
468            "sessions/", "tmp/sessions/", "var/sessions/",
469            
470            // Logs
471            "logs/", "log/", "var/logs/",
472            
473            // Backups
474            "backups/", "backup/", "dumps/",
475            
476            // Vendor
477            "vendor/", "lib/", "libraries/",
478            
479            // Plugins
480            "plugins/", "modules/", "extensions/",
481            
482            // Themes
483            "themes/", "templates/", "views/",
484            
485            // Config
486            "config/", "configs/", "configuration/",
487            
488            // Scripts
489            "scripts/", "bin/", "tools/",
490            
491            // Tests
492            "tests/", "test/", "spec/",
493            
494            // Fixtures
495            "fixtures/", "seeds/", "factories/",
496            
497            // Mocks
498            "mocks/", "stubs/", "fakes/",
499            
500            // Documentation
501            "docs/", "doc/", "documentation/",
502            
503            // Examples
504            "examples/", "samples/", "demo/",
505            
506            // Build
507            "build/", "dist/", "release/",
508            
509            // Deploy
510            "deploy/", "deployment/", "releases/",
511        ]
512    }
513}