twistertwister-phptwister-p2ptwister-curltwister-apitwister-composertwister-rssphp-8twister-clienttwister-php-clienttwister-librarytwister-api-phptwister-php-8
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
393 lines
9.3 KiB
393 lines
9.3 KiB
<?php |
|
|
|
declare(strict_types=1); |
|
|
|
namespace Twisterarmy\Twister; |
|
|
|
class Client |
|
{ |
|
private $_curl; |
|
|
|
private string $_url; |
|
|
|
public function __construct( |
|
string $protocol, |
|
string $host, |
|
int $port, |
|
string $username, |
|
string $password |
|
) |
|
{ |
|
$this->_url = sprintf( |
|
'%s://%s:%s', |
|
$protocol, |
|
$host, |
|
$port |
|
); |
|
|
|
$this->_curl = curl_init(); |
|
|
|
curl_setopt_array( |
|
$this->_curl, |
|
[ |
|
CURLOPT_RETURNTRANSFER => true, |
|
CURLOPT_FOLLOWLOCATION => true, |
|
CURLOPT_FRESH_CONNECT => true, |
|
CURLOPT_HTTPAUTH => CURLAUTH_BASIC, |
|
CURLOPT_USERPWD => $username . ':' . $password, |
|
CURLOPT_RETURNTRANSFER => true, |
|
CURLOPT_FOLLOWLOCATION => true, |
|
CURLOPT_HTTPHEADER => [ |
|
'Content-Type: application/plain', |
|
], |
|
] |
|
); |
|
} |
|
|
|
public function __destruct() |
|
{ |
|
curl_close( |
|
$this->_curl |
|
); |
|
} |
|
|
|
private function _exec(string $uri, string $method = 'POST', array $data = [], array &$errors = []): ?array |
|
{ |
|
curl_setopt( |
|
$this->_curl, |
|
CURLOPT_URL, |
|
$this->_url . $uri |
|
); |
|
|
|
curl_setopt( |
|
$this->_curl, |
|
CURLOPT_CUSTOMREQUEST, |
|
$method |
|
); |
|
|
|
if ($method == 'POST' && $data) |
|
{ |
|
curl_setopt( |
|
$this->_curl, |
|
CURLOPT_POSTFIELDS, |
|
json_encode( |
|
$data |
|
) |
|
); |
|
} |
|
|
|
if ($response = curl_exec($this->_curl)) |
|
{ |
|
if ($result = json_decode($response, true)) |
|
{ |
|
return $result; |
|
} |
|
} |
|
|
|
else |
|
{ |
|
$errors[] = curl_error( |
|
$this->_curl |
|
); |
|
} |
|
|
|
return null; |
|
} |
|
|
|
public function importWallet(string $userName, string $userPrivateKey, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'importprivkey', |
|
'params' => |
|
[ |
|
$userPrivateKey, |
|
$userName |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function getBlockHash(int $number, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'getblockhash', |
|
'params' => |
|
[ |
|
$number |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function getBlock(string $hash, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'getblock', |
|
'params' => |
|
[ |
|
$hash |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function getPosts(array $userNames, int $limit = 20, array &$errors = []): ?array |
|
{ |
|
$data = []; |
|
|
|
foreach ($userNames as $userName) |
|
{ |
|
$data[] = |
|
[ |
|
'username' => $userName |
|
]; |
|
} |
|
|
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'getposts', |
|
'params' => |
|
[ |
|
$limit, |
|
$data |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function follow(string $userName, array $userNames, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'follow', |
|
'params' => |
|
[ |
|
$userName, |
|
$userNames |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function unFollow(string $userName, array $userNames, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'unfollow', |
|
'params' => |
|
[ |
|
$userName, |
|
$userNames |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function getFollowing(string $userName, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'getfollowing', |
|
'params' => |
|
[ |
|
$userName |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function getDHTProfileRevisions(string $userName, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'dhtget', |
|
'params' => |
|
[ |
|
$userName, |
|
'profile', |
|
's' |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function getDHTAvatarRevisions(string $userName, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'dhtget', |
|
'params' => |
|
[ |
|
$userName, |
|
'avatar', |
|
's' |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function putDHT(string $peerAlias, string $command, string $flag /*s(ingle)/m(ulti) mixed*/, $value, string $sig_user, int $seq, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'dhtput', |
|
'params' => [ |
|
$peerAlias, |
|
$command, |
|
$flag, |
|
$value, |
|
$sig_user, |
|
$seq, |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function createWalletUser(string $userName, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'createwalletuser', |
|
'params' => |
|
[ |
|
$userName |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function sendNewUserTransaction(string $userName, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'sendnewusertransaction', |
|
'params' => |
|
[ |
|
$userName |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function newPostMessage(string $userName, string $message, ?int $k = null, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'newpostmsg', |
|
'params' => |
|
[ |
|
$userName, |
|
$this->getPostK($userName, $k), |
|
$message |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function newRetwistMessage(string $userName, string $sigUserPost, array $userPost, string $comment, ?int $k = null, array &$errors = []): ?array |
|
{ |
|
return $this->_exec( |
|
'/', |
|
'POST', |
|
[ |
|
'jsonrpc' => '2.0', |
|
'method' => 'newrtmsg', |
|
'params' => |
|
[ |
|
$userName, |
|
$this->getPostK($userName, $k), |
|
[ |
|
'sig_userpost' => $sigUserPost, |
|
'userpost' => $userPost, |
|
], |
|
$comment |
|
], |
|
'id' => time() |
|
], |
|
$errors |
|
); |
|
} |
|
|
|
public function getPostK(string $userName, ?int $k = null): ?int |
|
{ |
|
if (is_null($k)) |
|
{ |
|
if (null === $posts = $this->getPosts([$userName], 1)) |
|
{ |
|
return null; |
|
} |
|
|
|
return isset($posts['result'][0]['userpost']['k']) ? (int) $posts['result'][0]['userpost']['k'] + 1 : 1; |
|
} |
|
|
|
return $k; |
|
} |
|
} |