ghost
11 months ago
2 changed files with 390 additions and 0 deletions
@ -0,0 +1,367 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
namespace Twisterarmy\Twister; |
||||||
|
|
||||||
|
class Client |
||||||
|
{ |
||||||
|
private Curl $_curl; |
||||||
|
|
||||||
|
private int $_id = 0; |
||||||
|
|
||||||
|
private string $_url; |
||||||
|
|
||||||
|
public function __construct( |
||||||
|
string $protocol, |
||||||
|
string $host, |
||||||
|
int $port, |
||||||
|
string $username, |
||||||
|
string $password |
||||||
|
) |
||||||
|
{ |
||||||
|
$this->_url = $this->_protocol . '://' . $this->_host . ':' . $this->_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 = []) |
||||||
|
{ |
||||||
|
$this->_id = time(); |
||||||
|
|
||||||
|
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 = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'importprivkey', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$userPrivateKey, |
||||||
|
$userName |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function getBlockHash(int $number, array &$errors = []) { |
||||||
|
|
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'getblockhash', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$number |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function getBlock(string $hash, array &$errors = []) { |
||||||
|
|
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'getblock', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$hash |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function getPosts(array $userNames, int $limit, array &$errors = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'getposts', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$limit, |
||||||
|
$data |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function follow(string $userName, array $userNames, array &$errors = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'follow', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$userName, |
||||||
|
$userNames |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function unFollow(string $userName, array $userNames, array &$errors = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'unfollow', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$userName, |
||||||
|
$userNames |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function getFollowing(string $userName, array &$errors = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'getfollowing', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$userName |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function getDHTProfileRevisions(string $userName, array &$errors = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'dhtget', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$userName, |
||||||
|
'profile', |
||||||
|
's' |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function getDHTAvatarRevisions(string $userName, array &$errors = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'dhtget', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$userName, |
||||||
|
'avatar', |
||||||
|
's' |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function putDHT(string $peerAlias, string $command, string $flag /*s(ingle)/m(ulti) mixed*/, $value, string $sig_user, int $seq, array &$errors = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'dhtput', |
||||||
|
'params' => [ |
||||||
|
$peerAlias, |
||||||
|
$command, |
||||||
|
$flag, |
||||||
|
$value, |
||||||
|
$sig_user, |
||||||
|
$seq, |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function createWalletUser(string $userName, array &$errors = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'createwalletuser', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$userName |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function sendNewUserTransaction(string $userName, array &$errors = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'sendnewusertransaction', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$userName |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function newPostMessage(string $userName, int $k, string $message, array &$errors = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'newpostmsg', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$userName, |
||||||
|
$k, |
||||||
|
$message |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function newRetwistMessage(string $userName, int $k, string $sigUserPost, array $userPost, string $comment, array &$errors = []) |
||||||
|
{ |
||||||
|
return $this->_exec( |
||||||
|
'/', |
||||||
|
'POST', |
||||||
|
[ |
||||||
|
'jsonrpc' => '2.0', |
||||||
|
'method' => 'newrtmsg', |
||||||
|
'params' => |
||||||
|
[ |
||||||
|
$userName, |
||||||
|
$k, |
||||||
|
[ |
||||||
|
'sig_userpost' => $sigUserPost, |
||||||
|
'userpost' => $userPost, |
||||||
|
], |
||||||
|
$comment |
||||||
|
], |
||||||
|
'id' => $this->_id |
||||||
|
], |
||||||
|
$errors |
||||||
|
); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue