Managing S3 User and Bucket Limits in WHMCS
-------------------------------------------

This section describes limits you can define for users and buckets in WHMCS. You can apply the limits according to specific options that can be a part of your service plan.

Setting User Limits
~~~~~~~~~~~~~~~~~~~

You can limit operations rate with the ``ostor-limits`` service and the following parameters: ``emailAddress`` specifying the email address, ``default=``, ``get=``, ``put=``, ``list=``, or ``delete=`` specifying the limit value.

Similarly, you can limit outgoing bandwidth of a response with the following parameters: ``emailAddress`` specifying the email address, ``out=`` specifying the limit value. WHMCS configures user limits in an S3 cluster when you click the **Set** button. Create a file ``S3_setLimitsForUser.php`` with the following contents:

::

   <?php
   
   // Load configuration and libraries.
   require('../../includes/VirtuozzoStorage/S3_getClient.php');
   require('../../includes/VirtuozzoStorage/S3_getConfig.php');
   require('../../includes/VirtuozzoStorage/S3_requestCurl.php');
   require('../../init.php');
   
   // Set s3 user limits.
   function S3_setLimitsForUser($vars) {
   
       // Load configuration.
       $s3_config = s3_getConfig();
   
       // Get whmcs user email.
       $s3_whmcs = S3_getClient($vars['userid'], $s3_config['whmcs_username']);
   
       // Set only if value specified.
       if (!empty($vars['ops-value'])) {
   
           // Set s3 bucket limits (ops).
           S3_requestCurl(
               $s3_config['s3_key'],
               $s3_config['s3_secret'],
               $s3_config['s3_gateway'],
                   "/?ostor-limits&emailAddress=" . $s3_whmcs['email'] .
                   "&limit-type=ops&limit-resource=" . $vars['ops-name'] .
                       '&limit-value=' . $vars['ops-value'],
               "PUT"
           );
       }
   
       // Set only if value specified.
       if (!empty($vars['bandwidth-value'])) {
   
           // Set s3 bucket limits (bandwidth).
           S3_requestCurl(
               $s3_config['s3_key'],
               $s3_config['s3_secret'],
               $s3_config['s3_gateway'],
                   "/?ostor-limits&emailAddress=" . $s3_whmcs['email'] .
                   "&limit-type=bandwidth&limit-resource=" . $vars['bandwidth-name'] .
                       '&limit-value=' . $vars['bandwidth-value'],
               "PUT"
           );
       }
   
       // Redirect back.
       header('Location: ' . $_SERVER['HTTP_REFERER']);
   }
   
   // Call function.
   S3_setLimitsForUser($_GET);
   
   ?>

.. image:: ../../../images/stor_saas_whmcs_integration7.png
   :align: center
   :class: align-center

Querying User Limits
~~~~~~~~~~~~~~~~~~~~

You can display the current limits with the ``ostor-limits`` service and parameter ``emailAddress`` specifying the email address. WHMCS displays the user limits in S3 cluster when you click the **Get** button. Create a file ``S3_getLimitsForUser.php`` with the following contents:

::

   <?php
   
   // Load configuration and libraries.
   require('../../includes/VirtuozzoStorage/S3_getClient.php');
   require('../../includes/VirtuozzoStorage/S3_getConfig.php');
   require('../../includes/VirtuozzoStorage/S3_requestCurl.php');
   require('../../init.php');
   
   // Get s3 user limits.
   function S3_getLimitsForUser($userid) {
   
       // Load configuration.
       $s3_config = s3_getConfig();
   
       // Get whmcs user email.
       $s3_whmcs = S3_getClient($userid, $s3_config['whmcs_username']);
   
       // Get s3 user limits.
       $s3_client = S3_requestCurl(
           $s3_config['s3_key'],
           $s3_config['s3_secret'],
           $s3_config['s3_gateway'],
           "/?ostor-limits&emailAddress=" . $s3_whmcs['email'],
           "GET"
       );
   
       // Store s3 result.
       $_SESSION['s3_limits_user'] = $s3_client;
   
       // Redirect back.
       header('Location: ' . $_SERVER['HTTP_REFERER']);
   }
   
   // Call function.
   S3_getLimitsForUser($_GET['userid']);
   
   ?>

Deleting User Limits
~~~~~~~~~~~~~~~~~~~~

You can delete the current limits with the ``ostor-limits`` service and parameter ``emailAddress`` specifying the email address. WHMCS removes the user limits from S3 cluster when you click the **Delete** button. Create a file ``S3_deleteLimitsForUser.php`` with the following contents:

::

   <?php
   
   // Load configuration and libraries.
   require('../../includes/VirtuozzoStorage/S3_getClient.php');
   require('../../includes/VirtuozzoStorage/S3_getConfig.php');
   require('../../includes/VirtuozzoStorage/S3_requestCurl.php');
   require('../../init.php');
   
   // Delete s3 user limits.
   function S3_getLimitsForUser($userid) {
   
       // Load configuration.
       $s3_config = s3_getConfig();
   
       // Get whmcs user email.
       $s3_whmcs = S3_getClient($userid, $s3_config['whmcs_username']);
   
       // Delete s3 user limits.
       S3_requestCurl(
           $s3_config['s3_key'],
           $s3_config['s3_secret'],
           $s3_config['s3_gateway'],
           "/?ostor-limits&emailAddress=" . $s3_whmcs['email'],
           "DELETE"
       );
   
       // Clear array.
       $_SESSION['s3_limits_user'] = null;
   
       // Redirect back.
       header('Location: ' . $_SERVER['HTTP_REFERER']);
   }
   
   // Call function.
   S3_getLimitsForUser($_GET['userid']);
   
   ?>

Setting Buckets Limits
~~~~~~~~~~~~~~~~~~~~~~

You can limit operations rate with the ``ostor-limits`` service and the following parameters: ``bucket`` specifying the bucket name, ``default=``, ``get=``, ``put=``, ``list=``, ``delete=`` specifying the limit value.

Similarly, you can limit outgoing bandwidth of a response with the ``ostor-limits`` service and the following parameters: ``bucket`` specifying the bucket name, ``out=`` specifying the limit value. WHMCS configures the bucket limits in S3 cluster when you click the **Set** button. Create a file ``S3_setLimitsForBucket.php`` with the following contents:

::

   <?php
   
   // Load configuration and libraries.
   require('../../includes/VirtuozzoStorage/S3_getConfig.php');
   require('../../includes/VirtuozzoStorage/S3_requestCurl.php');
   require('../../init.php');
   
   // Set s3 bucket limits.
   function S3_setLimitsForBucket($vars) {
   
       // Load configuration.
       $s3_config = s3_getConfig();
   
       // Set only if value specified.
       if (!empty($vars['ops-value'])) {
   
           // Set s3 bucket limits (ops).
           S3_requestCurl(
               $s3_config['s3_key'],
               $s3_config['s3_secret'],
               $s3_config['s3_gateway'],
                   "/?ostor-limits&bucket=" . $vars['bucket'] .
                   "&limit-type=ops&limit-resource=" . $vars['ops-name'] .
                       '&limit-value=' . $vars['ops-value'],
               "PUT"
           );
       }
   
       // Set only if value specified.
       if (!empty($vars['bandwidth-value'])) {
   
           // Set s3 bucket limits (bandwidth).
           S3_requestCurl(
               $s3_config['s3_key'],
               $s3_config['s3_secret'],
               $s3_config['s3_gateway'],
                   "/?ostor-limits&bucket=" . $vars['bucket'] .
                   "&limit-type=bandwidth&limit-resource=" . $vars['bandwidth-name'] .
                       '&limit-value=' . $vars['bandwidth-value'],
               "PUT"
           );
       }
   
       // Redirect back.
       header('Location: ' . $_SERVER['HTTP_REFERER']);
   }
   
   // Call function.
   S3_setLimitsForBucket($_GET);
   
   ?>

Querying Bucket Limits
~~~~~~~~~~~~~~~~~~~~~~

You can display the current limits with the ``ostor-limits`` service and parameter ``bucket`` specifying the bucket name. WHMCS displays the bucket limits in S3 cluster when you click the **Get** button. Create a file ``S3_getLimitsForBucket.php`` with the following contents:

::

   <?php
   
   // Load configuration and libraries.
   require('../../includes/VirtuozzoStorage/S3_getConfig.php');
   require('../../includes/VirtuozzoStorage/S3_requestCurl.php');
   require('../../init.php');
   
   // Get s3 bucket limits.
   function S3_getLimitsForBucket($bucket) {
   
       // Load configuration.
       $s3_config = s3_getConfig();
   
       // Get s3 user limits.
       $s3_client = S3_requestCurl(
           $s3_config['s3_key'],
           $s3_config['s3_secret'],
           $s3_config['s3_gateway'],
           "/?ostor-limits&bucket=" . $bucket,
           "GET"
       );
   
       // Store s3 result.
       $_SESSION['s3_limits_bucket'] = $s3_client;
       $_SESSION['s3_bucket'] = $bucket;
   
       // Redirect back.
       header('Location: ' . $_SERVER['HTTP_REFERER']);
   }
   
   // Call function.
   S3_getLimitsForBucket($_GET['bucket']);
   
   ?>
 
.. image:: ../../../images/stor_saas_whmcs_integration8.png
   :align: center
   :class: align-center

Deleting Bucket Limits
~~~~~~~~~~~~~~~~~~~~~~

You can delete the current limits with the ``ostor-limits`` service and parameter ``bucket`` specifying the bucket name. WHMCS removes the bucket limits from S3 cluster when you click the **Delete** button. Create a file ``S3_deleteLimitsForBucket.php`` with the following contents:

::

   <?php
   
   // Load configuration and libraries.
   require('../../includes/VirtuozzoStorage/S3_getConfig.php');
   require('../../includes/VirtuozzoStorage/S3_requestCurl.php');
   require('../../init.php');
   
   // Delete s3 bucket limits.
   function S3_deleteLimitsForBucket($bucket) {
   
       // Load configuration.
       $s3_config = s3_getConfig();
   
       // Delete s3 bucket limits.
       S3_requestCurl(
           $s3_config['s3_key'],
           $s3_config['s3_secret'],
           $s3_config['s3_gateway'],
           "/?ostor-limits&bucket=" . $bucket,
           "DELETE"
       );
   
       // Clear array.
       $_SESSION['s3_limits_bucket'] = null;
   
       // Redirect back.
       header('Location: ' . $_SERVER['HTTP_REFERER']);
   }
   
   // Call function.
   S3_deleteLimitsForBucket($_GET['bucket']);
   
   ?>
