package RVL::CpHandle;
# WebSite: http://www.rvglobalsoft.com
# Unauthorized copying is strictly forbidden and may result in severe legal action.
# Copyright (c) 2013 RV Global Soft Co.,Ltd. All rights reserved.
#
# =====YOU MUST KEEP THIS COPYRIGHTS NOTICE INTACT AND CAN NOT BE REMOVE =======
# Copyright (c) 2013 RV Global Soft Co.,Ltd. All rights reserved.
# This Agreement is a legal contract, which specifies the terms of the license
# and warranty limitation between you and RV Global Soft Co.,Ltd. and RV2Factor Product for RV Global Soft.
# You should carefully read the following terms and conditions before
# installing or using this software. Unless you have a different license
# agreement obtained from RV Global Soft Co.,Ltd., installation or use of this software
# indicates your acceptance of the license and warranty limitation terms
# contained in this Agreement. If you do not agree to the terms of this
# Agreement, promptly delete and destroy all copies of the Software.
#
# ===== Grant of License =======
# The Software may only be installed and used on a single host machine.
#
# ===== Disclaimer of Warranty =======
# THIS SOFTWARE AND ACCOMPANYING DOCUMENTATION ARE PROVIDED "AS IS" AND
# WITHOUT WARRANTIES AS TO PERFORMANCE OF MERCHANTABILITY OR ANY OTHER
# WARRANTIES WHETHER EXPRESSED OR IMPLIED. BECAUSE OF THE VARIOUS HARDWARE
# AND SOFTWARE ENVIRONMENTS INTO WHICH RV SITE BUILDER MAY BE USED, NO WARRANTY OF
# FITNESS FOR A PARTICULAR PURPOSE IS OFFERED. THE USER MUST ASSUME THE
# ENTIRE RISK OF USING THIS PROGRAM. ANY LIABILITY OF RV GLOBAL SOFT CO.,LTD. WILL BE
# LIMITED EXCLUSIVELY TO PRODUCT REPLACEMENT OR REFUND OF PURCHASE PRICE.
# IN NO CASE SHALL RV GLOBAL SOFT CO.,LTD. BE LIABLE FOR ANY INCIDENTAL, SPECIAL OR
# CONSEQUENTIAL DAMAGES OR LOSS, INCLUDING, WITHOUT LIMITATION, LOST PROFITS
# OR THE INABILITY TO USE EQUIPMENT OR ACCESS DATA, WHETHER SUCH DAMAGES ARE
# BASED UPON A BREACH OF EXPRESS OR IMPLIED WARRANTIES, BREACH OF CONTRACT,
# NEGLIGENCE, STRICT TORT, OR ANY OTHER LEGAL THEORY. THIS IS TRUE EVEN IF
# RV GLOBAL SOFT CO.,LTD. IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO CASE WILL
# RV GLOBAL SOFT CO.,LTD.'S LIABILITY EXCEED THE AMOUNT OF THE LICENSE FEE ACTUALLY PAID
# BY LICENSEE TO RV GLOBAL SOFT CO.,LTD.
# ===============================
use strict;
use warnings;
use Class::Std::Utils;
{
sub new {
my ($class) = @_;
my (%hash);
my ($this) = bless( \%hash, $class);
RVL::logMessage('', __CONSTANT__::RVL_LOG_DEBUG);
return $this;
}
sub factory {
my ($this, $mode, $opt) = @_;
my ($cpMode) = (defined $mode) ? $mode : RVL::CpHandle::_getCpMode();
RVL::logMessage('CALL CPMODE: ' . $cpMode, __CONSTANT__::RVL_LOG_DEBUG);
my ($newClass, $callClass);
require "RVL/CpHandle/$cpMode.pm";
my ($req) = RVL::Request::singleton();
my ($moduleName) = $req->getModuleName();
my ($customHandle) = __CONSTANT__::RVL_MOD_DIR . "/$moduleName/classes/CpHandle/$cpMode.pm";
if (-f $customHandle) {
RVL::logMessage("Usage: $customHandle", __CONSTANT__::RVL_LOG_DEBUG);
require $customHandle;
$callClass = "Custom::CpHandle::" . $cpMode . "::factory";
} else {
RVL::logMessage("Usage: RVL::CpHandle::" . $cpMode . "::factory", __CONSTANT__::RVL_LOG_DEBUG);
$callClass = "RVL::CpHandle::" . $cpMode . "::factory";
}
eval("\$newClass = $callClass();");
if ($@) {
RVL::logMessage("Eval has error!!" . $@, __CONSTANT__::RVL_LOG_DEBUG);
RVL::print_r($@); exit;
}
# $newClass = $callClass->new();
$newClass->setCpMode($cpMode);
return $newClass;
}
sub singleton {
my ($class) = __PACKAGE__;
if (!defined $RVL::INSTANCE{$class}) {
$RVL::INSTANCE{$class} = $class->factory();
}
return $RVL::INSTANCE{$class}
}
sub _getCpMode {
my ($this) = @_;
if ((defined $ENV{'CPANEL'} && $ENV{'CPANEL'} eq 'active') || (-e "/usr/local/cpanel/cpkeyclt")) {
return 'cPanel';
}elsif ((defined $ENV{'SERVER_SOFTWARE'} && $ENV{'SERVER_SOFTWARE'} eq 'sw-cp-server') || (-e '/etc/sw/keys/registry.xml')) {
return 'Plesk';
} else {
return 'NoCp';
}
}
sub getVersion {
}
sub getHostname
{
my ($this) = @_;
my ($hostname);
$hostname = $this->callBackticks('hostname');
return $hostname;
}
sub setCpMode
{
my ($this, $mode) = @_;
$this->{CPMODE} = $mode;
}
sub getCpMode
{
my ($this) = @_;
return $this->{CPMODE};
}
sub setCpPrivilege
{
my ($this, $privilege) = @_;
$this->{CPPRIVILEGE} = $privilege;
}
sub getCpPrivilege
{
my ($this) = @_;
return $this->{CPPRIVILEGE};
}
sub isRoot {
my ($this) = @_;
if (lc($this->{CPPRIVILEGE}) eq 'root') {
return 1;
} else {
return 0;
}
}
sub isReseller {
my ($this) = @_;
if (lc($this->{CPPRIVILEGE}) eq 'reseller') {
return 1;
} else {
return 0;
}
}
sub isUser {
my ($this) = @_;
if (lc($this->{CPPRIVILEGE}) eq 'user') {
return 1;
} else {
return 0;
}
}
sub getRVGOwner {
my ($this) = @_;
my ($ownerDir) = $this->getOwnerDir();
my ($ownername);
if (-f $ownerDir . '/.rvglobalsoft/authorizeid.pub') {
open(FD, '<', $ownerDir . '/.rvglobalsoft/authorizeid.pub');
$ownername = join('', <FD>);
close(FD);
chomp $ownername;
}
return $ownername;
}
sub callBackticks{
my ($this) = shift;
my $cmd = join(' ', @_);
if (-f '/tmp/.rvsBackticks') {
system('rm -f /tmp/.rvsBackticks');
}
my ($TestBackticks) = `echo 'RV Test Backticks'`;
my ($skipBackticks) = 0;
if ($TestBackticks !~/RV Test Backticks/) {
$skipBackticks = 1;
}
my ($resuft);
if (-f '/tmp/.rvsBackticks' || $skipBackticks eq 1) {
system("$cmd > /tmp/.rvsBackticks 2>&1");
open(my $fd, '<', '/tmp/.rvsBackticks');
$resuft = join('',<$fd>);
close($fd);
system('rm -f /tmp/.rvsBackticks');
} else {
$resuft = `$cmd 2>&1`;
}
RVL::logMessage('Resuft Command "' . $cmd . '": ' . $resuft, __CONSTANT__::RVL_LOG_DEBUG);
return $resuft;
}
}
1;
__END__;
Copyright 2K16 - 2K18 Indonesian Hacker Rulez