From bd07a2b4b995c144cddbedb16c3f6cec428044a3 Mon Sep 17 00:00:00 2001 From: Daniil Gentili Date: Fri, 10 Jul 2020 13:39:56 +0200 Subject: [PATCH] Add missing files --- src/danog/MadelineProto/Snitch.php | 113 +++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/danog/MadelineProto/Snitch.php diff --git a/src/danog/MadelineProto/Snitch.php b/src/danog/MadelineProto/Snitch.php new file mode 100644 index 00000000..de1d6ea5 --- /dev/null +++ b/src/danog/MadelineProto/Snitch.php @@ -0,0 +1,113 @@ +. + * + * @author Daniil Gentili + * @copyright 2016-2020 Daniil Gentili + * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 + * + * @link https://docs.madelineproto.xyz MadelineProto documentation + */ + +namespace danog\MadelineProto; + +/** + * Snitch. + */ +class Snitch +{ + /** + * Maximum starts without a phar file. + */ + const MAX_NO_PHAR_STARTS = 3; + /** + * Maximum starts without a logfile. + */ + const MAX_NO_LOG_STARTS = 3; + + /** + * Whether madeline.phar was downloaded from scratch. + */ + private array $hadInstalled = []; + /** + * Whether logs were enabled. + */ + private array $hadLog = []; + + /** + * Whether we currently have a logfile. + */ + private static bool $hasLog = true; + /** + * Whether we checked the logfile. + */ + private static int $snitchedLog = 0; + + /** + * Snitch on logfile. + * + * @param string $file Logfile + * + * @return void + */ + public static function logFile(string $file) + { + if (self::$snitchedLog) { + return; + } + self::$snitchedLog = 1; + \clearstatcache(true, $file); + self::$hasLog = \file_exists($file); + } + /** + * Called before serialization. + * + * @return array + */ + public function __sleep() + { + if (self::$snitchedLog === 1) { + $this->hadLog []= self::$hasLog; + if (\count($this->hadLog) > self::MAX_NO_LOG_STARTS) { + \array_shift($this->hadLog); + if (!\array_sum($this->hadLog)) { // For three times, MadelineProto was started with no logfile + $this->die(); + } + } + self::$snitchedLog++; + } + return ['hadInstalled', 'hadLog']; + } + /** + * Wakeup function. + */ + public function __wakeup() + { + if (\defined(\HAD_MADELINE_PHAR::class)) { + $this->hadInstalled []= \HAD_MADELINE_PHAR; + if (\count($this->hadInstalled) > self::MAX_NO_PHAR_STARTS) { + \array_shift($this->hadInstalled); + if (!\array_sum($this->hadInstalled)) { // For three times, MadelineProto was started with no phar file + $this->die(); + } + } + } + } + + /** + * Die. + * + * @return void + */ + private function die(): void + { + die('Please do not remove madeline.phar, madeline.php and MadelineProto.log, or else MadelineProto will crash. If you have any problem with MadelineProto, report it to https://github.com/danog/MadelineProto or https://t.me/pwrtelegramgroup'); + } +}