Applied fixes from StyleCI
This commit is contained in:
parent
4a8826bdad
commit
36c69a5dd8
@ -1,9 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace danog\MadelineProto;
|
namespace danog\MadelineProto;
|
||||||
|
|
||||||
class API {
|
class API
|
||||||
|
{
|
||||||
public $session;
|
public $session;
|
||||||
public function __construct($login, $params = []) {
|
|
||||||
|
public function __construct($login, $params = [])
|
||||||
|
{
|
||||||
$this->session = new Session($params);
|
$this->session = new Session($params);
|
||||||
$this->session->create_auth_key();
|
$this->session->create_auth_key();
|
||||||
$future_salts = $this->session->method_call('get_future_salts', 3);
|
$future_salts = $this->session->method_call('get_future_salts', 3);
|
||||||
@ -14,7 +18,9 @@ class API {
|
|||||||
{
|
{
|
||||||
unset($this->session);
|
unset($this->session);
|
||||||
}
|
}
|
||||||
public function __call($name, $arguments) {
|
|
||||||
|
public function __call($name, $arguments)
|
||||||
|
{
|
||||||
return $session->method_call($name, $arguments);
|
return $session->method_call($name, $arguments);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace danog\MadelineProto;
|
namespace danog\MadelineProto;
|
||||||
|
|
||||||
class Exception extends \Exception {
|
class Exception extends \Exception
|
||||||
|
{
|
||||||
public function __construct($message, $code = 0, Exception $previous = null)
|
public function __construct($message, $code = 0, Exception $previous = null)
|
||||||
{
|
{
|
||||||
// some code
|
// some code
|
||||||
|
@ -4,7 +4,9 @@ set_include_path(get_include_path().PATH_SEPARATOR.dirname(__FILE__).DIRECTORY_S
|
|||||||
require_once 'libpy2php.php';
|
require_once 'libpy2php.php';
|
||||||
|
|
||||||
require_once 'os.php';
|
require_once 'os.php';
|
||||||
|
|
||||||
namespace danog\MadelineProto;
|
namespace danog\MadelineProto;
|
||||||
|
|
||||||
class TlConstructor
|
class TlConstructor
|
||||||
{
|
{
|
||||||
public function __construct($json_dict)
|
public function __construct($json_dict)
|
||||||
@ -100,6 +102,7 @@ class TL
|
|||||||
foreach ($tl_method->params as $arg) {
|
foreach ($tl_method->params as $arg) {
|
||||||
$bytes_io .= $this->serialize_param($arg['type'], $kwargs[$arg['name']]);
|
$bytes_io .= $this->serialize_param($arg['type'], $kwargs[$arg['name']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $bytes_io;
|
return $bytes_io;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,12 +116,14 @@ class TL
|
|||||||
if (!(strlen(decbin($value)) <= 32)) {
|
if (!(strlen(decbin($value)) <= 32)) {
|
||||||
throw new Exception('Given value is too long.');
|
throw new Exception('Given value is too long.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->struct->pack('<i', $value);
|
return $this->struct->pack('<i', $value);
|
||||||
break;
|
break;
|
||||||
case 'long':
|
case 'long':
|
||||||
if (!is_numeric($value)) {
|
if (!is_numeric($value)) {
|
||||||
throw new Exception("serialize_param: given value isn't numeric");
|
throw new Exception("serialize_param: given value isn't numeric");
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->struct->pack('<q', $value);
|
return $this->struct->pack('<q', $value);
|
||||||
break;
|
break;
|
||||||
case 'int128':
|
case 'int128':
|
||||||
@ -126,6 +131,7 @@ class TL
|
|||||||
if (!is_string($value)) {
|
if (!is_string($value)) {
|
||||||
throw new Exception("serialize_param: given value isn't a string");
|
throw new Exception("serialize_param: given value isn't a string");
|
||||||
}
|
}
|
||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
break;
|
break;
|
||||||
case 'string':
|
case 'string':
|
||||||
@ -142,6 +148,7 @@ class TL
|
|||||||
$concat .= $value;
|
$concat .= $value;
|
||||||
$concat .= pack('@'.posmod(-$l, 4));
|
$concat .= pack('@'.posmod(-$l, 4));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $concat;
|
return $concat;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1,62 +1,73 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace danog\MadelineProto;
|
namespace danog\MadelineProto;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages connection to telegram servers.
|
* Manages connection to telegram servers.
|
||||||
*/
|
*/
|
||||||
class Connection
|
class connection
|
||||||
{
|
{
|
||||||
private $sock = null;
|
private $sock = null;
|
||||||
private $protocol = null;
|
private $protocol = null;
|
||||||
public function __construct($ip, $port, $protocol = 'tcp') {
|
|
||||||
|
public function __construct($ip, $port, $protocol = 'tcp')
|
||||||
|
{
|
||||||
switch ($protocol) {
|
switch ($protocol) {
|
||||||
case 'tcp':
|
case 'tcp':
|
||||||
$this->sock = fsockopen('tcp://'.$ip.':'.$port);
|
$this->sock = fsockopen('tcp://'.$ip.':'.$port);
|
||||||
$this->protocol = "tcp";
|
$this->protocol = 'tcp';
|
||||||
stream_set_timeout($this->sock, 5);
|
stream_set_timeout($this->sock, 5);
|
||||||
if (!(get_resource_type($this->sock) == 'file' || get_resource_type($this->sock) == 'stream')) {
|
if (!(get_resource_type($this->sock) == 'file' || get_resource_type($this->sock) == 'stream')) {
|
||||||
throw new Exception("Connection: couldn't connect to socket.");
|
throw new Exception("Connection: couldn't connect to socket.");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception("Connection: invalid protocol specified.");
|
throw new Exception('Connection: invalid protocol specified.');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public function __destruct() {
|
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
switch ($this->protocol) {
|
switch ($this->protocol) {
|
||||||
case 'tcp':
|
case 'tcp':
|
||||||
fclose($this->sock);
|
fclose($this->sock);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception("Connection: invalid protocol specified.");
|
throw new Exception('Connection: invalid protocol specified.');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
public function write($what, $length = null) {
|
|
||||||
|
public function write($what, $length = null)
|
||||||
|
{
|
||||||
$what = substr($what, 0, $length);
|
$what = substr($what, 0, $length);
|
||||||
switch ($this->protocol) {
|
switch ($this->protocol) {
|
||||||
case 'tcp':
|
case 'tcp':
|
||||||
if (!(get_resource_type($this->sock) == 'file' || get_resource_type($this->sock) == 'stream')) {
|
if (!(get_resource_type($this->sock) == 'file' || get_resource_type($this->sock) == 'stream')) {
|
||||||
throw new Exception("Connection: couldn't connect to socket.");
|
throw new Exception("Connection: couldn't connect to socket.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return fwrite($this->sock, $what);
|
return fwrite($this->sock, $what);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception("Connection: invalid protocol specified.");
|
throw new Exception('Connection: invalid protocol specified.');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public function read($length) {
|
|
||||||
|
public function read($length)
|
||||||
|
{
|
||||||
switch ($this->protocol) {
|
switch ($this->protocol) {
|
||||||
case 'tcp':
|
case 'tcp':
|
||||||
if (!(get_resource_type($this->sock) == 'file' || get_resource_type($this->sock) == 'stream')) {
|
if (!(get_resource_type($this->sock) == 'file' || get_resource_type($this->sock) == 'stream')) {
|
||||||
throw new Exception("Connection: couldn't connect to socket.");
|
throw new Exception("Connection: couldn't connect to socket.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return fread($this->sock, $length);
|
return fread($this->sock, $length);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception("Connection: invalid protocol specified.");
|
throw new Exception('Connection: invalid protocol specified.');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,25 +5,27 @@ require_once 'libpy2php.php';
|
|||||||
require_once 'os_path.php';
|
require_once 'os_path.php';
|
||||||
|
|
||||||
namespace danog\MadelineProto;
|
namespace danog\MadelineProto;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages encryption and message frames.
|
* Manages encryption and message frames.
|
||||||
*/
|
*/
|
||||||
class Session extends Tools
|
class mtproto extends Tools
|
||||||
{
|
{
|
||||||
public $settings = [];
|
public $settings = [];
|
||||||
|
|
||||||
public function __construct($settings)
|
public function __construct($settings)
|
||||||
{
|
{
|
||||||
// Set default settings
|
// Set default settings
|
||||||
$default_settings = ["ip" => "149.154.167.50", "port" => "443", "protocol" => "tcp", "auth_key" => null, "server_salt" => null, "api_id" => 25628, "api_hash" => "1fe17cda7d355166cdaa71f04122873c", "tl_schema" => 'https://core.telegram.org/schema/mtproto-json', "rsa_pub" => __DIR__.'/rsa.pub'];
|
$default_settings = ['ip' => '149.154.167.50', 'port' => '443', 'protocol' => 'tcp', 'auth_key' => null, 'server_salt' => null, 'api_id' => 25628, 'api_hash' => '1fe17cda7d355166cdaa71f04122873c', 'tl_schema' => 'https://core.telegram.org/schema/mtproto-json', 'rsa_pub' => __DIR__.'/rsa.pub'];
|
||||||
foreach ($default_settings as $key => $param) {
|
foreach ($default_settings as $key => $param) {
|
||||||
if(!isset($settings[$key])) {
|
if (!isset($settings[$key])) {
|
||||||
$settings[$key] = $param;
|
$settings[$key] = $param;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->settings = $settings;
|
$this->settings = $settings;
|
||||||
|
|
||||||
// Connect to servers
|
// Connect to servers
|
||||||
$this->sock = new Connection($this->settings["ip_address"], $this->settings["ip_address"], $this->settings["protocol"]);
|
$this->sock = new Connection($this->settings['ip_address'], $this->settings['ip_address'], $this->settings['protocol']);
|
||||||
|
|
||||||
// Istantiate struct class
|
// Istantiate struct class
|
||||||
$this->struct = new \danog\PHP\Struct();
|
$this->struct = new \danog\PHP\Struct();
|
||||||
@ -31,18 +33,20 @@ class Session extends Tools
|
|||||||
$this->PrimeModule = new PrimeModule();
|
$this->PrimeModule = new PrimeModule();
|
||||||
// Istantiate TL class
|
// Istantiate TL class
|
||||||
try {
|
try {
|
||||||
$this->tl = new TL($this->settings["tl_schema"]);
|
$this->tl = new TL($this->settings['tl_schema']);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$this->tl = new TL(__DIR__.'/TL_schema.JSON');
|
$this->tl = new TL(__DIR__.'/TL_schema.JSON');
|
||||||
}
|
}
|
||||||
// Load rsa key
|
// Load rsa key
|
||||||
$this->settings["rsa_content"] = file_get_contents($this->rsa_pub);
|
$this->settings['rsa_content'] = file_get_contents($this->rsa_pub);
|
||||||
|
|
||||||
// Set some defaults
|
// Set some defaults
|
||||||
$this->number = 0;
|
$this->number = 0;
|
||||||
$this->timedelta = 0;
|
$this->timedelta = 0;
|
||||||
$this->session_id = \phpseclib\Crypt\Random::string(8);
|
$this->session_id = \phpseclib\Crypt\Random::string(8);
|
||||||
if(isset($this->settings["auth_key"])) $this->auth_key = $this->settings["auth_key"];
|
if (isset($this->settings['auth_key'])) {
|
||||||
|
$this->auth_key = $this->settings['auth_key'];
|
||||||
|
}
|
||||||
$this->auth_key_id = $this->auth_key ? substr(sha1($this->auth_key, true), -8) : null;
|
$this->auth_key_id = $this->auth_key ? substr(sha1($this->auth_key, true), -8) : null;
|
||||||
$this->MAX_RETRY = 5;
|
$this->MAX_RETRY = 5;
|
||||||
$this->AUTH_MAX_RETRY = 5;
|
$this->AUTH_MAX_RETRY = 5;
|
||||||
@ -52,11 +56,13 @@ class Session extends Tools
|
|||||||
{
|
{
|
||||||
unset($this->sock);
|
unset($this->sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to get hex crc32
|
* Function to get hex crc32.
|
||||||
* @param $data Data to encode.
|
*
|
||||||
*/
|
* @param $data Data to encode.
|
||||||
function newcrc32($data)
|
*/
|
||||||
|
public function newcrc32($data)
|
||||||
{
|
{
|
||||||
return hexdec(hash('crc32b', $data));
|
return hexdec(hash('crc32b', $data));
|
||||||
}
|
}
|
||||||
@ -152,7 +158,7 @@ class Session extends Tools
|
|||||||
{
|
{
|
||||||
// Load the RSA key
|
// Load the RSA key
|
||||||
$key = new \phpseclib\Crypt\RSA();
|
$key = new \phpseclib\Crypt\RSA();
|
||||||
$key->load($settings["rsa_content"]);
|
$key->load($settings['rsa_content']);
|
||||||
|
|
||||||
// Make pq request
|
// Make pq request
|
||||||
$nonce = \phpseclib\Crypt\Random::string(16);
|
$nonce = \phpseclib\Crypt\Random::string(16);
|
||||||
@ -165,7 +171,7 @@ class Session extends Tools
|
|||||||
$public_key_fingerprint = (int) $ResPQ['server_public_key_fingerprints'][0];
|
$public_key_fingerprint = (int) $ResPQ['server_public_key_fingerprints'][0];
|
||||||
$pq_bytes = $ResPQ['pq'];
|
$pq_bytes = $ResPQ['pq'];
|
||||||
var_dump(
|
var_dump(
|
||||||
(int)$this->struct->unpack("<q", substr(sha1($this->tl->serialize_param('bytes', $key->modulus->toBytes()) . $this->tl->serialize_param('bytes', $key->exponent->toBytes()), true), -8))[0],
|
(int) $this->struct->unpack('<q', substr(sha1($this->tl->serialize_param('bytes', $key->modulus->toBytes()).$this->tl->serialize_param('bytes', $key->exponent->toBytes()), true), -8))[0],
|
||||||
$public_key_fingerprint
|
$public_key_fingerprint
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -3,15 +3,15 @@
|
|||||||
namespace danog\MadelineProto;
|
namespace danog\MadelineProto;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Some tools
|
* Some tools.
|
||||||
*/
|
*/
|
||||||
class Tools {
|
class tools
|
||||||
|
{
|
||||||
/**
|
/**
|
||||||
* posmod(numeric,numeric) : numeric
|
* posmod(numeric,numeric) : numeric
|
||||||
* Works just like the % (modulus) operator, only returns always a postive number.
|
* Works just like the % (modulus) operator, only returns always a postive number.
|
||||||
*/
|
*/
|
||||||
function posmod($a, $b)
|
public function posmod($a, $b)
|
||||||
{
|
{
|
||||||
$resto = $a % $b;
|
$resto = $a % $b;
|
||||||
if ($resto < 0) {
|
if ($resto < 0) {
|
||||||
@ -21,7 +21,7 @@ class Tools {
|
|||||||
return $resto;
|
return $resto;
|
||||||
}
|
}
|
||||||
|
|
||||||
function fread_all($handle)
|
public function fread_all($handle)
|
||||||
{
|
{
|
||||||
$pos = ftell($handle);
|
$pos = ftell($handle);
|
||||||
fseek($handle, 0);
|
fseek($handle, 0);
|
||||||
@ -30,7 +30,8 @@ class Tools {
|
|||||||
|
|
||||||
return $content;
|
return $content;
|
||||||
}
|
}
|
||||||
function fopen_and_write($filename, $mode, $data)
|
|
||||||
|
public function fopen_and_write($filename, $mode, $data)
|
||||||
{
|
{
|
||||||
$handle = fopen($filename, $mode);
|
$handle = fopen($filename, $mode);
|
||||||
fwrite($handle, $data);
|
fwrite($handle, $data);
|
||||||
@ -38,7 +39,8 @@ class Tools {
|
|||||||
|
|
||||||
return $handle;
|
return $handle;
|
||||||
}
|
}
|
||||||
function string2bin($string)
|
|
||||||
|
public function string2bin($string)
|
||||||
{
|
{
|
||||||
$res = null;
|
$res = null;
|
||||||
foreach (explode('\\', $string) as $s) {
|
foreach (explode('\\', $string) as $s) {
|
||||||
|
@ -6,4 +6,4 @@ if (!$config) {
|
|||||||
pyjslib_printnl("File 'credentials' seems to not exist.");
|
pyjslib_printnl("File 'credentials' seems to not exist.");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
$MadelineProto = new \danog\MadelineProto\API("393888288264", $config);
|
$MadelineProto = new \danog\MadelineProto\API('393888288264', $config);
|
||||||
|
Loading…
Reference in New Issue
Block a user