2022-12-30 19:25:28 +01:00
< ? php declare ( strict_types = 1 );
2020-07-10 13:39:56 +02:00
/**
* Snitch module .
*
* This file is part of MadelineProto .
* MadelineProto is free software : you can redistribute it and / or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation , either version 3 of the License , or ( at your option ) any later version .
* MadelineProto is distributed in the hope that it will be useful , but WITHOUT ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
* See the GNU Affero General Public License for more details .
* You should have received a copy of the GNU General Public License along with MadelineProto .
* If not , see < http :// www . gnu . org / licenses />.
*
* @ author Daniil Gentili < daniil @ daniil . it >
* @ copyright 2016 - 2020 Daniil Gentili < daniil @ daniil . it >
* @ license https :// opensource . org / licenses / AGPL - 3.0 AGPLv3
* @ link https :// docs . madelineproto . xyz MadelineProto documentation
*/
namespace danog\MadelineProto ;
2022-12-30 19:21:36 +01:00
use const DIRECTORY_SEPARATOR ;
use const HAD_MADELINE_PHAR ;
2020-07-10 13:39:56 +02:00
/**
* Snitch .
*/
class Snitch
{
/**
* Maximum starts without a phar file .
*/
const MAX_NO_PHAR_STARTS = 3 ;
/**
* Whether madeline . phar was downloaded from scratch .
*/
private array $hadInstalled = [];
/**
* Called before serialization .
*
*/
2022-12-30 19:21:36 +01:00
public function __sleep () : array
2020-07-10 13:39:56 +02:00
{
2022-06-04 21:23:34 +02:00
return [ 'hadInstalled' ];
2020-07-10 13:39:56 +02:00
}
/**
* Wakeup function .
*/
2022-12-08 20:16:40 +01:00
public function __wakeup () : void
2020-07-10 13:39:56 +02:00
{
2020-10-04 14:55:05 +02:00
if ( \defined ( 'HAD_MADELINE_PHAR' )) {
2022-12-30 19:21:36 +01:00
$this -> hadInstalled [] = HAD_MADELINE_PHAR ;
2020-07-10 13:39:56 +02:00
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 .
*/
private function die () : void
{
2020-07-11 20:01:54 +02:00
Shutdown :: removeCallback ( 'restarter' );
2022-06-04 21:23:34 +02:00
$message = " Please do not remove madeline.phar or madeline.php, 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 " ;
2020-07-11 20:01:54 +02:00
Logger :: log ( $message , Logger :: FATAL_ERROR );
2021-04-10 22:38:26 +02:00
\file_put_contents ( Magic :: $cwd . DIRECTORY_SEPARATOR . 'DO_NOT_REMOVE_MADELINEPROTO_LOG_SESSION' , $message );
2020-07-11 20:01:54 +02:00
die ( " $message\n " );
2020-07-10 13:39:56 +02:00
}
}