#!/use/bin/perl
package RVL::CPAPI::Plesk::Component;
# 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 Carp;
sub new {
my ( $class, %attrs ) = @_;
$class = ref $class || $class;
confess "Required CPAPI::Plesk object!" unless $attrs{plesk};
return bless \%attrs, $class;
}
# RVL::CPAPI::Plesk object
sub plesk { $_[0]->{plesk} }
sub check_required_params {
my ( $self, $hash, @fields ) = @_;
for my $key ( @fields ) {
if ( ref $key ) {
confess "Required any of this fields: " . join( ", ", @$key) . "!"
unless grep { $hash->{$_} } @$key;
} else {
confess "Required field $key!" unless exists $hash->{$key};
}
}
}
# sort params in right order
sub sort_params {
my ( $self, $params, @fields ) = @_;
my @sorted;
for my $key ( @fields ) {
if ( ref $key ) {
($key) = grep { exists $params->{$_} } @$key
}
push @sorted, {$key => $params->{$key}}
if exists $params->{$key};
}
return \@sorted;
}
# check hosting xml section
sub check_hosting {
my ( $self, $params, $required ) = @_;
unless ( $params->{hosting} ) {
confess "Required hosting!" if $required;
return;
}
my $hosting = $params->{hosting};
my $type = delete $hosting->{type};
my $ip = delete $hosting->{ip_address};
#confess "Required ip_address" unless $ip;
if ( $type eq 'vrt_hst' ) {
$self->check_required_params($hosting, qw(ftp_login ftp_password));
my @properties;
for my $key ( keys %$hosting ) {
push @properties, { property => [
{name => $key},
{value => $hosting->{$key}}
]};
delete $hosting->{$key};
}
push(@properties, { ip_address => $ip }) if $ip;
$hosting->{$type} = @properties ? \@properties : '';
return;
}
elsif ( $type eq 'std_fwd' or $type eq 'frm_fwd' ) {
confess "Required dest_url field!" unless $hosting->{dest_url};
$hosting->{$type} = {
dest_url => delete $hosting->{dest_url},
};
$hosting->{$type}->{ip_address} = $ip if $ip;
return;
}
elsif ( $type eq 'none' ) {
$hosting->{$type} = '';
return;
}
confess "Unknown hosting type!";
}
sub prepare_filter {
my ( $self, $filter, %opts ) = @_;
my @filter;
my $sort = $opts{sort_keys} || [keys %$filter];
for my $key ( @$sort ) {
if ( ref $filter->{$key} eq 'ARRAY' ) {
for my $value ( @{$filter->{$key}} ) {
push @filter, { $key => $value };
}
}
else {
push @filter, { $key => $filter->{$key} };
}
}
return @filter ? \@filter : '';
}
1;
__END__
=head1 NAME
RVL::CPAPI::Plesk::Component - Base class for components.
=head1 SYNOPSIS
package RVL::CPAPI::Plesk::Customer;
use base 'RVL::CPAPI::Plesk::Component';
sub get { ... }
sub set { ... }
1;
=head1 DESCRIPTION
Base class for components.
=head1 METHODS
=over 3
=item new(plesk => RVL::CPAPI::Plesk->new(...))
Create component object.
=item plesk()
Referer to RVL::CPAPI::Plesk object.
=item
=back
=head1 AUTHOR
Ivan Sokolov <lt>ivsokolov@cpan.org<gt>
=cut
Copyright 2K16 - 2K18 Indonesian Hacker Rulez