SpamExperts/whmcs-addon

View on GitHub
modules/servers/kwspamexperts/spamexpertsreseller.php

Summary

Maintainability
F
5 days
Test Coverage
<?php

use Carbon\Carbon;
use WHMCS\Database\Capsule;

/* * ********************************************************************
 * Customization Services by ModulesGarden.com
 * Copyright  ModulesGarden, INBS Group Brand, All Rights Reserved 
 * (2014-02-11, 11:40:58)
 * 
 *
 *  CREATED BY MODULESGARDEN       ->        http://modulesgarden.com
 *  CONTACT                        ->       contact@modulesgarden.com
 *
 *
 *
 *
 * This software is furnished under a license and may be used and copied
 * only  in  accordance  with  the  terms  of such  license and with the
 * inclusion of the above copyright notice.  This software  or any other
 * copies thereof may not be provided or otherwise made available to any
 * other person.  No title to and  ownership of the  software is  hereby
 * transferred.
 *
 *
 * ******************************************************************** */

/**
 * @author Maciej Husak <maciej@modulesgarden.com>
 */
if (!defined("WHMCS")) 
{
  die("This file cannot be accessed directly");
}

if(isset($_GET['_debug']) && $_GET['debug']=='turnon')
{
    error_reporting(E_ALL);
    ini_set('display_errors',1);
}


/**
* FUNCTION spamexpertsreseller_ConfigOptions
* Display Configuration fields
* @return array
*/
function spamexpertsreseller_ConfigOptions() 
{
    $configarray = array(
     "SpampanelURL"     => array(
             "Type"         => "text", 
             "Size"         => "25",
             "FriendlyName" => "Spam Panel URL",
             "Description"  => ""
         ),
     "APIUsername"      => array(
             "Type"         => "text", 
             "Size"         => "25",
             "FriendlyName" => "API Username",
             "Description"  => ""
         ),
     "APIPassword"      => array(
             "Type"         => "password", 
             "Size"         => "25",
             "FriendlyName" => "API Password",
             "Description"  => ""
         ),
         "DomainsLimit"     => array( 
             "Type"         => "text", 
             "Size"         => "25",
             "FriendlyName" => "Domains Limits",
             "Description"  => ""
         ),
         "UsageLimits"=> array( 
             "Type"         => "yesno", 
             "Size"         => "25",
             "FriendlyName" => "Usage Limits",
             "Description"  => "Tick to disallow access to the API for the reseller"
         ),
    );
    return $configarray;
}


/**
* FUNCTION spamexpertsreseller_CreateAccount
* Create Reseller Account
* @param array $params
* @return string
*/
function spamexpertsreseller_CreateAccount($params) 
{
    // phpcs:ignore PHPCS_SecurityAudit.BadFunctions.EasyRFI.WarnEasyRFI
    include_once(__DIR__.DIRECTORY_SEPARATOR.'class.connection.php');
    $api        = new spamexperts_api($params);
    $password   = !empty($params['password'])                ? $params["password"]               : createServerPassword();
    $email      = !empty($params["customfields"]["Email"])   ? $params["customfields"]["Email"]  : $params['clientsdetails']['email'];
    $username   = !empty($params['username'])                ? $params['username']               : uniqid();

    // for add, the optional value needed for api_usage is the inverse of the config option to disable api access
    //  - "1" passed as the value enables the API access
    //  - "0" passed as the value or nothing passed disables the API access
    $api_usage = ($params['configoption5'] === 'on' ? 0 : 1);
    $api->call('/reseller/add/username/'.$username.'/password/'.rawurlencode($password).'/email/'.rawurlencode($email).'/domainslimit/'.$params['configoption4'].'/api_usage/'.$api_usage);
    if ($api->isSuccess()) {
        // update password & username
        Capsule::table('tblhosting')
            ->where(["id" => $params['serviceid']])
            ->update([
                // phpcs:ignore PHPCS_SecurityAudit.BadFunctions.CryptoFunctions.WarnCryptoFunc
                'password' => encrypt($password),
                'username' => $username,
                'updated_at' => Carbon::now()
            ]);
        return "success";
    }
    return $api->error();
}


/**
* FUNCTION spamexpertsreseller_TerminateAccount
* Terminate Reseller Account
* @param array $params
* @return string
*/
function spamexpertsreseller_TerminateAccount($params) 
{
    // phpcs:ignore PHPCS_SecurityAudit.BadFunctions.EasyRFI.WarnEasyRFI
    include_once(__DIR__.DIRECTORY_SEPARATOR.'class.connection.php');
    $api = new spamexperts_api($params);
    $api ->call("reseller/remove/username/".$params['username']."/");

    if ($api->isSuccess())
        return "success";

    return $api->error();
}


/**
* FUNCTION spamexpertsreseller_ChangePackage
* Upgrade Reseller Account
* @param array $params
* @return string
*/
function spamexpertsreseller_ChangePackage($params) {
    // phpcs:ignore PHPCS_SecurityAudit.BadFunctions.EasyRFI.WarnEasyRFI
    include_once(__DIR__.DIRECTORY_SEPARATOR.'class.connection.php');
    $api = new spamexperts_api($params);
    // for update, the optional value needed for api_usage matches the config option to disable api access
    //  - "0" passed as the value enables the API access
    //  - "1" passed as the value disables the API access
    $api_usage = ($params['configoption5'] === 'on' ? 1 : 0);
    $api ->call("reseller/update/username/".$params['username']."/password/".rawurlencode($params['password'])."/domainslimit/".$params['configoption4']."/api_usage/".$api_usage."/");

    if ($api->isSuccess())
    {
        return "success";
    }

    return $api->error();
}


/**
* FUNCTION spamexpertsreseller_ClientArea
* Display extended pages in clientarea
* @param array $params
* @return array
*/ 
function spamexpertsreseller_ClientArea($params) {
    $output = array('vars' => array());

    // phpcs:ignore PHPCS_SecurityAudit.BadFunctions.EasyRFI.WarnEasyRFI
    include_once(__DIR__.DIRECTORY_SEPARATOR.'class.connection.php');
    $lang = spamexpertsreseller_getLang($params);
    $auth = '';

    $api = new spamexperts_api($params);
    $api-> call("authticket/create/username/".$params['username']."/");

    if ($api->isSuccess()) {
        $res  = $api->getResponse();
        $auth = $res['result'];
    }

    $url = (strpos($params['configoption1'], 'http') === false)
        ? 'https://'.$params['configoption1']
        : $params['configoption1'];

    $output['vars']['api_url'] = $url.'/?authticket='.$auth;
    $output['vars']['lang'] = $lang['mainsite'];

    return $output;
}



/**
* FUNCTION spamexpertsreseller_getLang
* Get user language
* @params array
* @return string
*/ 
if(!function_exists('spamexpertsreseller_getLang')){
    function spamexpertsreseller_getLang($params){
         global $CONFIG;
         if(!empty($_SESSION['Language']))
             $language = strtolower($_SESSION['Language']);
         else if(isset($params['clientsdetails']['language']) && strtolower($params['clientsdetails']['language'])!='')
             $language = strtolower($params['clientsdetails']['language']);
         else
             $language = $CONFIG['Language'];

        $available_languages = array('english');
        // phpcs:ignore PHPCS_SecurityAudit.BadFunctions.EasyRFI.WarnEasyRFI
         $langfilename = __DIR__.DIRECTORY_SEPARATOR.'language'.DIRECTORY_SEPARATOR.$language.'.php';
         // phpcs:ignore PHPCS_SecurityAudit.BadFunctions.FilesystemFunctions.WarnFilesystem
        if(in_array($language, $available_languages) && file_exists($langfilename)) {
            // phpcs:ignore PHPCS_SecurityAudit.Misc.IncludeMismatch.ErrMiscIncludeMismatchNoExt,PHPCS_SecurityAudit.BadFunctions.EasyRFI.WarnEasyRFI
            require_once($langfilename);
        } else {
            // phpcs:ignore PHPCS_SecurityAudit.Misc.IncludeMismatch.ErrMiscIncludeMismatchNoExt,PHPCS_SecurityAudit.BadFunctions.EasyRFI.WarnEasyRFI
            require_once(__DIR__ . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR . 'english.php');
        }

         if(isset($lang))
             return $lang;
    }
}


/**
* FUNCTION spamexpertsreseller_ClientAreaCustomButtonArray()
* Display buttons in clientarea
* @return array
*/
function spamexpertsreseller_ClientAreaCustomButtonArray() {
      
        $buttonarray = array(
           'Management' => 'management'
        );
    return $buttonarray;
}


/**
* FUNCTION spamexpertsreseller_management
* Display extended pages in clientarea
* @params array
* @return array
*/ 
if (!function_exists('spamexpertsreseller_management')){
     function spamexpertsreseller_management($params){
         // phpcs:ignore PHPCS_SecurityAudit.BadFunctions.EasyRFI.WarnEasyRFI
         include_once(__DIR__.DIRECTORY_SEPARATOR.'class.connection.php');
         global $CONFIG;    
         $lang              = spamexpertsreseller_getLang($params); 
         $api               = new spamexperts_api($params);
         $page              = (isset($_GET['page'])                      ? addslashes($_GET['page'])          : 'mainsite');
         $vars['main_lang'] = $lang['mainsite'];
         $vars['lang']      = $lang[(!isset($lang[$page])                ? 'mainsite'                         : $page)];
         $vars['serviceid'] = $params['serviceid'];

         $available_pages = array('EditEmail', 'ManageAliases', 'managedomains', 'ManageRoutes', 'stats');
         // phpcs:disable PHPCS_SecurityAudit.BadFunctions.FilesystemFunctions.WarnFilesystem
         if(empty($page) || !in_array($page, $available_pages)
             || !file_exists(__DIR__.DIRECTORY_SEPARATOR.$page.'.php')
             || !file_exists(__DIR__.DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR.$page.'.tpl')
         ) {
             $vars['_status']   = array('code' => 1, 'msg' => $lang['mainsite']['notfound']);
             return array('vars'=> $vars);
         }
         // phpcs:enable PHPCS_SecurityAudit.BadFunctions.FilesystemFunctions.WarnFilesystem

         if(isset($_SESSION['spam_status']))
         {
             $vars['_status'] = $_SESSION['spam_status'];
             unset($_SESSION['spam_status']);
         }

         // phpcs:ignore PHPCS_SecurityAudit.BadFunctions.EasyRFI.WarnEasyRFI
         require_once(__DIR__.DIRECTORY_SEPARATOR.$page.'.php');

         return array(
             'templatefile' => 'templates/'.$page,
               'breadcrumb'   => ' > <a href="#">Server Details</a>',
               'vars'         => $vars
         );
     }
}