Includes
Shared functions required by API operations are provided in a number of standalone PHP include files. The first file returns the client information (for example, email address) which further S3 API user management requests need for various operations. Create a file S3_getClient.php with the following contents:
<?php
// API request to get whmcs client information.
if (!function_exists('S3_getClient')) {
function S3_getClient($userid, $whmcs_username) {
// Get client details for user email.
$command = 'GetClientsDetails';
$data = array(
'clientid' => $userid,
);
$results = localAPI($command, $data, $whmcs_username);
// Return client information.
return $results;
}
}
?>
The next file adds notes to the client in WHMCS with the S3 access key pairs whenever a new user or access key pair is created. Create a file S3_addClientNote.php with the following contents:
<?php
// API request to add note to client in whmcs.
if (!function_exists('S3_addClientNote')) {
function S3_addClientNote(
$userid,
$whmcs_username,
$s3_client_userid,
$s3_client_key,
$s3_client_secret
) {
// Add note only for non-empty users.
if (!empty($s3_client_userid)) {
// Add note with the s3 access key and s3 secret.
$command = 'AddClientNote';
$data = array(
'userid' => $userid,
'notes' =>
"UserId: " . $s3_client_userid . "\n" .
"AWSAccessKeyId: " . $s3_client_key . "\n" .
"AWSSecretAccessKey: " . $s3_client_secret,
);
localAPI($command, $data, $whmcs_username);
}
}
}
?>
The next file removes notes from the client in WHMCS with the S3 access key pairs whenever a user or access key pair is removed. Create a file S3_delClientNote.php with the following contents:
<?php
// whmcs database access.
use WHMCS\Database\Capsule;
// API request to remove note from client in whmcs.
if (!function_exists('S3_delClientNote')) {
function S3_delClientNote(
$userid,
$whmcs_username,
$s3_client_userid,
$s3_client_key
) {
// Delete notes in database.
$db = Capsule::connection()->getPdo();
$db->exec('
DELETE FROM
tblnotes
WHERE
userid = ' . $userid . '
AND
note LIKE "%' . $s3_client_userid . '%"
AND
note LIKE "%' . $s3_client_key . '%"'
);
}
}
?>
The last file is the cURL library for sending GET, PUT, POST, and DELETE requests. Create a file S3_requestCurl.php with the following contents:
<?php
// API request to s3 gateway.
if (!function_exists('S3_requestCurl')) {
function S3_requestCurl($s3_key, $s3_secret, $s3_gateway, $s3_query, $method) {
// Prepare signature.
$s3_host = parse_url($s3_gateway, PHP_URL_HOST);
$s3_date = date(DATE_RFC2822);
// Generate signature.
$s3_signature = hash_hmac('sha1', $method . "\n\n\n" . $s3_date . "\n" .
current(explode('&', $s3_query)), $s3_secret, true);
$s3_signature = base64_encode($s3_signature);
// Curl init.
$s3_curl = curl_init($s3_gateway . $s3_query);
// Curl options.
switch ($method) {
case "PUT":
curl_setopt($s3_curl, CURLOPT_PUT, 1);
break;
case "POST":
curl_setopt($s3_curl, CURLOPT_POST, 1);
break;
case "DELETE":
curl_setopt($s3_curl, CURLOPT_CUSTOMREQUEST, "DELETE");
break;
}
curl_setopt($s3_curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($s3_curl, CURLOPT_URL, $s3_gateway . $s3_query);
curl_setopt($s3_curl, CURLOPT_HTTPHEADER, array(
'Host: ' . $s3_host,
'Date: ' . $s3_date,
'Authorization: AWS ' . $s3_key . ':' . $s3_signature,
'Content-Type:',
'Expect:',
));
// Call.
$response = curl_exec($s3_curl);
$response = json_decode($response, true);
// Curl deinit.
curl_close($s3_curl);
// Return response.
return $response;
}
}
?>