Skip to content

Instantly share code, notes, and snippets.

@jesussuarz
Created December 26, 2023 06:35
Show Gist options
  • Save jesussuarz/9bc57eec370886d92da078144e426806 to your computer and use it in GitHub Desktop.
Save jesussuarz/9bc57eec370886d92da078144e426806 to your computer and use it in GitHub Desktop.

hook para plugin cpanel (Acceder a la cuenta de cPanel desde el propio dominio de la cuenta cPanel)

Como el titulo lo dice, he modificado un hook "viejo" que un cliente me paso para agregarle un par de funcionalidades al plugin original de cPanel/WHM de WHMCS. (el que viene incluido tiene varias características erróneas).

El problema del siguiente plugin es que cuando le das a ingresar a webmail / cPanel, accede mediante el hostname del servidor cPanel. osea mediante (ejemplo): cpanel.tuempresa.com

el problema de esto es que hay usuarios que quieren acceder mediante el dominio de ellos. que además es una forma de mantener su marca y hacerlo mas personalizado para los usuarios. es por esto que mi cliente quería esto. me envio un hook "viejo" que fue creado por un usuario de whmcs.

el hook cuenta con las siguientes características:

  • Agrega un nuevo panel para agregar los links/botones (cpanel, webmail, whm).
  • Agrega botones con las clases de bootstrap 3 que tiene whmcs
  • Oculta el botón WHM si la cuenta no es una cuenta revendedor
  • Cambia los links de los botones de Ingresar cpanel, webmail, whm de por ejemplo: tu hostname.tuempresa.com a tudominio.com/cpanel, tudominio.com/webmail, tudominio.com:2086
  • Chequea si el dominio hacia de la cuenta tiene cloudflare, si el dominio tiene cloudflare entonces dejará el panel original del plugin de cpanel de whmcs (esta condición se hace puesto a que si el dominio tiene el proxy cdn de cloudflare activo el usuario no puede acceder mediante suempresa.com/cpanel

Dicho esto dejo el codigo que deben pegar en WHMCS/includes/hook

Crear un archivo en esta carpeta llamado cpanel_url.php

	<?php
use WHMCS\View\Menu\Item as MenuItem;
add_hook('ClientAreaPrimarySidebar', 1, function(MenuItem $primarySidebar) {
    $service = Menu::context('service');
    $servertype = $service->product->servertype;
    if ($servertype!="cpanel"){
        return;
    }
     $domain = $service->domain;
    $username = $service->username;
    $cloudflare = 'http://'.$domain.'';
    $get_cf = get_headers($cloudflare, 1)[Server];
    if ($get_cf != 'cloudflare'){
        $cpanelhref = 'https://'.$domain.':2083/login/';
        $webmailhref = 'https://'.$domain.':2096/login/';
        $webwhmhref = 'https://'.$domain.':2087/login/';
        $command = 'DecryptPassword';
        $postData = array('password2' => $service->password);
        $results = localAPI($command, $postData);
        $password = $results['password'];
        if ($service->product->type=="reselleraccount"){
            $whmcpanel = '<input class="btn btn-primary btn-sm block-btn mb-1" type="submit" formaction="'.$webwhmhref.'" value="'.Lang::trans('cpanelwhmlogin').'"/>';
         }
        $bodyhtml = '<form method="post" action="'.$cpanelhref.'" target="_blank">
        <input type="hidden" name="user" value ="'.$username.'"/>
        <input type="hidden" name="pass" value ="'.$password.'"/>
        <input class="btn btn-success btn-sm block-btn mb-1" type="submit" value="'.Lang::trans('cpanellogin').'"/>
        <input class="btn btn-danger btn-sm block-btn mb-1" type="submit" formaction="'.$webmailhref.'" value="'.Lang::trans('cpanelwebmaillogin').'"/>'.$whmcpanel.''.'
        </form>
        <a href="/contact.php" class="btn btn-info btn-sm block-btn mb-1" data-toggle="tooltip" data-placement="bottom" title="Si tiene problemas para ingresar a su panel, puede deberse a que usa una CDN o proxy como CloudFlare en su dominio, en este caso, contacte con soporte.">Ayuda <i class="fas fa-question-circle"></i></a>
        <style>.block-btn {width: 100%;} .mb-1 {margin-bottom:5px;}</style>';
        if (!is_null($primarySidebar->getChild('Service Details Actions'))) {
                $primarySidebar->getChild('Service Details Actions')
                                ->removeChild('Login to cPanel')
                                ->removeChild('Login to Webmail')
                                ->removeChild('Login to WHM');
        }
                $primarySidebar->addChild('cPanel Login', array(
                                'label' => 'Ingresar a cPanel/WHM',
                                'icon' => 'fa-server',
                                'order' => 20,
                                'footerHtml' => $bodyhtml,
                                ));
    }
});

si quieren ver el post original donde lo he publicado puede ir al siguiente link: https://whmcs.community/topic/297676-cpanel-account-login/page/2/?tab=comments#comment-1337351

Espero que les guste!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment