Skip to content

Instantly share code, notes, and snippets.

@krasenslavov
Last active March 18, 2022 16:11
Show Gist options
  • Save krasenslavov/2c385c1d67cbc5bf81b9fd8ce89310a8 to your computer and use it in GitHub Desktop.
Save krasenslavov/2c385c1d67cbc5bf81b9fd8ce89310a8 to your computer and use it in GitHub Desktop.
API license key plugin verification. Visit blog post https://bit.ly/2xlZKGx
<?php
require_once 'vendor/autoload.php';
$http_client = new \GuzzleHttp\Client();
$base_url = 'https://api.example.com/';
$error_message = '';
$success_message = '';
$logged_in = false;
if (!empty($_POST)
&& $_POST['user']
&& $_POST['password']) {
$action = esc_html($_GET['action']);
if ('auth' === $action) {
$request_url = $base_url . '/license';
} else if ('activate' === $action) {
$request_url = $base_url . '/license/activate';
} else if ('deactivate' === $action) {
$request_url = $base_url . '/license/deactivate';
}
try {
$site_url = parse_url($_SERVER['HTTP_HOST']);
$response = $http_client->request('POST',
$request_url, [
'auth' => [esc_html($_POST['user']), esc_html($_POST['password'])],
'form_params' => ['url' => esc_url($site_url['host'])]
]
);
if ($response->getStatusCode() === 200) {
$json = json_decode($response->getBody());
if ('auth' === $action) {
$logged_in = true;
$license_key = $json->license_key;
$sites = $json->sites;
$success_message = 'Athentication was successful!';
if (in_array(get_domain_only($site_url['host']), $sites)) {
add_option('license_key_is_confirmed', 1);
} else {
delete_option('license_key_is_confirmed');
}
} else if ('activate' === $action) {
if ($json->status === 'success') {
$success_message = 'API license key confirmed!';
add_option('license_key_is_confirmed', 1);
}
} else if ('deactivate' === $action) {
if ($json->status === 'success') {
$success_message = 'API license key confirmed!';
delete_option('license_key_is_confirmed');
}
}
}
} catch (GuzzleHttp\Exception\ClientException $error) {
$json = json_decode($error->getResponse()->getBody());
if ($json->message) {
$error_message = $json->message;
} else {
$error_message = $error->getMessage();
}
} catch (GuzzleHttp\Exception\RequestException $error) {
$error_message = $error->getMessage();
}
}
function get_domain_only(string $url) {
$url = filter_var($url, FILTER_SANITIZE_URL);
return preg_replace('/(http\:\/\/|https\:\/\/|www\.)/', '', $url);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment