Linux server1.hosting4iran.com 4.18.0-553.123.2.el8_10.x86_64 #1 SMP Thu May 7 15:28:41 EDT 2026 x86_64
LiteSpeed
Server IP : 185.208.174.156 & Your IP : 216.73.216.67
Domains : 318 Domain
User : satitravel
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
opt /
cpanel /
ea-wappspector /
src /
Matchers /
Delete
Unzip
Name
Size
Permission
Date
Action
CakePHP.php
1.02
KB
-rw-r--r--
2026-05-18 19:25
CodeIgniter.php
1.14
KB
-rw-r--r--
2026-05-18 19:25
Composer.php
1.09
KB
-rw-r--r--
2026-05-18 19:25
DotNet.php
1.05
KB
-rw-r--r--
2026-05-18 19:25
Drupal.php
1.63
KB
-rw-r--r--
2026-05-18 19:25
Duda.php
1.72
KB
-rw-r--r--
2026-05-18 19:25
EmDash.php
813
B
-rw-r--r--
2026-05-18 19:25
Joomla.php
3.79
KB
-rw-r--r--
2026-05-18 19:25
Laravel.php
1.9
KB
-rw-r--r--
2026-05-18 19:25
MatcherInterface.php
343
B
-rw-r--r--
2026-05-18 19:25
NodeJs.php
866
B
-rw-r--r--
2026-05-18 19:25
Php.php
1.07
KB
-rw-r--r--
2026-05-18 19:25
Prestashop.php
1.41
KB
-rw-r--r--
2026-05-18 19:25
Python.php
742
B
-rw-r--r--
2026-05-18 19:25
Ruby.php
713
B
-rw-r--r--
2026-05-18 19:25
Sitejet.php
976
B
-rw-r--r--
2026-05-18 19:25
Siteplus.php
1.79
KB
-rw-r--r--
2026-05-18 19:25
Sitepro.php
980
B
-rw-r--r--
2026-05-18 19:25
Symfony.php
905
B
-rw-r--r--
2026-05-18 19:25
Typo3.php
1.77
KB
-rw-r--r--
2026-05-18 19:25
UpLevelMatcherTrait.php
982
B
-rw-r--r--
2026-05-18 19:25
WebPresenceBuilder.php
1.97
KB
-rw-r--r--
2026-05-18 19:25
Wordpress.php
1.48
KB
-rw-r--r--
2026-05-18 19:25
Yii.php
1.64
KB
-rw-r--r--
2026-05-18 19:25
Save
Rename
<?php namespace Plesk\Wappspector\Matchers; use League\Flysystem\Filesystem; use League\Flysystem\FilesystemException; use Plesk\Wappspector\MatchResult\EmptyMatchResult; use Plesk\Wappspector\MatchResult\Joomla as MatchResult; use Plesk\Wappspector\MatchResult\MatchResultInterface; class Joomla implements MatcherInterface { private const CONFIG_FILE = 'configuration.php'; /** * Joomla has changed the way how the version number is stored multiple times, so we need this comprehensive array */ private const VERSION = [ "files" => [ "/includes/version.php", "/libraries/joomla/version.php", "/libraries/cms/version/version.php", "/libraries/src/Version.php", ], "regex_release" => "/\\\$?RELEASE\s*=\s*'([\d.]+)';/", "regex_devlevel" => "/\\\$?DEV_LEVEL\s*=\s*'([^']+)';/", "regex_major" => "/\\\$?MAJOR_VERSION\s*=\s*([\d.]+);/", "regex_minor" => "/\\\$?MINOR_VERSION\s*=\s*([\d.]+);/", "regex_patch" => "/\\\$?PATCH_VERSION\s*=\s*([\d.]+);/", ]; /** * @throws FilesystemException */ private function isJoomla(Filesystem $fs, string $path): bool { $configFile = rtrim($path, '/') . '/' . self::CONFIG_FILE; if (!$fs->fileExists($configFile)) { return false; } $configContents = $fs->read($configFile); if ( stripos($configContents, 'JConfig') === false && stripos($configContents, 'mosConfig') === false ) { return false; } // False positive "Akeeba Backup Installer" if (stripos($configContents, 'class ABIConfiguration') !== false) { return false; } // False positive mock file in unit test folder if (stripos($configContents, 'Joomla.UnitTest') !== false) { return false; } // False positive mock file in unit test folder return stripos($configContents, "Joomla\Framework\Test") === false; } /** * @throws FilesystemException */ private function detectVersion(Filesystem $fs, string $path): ?string { // Iterate through version files foreach (self::VERSION['files'] as $file) { $versionFile = rtrim($path, '/') . '/' . $file; if (!$fs->fileExists($versionFile)) { continue; } $fileContents = $fs->read($versionFile); preg_match(self::VERSION['regex_major'], $fileContents, $major); preg_match(self::VERSION['regex_minor'], $fileContents, $minor); preg_match(self::VERSION['regex_patch'], $fileContents, $patch); if (count($major) && count($minor) && count($patch)) { return $major[1] . '.' . $minor[1] . '.' . $patch[1]; } if (count($major) && count($minor)) { return $major[1] . '.' . $minor[1] . 'x'; } if ($major !== []) { return $major[1] . '.x.x'; } // Legacy handling for all version < 3.8.0 preg_match(self::VERSION['regex_release'], $fileContents, $release); preg_match(self::VERSION['regex_devlevel'], $fileContents, $devlevel); if (count($release) && count($devlevel)) { return $release[1] . '.' . $devlevel[1]; } if ($release !== []) { return $release[1] . '.x'; } } return null; } /** * @throws FilesystemException */ public function match(Filesystem $fs, string $path): MatchResultInterface { if (!$this->isJoomla($fs, $path)) { return new EmptyMatchResult(); } return new MatchResult($path, $this->detectVersion($fs, $path)); } }