One Hat Cyber Team
Your IP :
216.73.217.131
Server IP :
185.33.55.30
Server :
Linux cl30.webspacecontrol.com 5.14.0-611.38.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 10 17:21:28 EDT 2026 x86_64
Server Software :
Apache
PHP Version :
8.1.34
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
opt
/
cxs2
/
app
/
tasks
/
View File Name :
UpdateTask.php
<?php /** * UpdateTask, Update All Loginsssl Task * * @copyright Copyright (c) 2007 DotRoll Kft. (http://www.dotroll.com) * @author Zoltán Istvanovszki <zoltan.istvanovszki@dotroll.com> * @since 2018.02.14. * @package CXS_2.0 */ class UpdateTask extends \CommonTask { /** * Initialization */ public function onConstruct() { $this->lock(__CLASS__); } /** * Update Loginsssl Task * * @param string $hash Username */ public function mainAction(string $hash = '') { if (!empty($hash) && $hash != 'all') { if ($this->updateSingle($hash) === true) { $this->updateSoa(); } } else { if (empty($hash)) { echo 'Are you sure you want to update all [y/N]' . \PHP_EOL; if (\trim(\fgets(\STDIN)) == 'y' && $this->updateAll() === true) { $this->updateSoa(); } } elseif ($this->updateAll() === true) { $this->updateSoa(); } } } /** * Update Single Loginsssl Task * * @param string $username cPanel username * @return bool */ private function updateSingle(string $username): bool { if ($ip = $this->getCpanelIp($username)) { if ($record = \Records::find("name = '$username.loginssl.com'")->getFirst()) { if ($record->content != $ip) { $log = "Update: {$record->name} {$record->content} -> $ip"; $record->content = $ip; if ($record->save() === false) { $this->log("$log failed with message: " . \implode(\PHP_EOL, $record->getMessages())); } else { $this->log("$log success"); return true; } } } else { $record = new \Records(); $record->name = "$username.loginssl.com"; $record->content = $ip; if ($record->save() === false) { $this->log("Create: {$record->name} $ip failed with message: " . \implode(\PHP_EOL, $record->getMessages())); } else { $this->log("Create: {$record->name} $ip success"); return true; } } } return false; } /** * Update All Loginsssl Task * * @return bool */ private function updateAll(): bool { die('Not here, try to use cPadmin CLI'); $records = $this->getRecords(); $needSoaUpdate = false; foreach (\Records::find("type = 'A'") as $record) { $username = \substr($record->name, 0, -13); if (!isset($records[$username])) { if ($record->delete() === false) { $this->log("Delete: {$record->name} failed with message: " . \implode(\PHP_EOL, $record->getMessages())); } else { $this->log("Delete: {$record->name} success"); $needSoaUpdate = true; } } elseif ($records[$username]['ip'] != $record->content) { $log = "Update: {$record->name} {$record->content} -> {$records[$username]['ip']}"; $record->content = $records[$username]['ip']; if ($record->save() === false) { $this->log("$log failed with message: " . \implode(\PHP_EOL, $record->getMessages())); } else { $this->log("$log success"); $needSoaUpdate = true; } unset($records[$username]); } else { unset($records[$username]); } } foreach ($records as $name => $content) { $record = new \Records(); $record->name = "$name.loginssl.com"; $record->content = $content['ip']; if ($record->save() === false) { $this->log("Create: {$record->name} {$record->content} failed with message: " . \implode(\PHP_EOL, $record->getMessages())); } else { $this->log("Create: {$record->name} {$record->content} success"); $needSoaUpdate = true; } } return $needSoaUpdate; } /** * Get reserverd hosts data * * @return array */ private function getReservation(): array { $records = []; foreach ($this->di->get('config')->reservation as $zone => $ip) { $records[$zone] = [ 'unix_startdate' => \time(), 'ip' => $ip, 'suspended' => false ]; } return $records; } /** * Get all cPanel hosts * * @return array */ private function getRecords(): array { $records = $this->getReservation(); foreach ($this->di->get('config')->cpanel->servers as $hostname) { $suspendedAccounts = $this->getSuspendedAccounts($hostname); foreach ($this->getAccounts($hostname) as $account) { if (!empty($account->ip) && !empty($account->user) && !empty($account->unix_startdate)) { $override = false; if (isset($records[$account->user])) { if ($records[$account->user]['suspended'] === true && \in_array($account->user, $suspendedAccounts) && $account->unix_startdate > $records[$account->user]['unix_startdate']) { $override = true; } elseif ($records[$account->user]['suspended'] === true && !\in_array($account->user, $suspendedAccounts)) { $override = true; } } else { $override = true; } if ($override === true) { $records[$account->user]['unix_startdate'] = $account->unix_startdate; $records[$account->user]['ip'] = $account->ip; $records[$account->user]['suspended'] = \in_array($account->user, $suspendedAccounts) ? true : false; } } } } return $records; } /** * Get accounts * * @param string $hostname cPanel hostname * @return array */ private function getAccounts(string $hostname): array { $accounts = []; $result = $this->cpanelJson($hostname, 'listaccts'); if (!empty($result->acct)) { foreach ($result->acct as $account) { $accounts[] = $account; } } return $accounts; } /** * Get suspended accounts * * @param string $hostname cPanel hostname * @return array */ private function getSuspendedAccounts(string $hostname): array { $suspendedAccounts = []; $result = $this->cpanelJson($hostname, 'listsuspended'); if (!empty($result->accts)) { foreach ($result->accts as $account) { if (!empty($account->user)) { $suspendedAccounts[] = $account->user; } } } return $suspendedAccounts; } }