Merge pull request #4 from cryptochangements34/master

Add server authentication, request an user or a password.
monerowp
serhack 7 years ago committed by GitHub
commit 58f4921731

@ -6,7 +6,7 @@ This plugin is rather simple but there are a few things that need to be set up b
* A web server! Ideally with the most recent versions of PHP and mysql
* The Monero wallet-cli and Moenro wallet-rpc tools found [here](https://getmonero.org/downloads/)
* The Monero wallet-cli and Monero wallet-rpc tools found [here](https://getmonero.org/downloads/)
* [WordPress](https://wordpress.org)
Wordpress is the backend tool that is needed to use WooCommerce and this Monero plugin
@ -15,19 +15,19 @@ Wordpress is the backend tool that is needed to use WooCommerce and this Monero
This Monero plugin is an extension of WooCommerce, which works with WordPress
## Step 1: Activating the plugin
* Downloading: First of all, you will need to download the plugin. This can be done by typing `git clone https://github.com/monero-integrations/monerowp.git` or can be downloaded as a zip file from the GitHub web page.
* Downloading: First of all, you will need to download the plugin. This can be done with the command `git clone https://github.com/monero-integrations/monerowp.git` or can be downloaded as a zip file from the GitHub web page.
* Put the plugin in the correct directory: You will need to put the folder named `monero` from this repo into the wordpress plugins directory. This can be found at `path/to/wordpress/folder/wp-content/plugins`
* Ativate the plugin from the WordPress admin panel: Once you login to the admin panel in WordPress, click on "Installed Plugins" under "Plugins". Then simply click "Activate" where it says "Monero - WooCommerce Gateway"
* Activate the plugin from the WordPress admin panel: Once you login to the admin panel in WordPress, click on "Installed Plugins" under "Plugins". Then simply click "Activate" where it says "Monero - WooCommerce Gateway"
## Step 2: Setup the Monero Wallet RPC
* Setup a monero wallet using the moenro-wallet-cli tool. If you do not knwo how to do this you can learn about it at [getmonero.org](https://getmonero.org/resources/user-guides/monero-wallet-cli.html)
* Setup a monero wallet using the monero-wallet-cli tool. If you do not know how to do this you can learn about it at [getmonero.org](https://getmonero.org/resources/user-guides/monero-wallet-cli.html)
* Start the monero daemon on your server and leave it running in the background. This can be accomplished by running `./monerod` inside your monero downloads folder.
* Start the Wallet RPC and leave it running in the background. This can be accomplished by running `monero-wallet-rpc --rpc-bind-port 18081 --disable-rpc-login --wallet-file /path/walletfile` where "/path/walletfile" is your actual wallet file.
* Start the Wallet RPC and leave it running in the background. This can be accomplished by running `monero-wallet-rpc --rpc-bind-port 18081 --rpc-login username:password --wallet-file /path/walletfile` where "username:password" is the username and password that you want to use, seperated by a colon and "/path/walletfile" is your actual wallet file.
## Step 3: Setup Monero Gateway in WooCommerce
@ -45,4 +45,9 @@ This Monero plugin is an extension of WooCommerce, which works with WordPress
* Enter the port number of the Wallet RPC in the box labeled "Daemon PORT" (will be `18081` if you used the above example).
* Enter the username and password that you want to use in their respective feilds
* Click on "Save changes"
## Info on server authentication
It is reccommended that you specify a username/password with your wallet rpc. This can be done by starting your wallet rpc with `monero-wallet-rpc --rpc-bind-port 18081 --rpc-login username:password --wallet-file /path/walletfile` where "username:password" is the username and password that you want to use, seperated by a colon. Alternatively, you can use the `--restricted-rpc` flag with the wallet rpc like so `./monero-wallet-rpc --testnet --rpc-bind-port 18081 --restricted-rpc --wallet-file wallet/path`.

@ -4,7 +4,6 @@
class Monero_Gateway extends WC_Payment_Gateway
{
private $monero_daemon;
function __construct()
{
@ -21,6 +20,8 @@ class Monero_Gateway extends WC_Payment_Gateway
$this->host = $this->get_option('daemon_host');
$this->port = $this->get_option('daemon_port');
$this->address = $this->get_option('monero_address');
$this->username = $this->get_option('username');
$this->password = $this->get_option('password');
// After init_settings() is called, you can get the settings and load them into variables, e.g:
// $this->title = $this->get_option('title' );
@ -30,7 +31,7 @@ class Monero_Gateway extends WC_Payment_Gateway
foreach ($this->settings as $setting_key => $value) {
$this->$setting_key = $value;
}
add_action('admin_notices', array(
$this,
@ -44,7 +45,6 @@ class Monero_Gateway extends WC_Payment_Gateway
add_action('woocommerce_thankyou_' . $this->id, array( $this, 'instruction' ) );
if (is_admin()) {
@ -54,7 +54,7 @@ class Monero_Gateway extends WC_Payment_Gateway
'process_admin_options'
));
}
$this->monero_daemon = new Monero_Library($this->host . ':' . $this->port . '/json_rpc');
$this->monero_daemon = new Monero_Library($this->host . ':' . $this->port . '/json_rpc', $this->username, $this->password);
}
public function admin_options()
@ -64,7 +64,7 @@ class Monero_Gateway extends WC_Payment_Gateway
echo "<table class='form-table'>";
$this->generate_settings_html();
echo "</table>";
echo "<h4>Learn more about using a password with the monero wallet-rpc <a href=\"https://github.com/cryptochangements34/monerowp/blob/master/README.md\">here</a></h4>";
}
@ -98,7 +98,7 @@ class Monero_Gateway extends WC_Payment_Gateway
'type' => 'text',
'desc_tip' => __('Monero Wallet Address', 'monero_gateway')
),
'daemon_host' => array(
'daemon_host' => array(
'title' => __('Daemon Host/ IP', 'monero_gateway'),
'type' => 'text',
'desc_tip' => __('This is the Daemon Host/IP to authorize the payment with port', 'monero_gateway'),
@ -110,14 +110,28 @@ class Monero_Gateway extends WC_Payment_Gateway
'desc_tip' => __('This is the Daemon Host/IP to authorize the payment with port', 'monero_gateway'),
'default' => '18080',
),
'username' => array(
'title' => __('username', 'monero_gateway'),
'desc_tip' => __('This is the username that you used with your monero wallet-rpc', 'monero_gateway'),
'type' => __('text'),
'default' => __('username')
),
'password' => array(
'title' => __('password', 'monero_gateway'),
'desc_tip' => __('This is the password that you used with your monero wallet-rpc', 'monero_gateway'),
'description' => __('you can leave these fields empty if you did not set', 'monero_gateway'),
'type' => __('text'),
'default' => __('password')
),
'environment' => array(
'title' => __(' Test Mode', 'monero_gateway'),
'label' => __('Enable Test Mode', 'monero_gateway'),
'type' => 'checkbox',
'description' => __('Place the payment gateway in test mode.', 'monero_gateway'),
'description' => __('Check this box if you are using testnet', 'monero_gateway'),
'default' => 'no'
)
),
);
}
@ -193,7 +207,7 @@ class Monero_Gateway extends WC_Payment_Gateway
$payment_id = bin2hex(openssl_random_pseudo_bytes(8));
$uri = "monero:$address?amount=$amount?payment_id=$payment_id";
$array_integrated_address = $this->monero_daemon->make_integrated_address($payment_id);
// Generate a QR code
echo "<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'>";
@ -310,6 +324,5 @@ class Monero_Gateway extends WC_Payment_Gateway
}*/
}
}
}

@ -11,7 +11,9 @@
*/
class Monero_Library
{
protected $url = null, $is_debug = false, $parameters_structure = 'array';
protected $url = null, $is_debug = false, $parameters_structure = 'array';
private $username;
private $password;
protected $curl_options = array(
CURLOPT_CONNECTTIMEOUT => 8,
CURLOPT_TIMEOUT => 8
@ -31,12 +33,14 @@ class Monero_Library
503 => '503 Service Unavailable'
);
public function __construct($pUrl)
public function __construct($pUrl, $pUser, $pPass)
{
$this->validate(false === extension_loaded('curl'), 'The curl extension must be loaded for using this class!');
$this->validate(false === extension_loaded('json'), 'The json extension must be loaded for using this class!');
$this->url = $pUrl;
$this->username = $pUser;
$this->password = $pPass;
}
private function getHttpErrorMessage($pErrorNumber)
@ -123,6 +127,8 @@ class Monero_Library
throw new RuntimeException('Could\'t initialize a cURL session');
}
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_USERPWD, $this->username . ":" . $this->password);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $pRequest);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));

Loading…
Cancel
Save