lbrypress/classes/LBRY_Daemon.php
2018-10-31 14:48:58 -05:00

251 lines
8.1 KiB
PHP

<?php
/**
* Main class for the Daemon setup
*
* @package LBRYPress
*/
class LBRY_Daemon
{
private $address = 'localhost:5279';
private $logger = null;
/**
* LBRY Daemon Object constructor
*/
public function __construct()
{
$this->logger = new LBRY_Daemon_Logger();
$this->init();
}
public function init()
{
}
/**
* Returns an unused wallet address
* https://lbryio.github.io/lbry/#wallet_unused_address
* @return string Unused wallet address in base58
*/
public function wallet_unused_address()
{
try {
$result = $this->request('wallet_unused_address');
return $result->result;
} catch (LBRYDaemonException $e) {
$this->logger->log('wallet_unused_address error', $e->getMessage() . ' | Code: ' . $e->getCode());
LBRY()->notice->set_notice('error', 'Issue getting unused wallet address.');
return;
}
}
/**
* Returns the balance of a current LBRY wallet
* https://lbryio.github.io/lbry/cli/#wallet_balance
* @param string $address Wallet Address
* @return float Wallet Balance
*/
public function wallet_balance()
{
try {
$result = $this->request('wallet_balance');
return $result->result;
} catch (LBRYDaemonException $e) {
$this->logger->log('wallet_balance error', $e->getMessage() . ' | Code: ' . $e->getCode());
LBRY()->notice->set_notice('error', 'Issue getting wallet address.');
return;
}
}
/**
* https://lbryio.github.io/lbry/#channel_list
* @return array claim dictionary or null if empty
*/
public function channel_list()
{
try {
$result = $this->request('channel_list')->result;
return empty($result) ? null : $result;
} catch (LBRYDaemonException $e) {
$this->logger->log('channel_list error', $e->getMessage() . ' | Code: ' . $e->getCode());
LBRY()->notice->set_notice('error', 'Issue retrieving channel list.');
return;
}
}
/**
* https://lbryio.github.io/lbry/#channel_new
* @return array dictionary containing result of the request
*/
public function channel_new($channel_name, $bid_amount)
{
// TODO: Sanitize channel name and bid
// Make sure no @ sign, as we will add that
if (strpos($channel_name, '@')) {
throw new \Exception('Illegal character "@" in channel name', 1);
}
// No white space allowed
if (strpos($channel_name, ' ')) {
throw new \Exception("No spaces allowed in channel name", 1);
}
$channel_name = '@' . $channel_name;
try {
$result = $this->request(
'channel_new',
array(
'channel_name' => $channel_name,
'amount' => floatval($bid_amount)
)
);
return $result->result;
} catch (LBRYDaemonException $e) {
$this->logger->log('channel_new error', $e->getMessage() . ' | Code: ' . $e->getCode());
LBRY()->notice->set_notice('error', 'Issue creating new channel.');
return;
}
}
/**
* Publishes a post to the LBRY Network
* @param string $name The slug for the post
* @param float $bid The amount of LBC to bid
* @param string $filepath The path of the temporary content file
* @param string $title The Title of the post
* @param string $description The Description of the Post
* @param string $language Two letter ISO Code of the language
* @return string $channel The Claim ID of the Channel
*/
public function publish($name, $bid, $filepath, $title, $description, $language, $channel, $thumbnail = false)
{
$args = array(
'name' => $name,
'bid' => $bid,
'file_path' => $filepath,
'title' => $title,
'description' => $description,
'language' => $language,
);
// Make sure we aren't publishing to unattributed
if ($channel != 'null') {
$args['channel_id'] = $channel;
}
if ($thumbnail) {
$args['thumbnail'] = $thumbnail;
}
try {
$result = $this->request(
'publish',
$args
);
return $result->result;
} catch (LBRYDaemonException $e) {
$this->logger->log('wallet_unused_address error', $e->getMessage() . ' | Code: ' . $e->getCode());
LBRY()->notice->set_notice('error', 'Issue publishing / updating post to LBRY Network.');
return;
}
}
/**
* Sends a cURL request to the LBRY Daemon
* @param string $method The method to call on the LBRY API
* @param array $params The Parameters to send the LBRY API Call
* @return string The cURL response
*/
private function request($method, $params = array())
{
// JSONify our request data
$data = array(
'method' => $method,
'params' => $params
);
$data = json_encode($data);
// Send it via curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->address);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_AUTOREFERER, false);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
$response_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
if ($response_code != '200') {
$this->logger->log("Damon Connection Issue", "Daemon connection returned response code $response_code");
throw new LBRYDaemonException("Daemon Connection Issue", $response_code);
}
$result = json_decode($result);
$this->check_for_errors($result);
return $result;
}
/**
* Checks for erros in decoded daemon response and throws an exception if it finds one
* @param $response
*/
private function check_for_errors($response)
{
if (property_exists($response, 'error')) {
$message = $response->error->message;
$code = $response->error->code;
$this->logger->log("Daemon error code $code", $message);
throw new LBRYDaemonException($message, $code);
}
}
/**
* Temporary placeholder function for daemon. Not currently in use.
* @return [type] [description]
*/
// private function download_daemon()
// {
// $output_filename = "lbrydaemon";
//
// // HACK: Shouldn't just directly download, need to know OS, etc
// // TODO: Make sure we are only installing if not there or corrupted
// $host = "http://build.lbry.io/daemon/build-6788_commit-5099e19_branch-lbryum-refactor/mac/lbrynet";
// $fp = fopen(LBRY_URI . '/' . $output_filename, 'w+');
// $ch = curl_init();
// curl_setopt($ch, CURLOPT_URL, $host);
// curl_setopt($ch, CURLOPT_VERBOSE, 1);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// curl_setopt($ch, CURLOPT_FILE, $fp);
// curl_setopt($ch, CURLOPT_AUTOREFERER, false);
// curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
// curl_setopt($ch, CURLOPT_HEADER, 0);
//
// $result = curl_exec($ch);
// curl_close($ch);
// fclose($fp);
//
// $filepath = LBRY_URI . '/' . $output_filename;
//
// `chmod +x {$filepath}`;
// error_log(`{$filepath} status`);
// `{$filepath} start &`;
// }
}
class LBRYDaemonException extends Exception
{
public function __contstruct($message = '', $code = 0, Exception $previous = null)
{
parent::__construct($message, $code, $previous);
}
}