Mini Shell

Direktori : /opt/sharedrads/perl/IMH/CPanel/
Upload File :
Current File : //opt/sharedrads/perl/IMH/CPanel/User.pm

#!/usr/bin/perl
# encoding: utf-8
#
# author: Kyle Yetter
#

package IMH::CPanel::User;

use strict;
use warnings;
use Cpanel::Config::LoadCpUserFile ();
use Cpanel::Config::userdata ();
use File::Slurp qw( slurp read_dir write_file );
use User::pwent;
use IMH::CPanel::FindUser;
use overload '""' => \&to_s;

*load_cp_user_file = *Cpanel::Config::LoadCpUserFile::loadcpuserfile;
*load_user_data    = *Cpanel::Config::userdata::load_userdata;

sub new {
  my ( $class, $user ) = @_;
  my $obj = bless( {}, $class || __PACKAGE__ );
  $obj->initialize( $user );
  return $obj;
}

sub initialize {
  my ( $self, $user )              = @_;
  my $name                         = identify_user( $user );

  $name or die "`$user' is not a valid cPanel user";

  $self->{ name }                  = $user;
  $self->{ pwent }                 = getpwnam( $user );
  $self->{ profile }               = load_cp_user_file( $user );
  $self->{ domain_groups }         = load_user_data( $user );
  $self->{ domain_data }           = {};
}

sub name {
  my ( $self ) = @_;
  return $self->{ name };
}

sub home {
  my ( $self ) = @_;
  return $self->{ pwent }->dir;
}

sub uid {
  my ( $self ) = @_;
  return $self->{ pwent }->uid;
}

sub gid {
  my ( $self ) = @_;
  return $self->{ pwent }->gid;
}

sub domain_data {
  my ( $self, $domain ) = @_;
  my $user = $self->{ name };
  $self->{ domain_data }->{ $domain } ||= load_user_data( $user, $domain );
  return $self->{ domain_data }->{ $domain };
}

sub domains {
  my ( $self ) = @_;
  my $profile = $self->{ profile };
  my @domains = ( $profile->{ 'DOMAIN' }, @{ $profile->{ 'DOMAINS' } } );
  return( wantarray ? @domains : [ @domains ] );
}

sub primary_domain {
  my ( $self ) = @_;
  my $doms     = $self->{ domain_groups };
  return $doms->{ main_domain };
}

sub parked_domains {
  my ( $self ) = @_;
  my $doms     = $self->{ domain_groups };
  my $parked   = $doms->{ parked_domains } || [];
  return( wantarray ? @$parked : $parked );
}

sub addon_domains {
  my ( $self ) = @_;
  my $doms     = $self->{ domain_groups };
  my @addons   = keys %{ $doms->{ addon_domains } || {} };
  return( wantarray ? @addons : [ @addons ] );
}

sub subdomains {
  my ( $self, $all ) = @_;
  my $doms           = $self->{ domain_groups };
  my %subdomains     = map { $_ => 1 } @{ $doms->{ sub_domains } || [] };
  unless ( $all ) {
    my @addons  = values %{ $doms->{ addon_domains } || {} };
    for ( @addons ) { delete $subdomains{ $_ }; }
  }
  my @subdomains = keys %subdomains;
  return( wantarray ? @subdomains : [ @subdomains ] );
}


sub document_root {
  my $self   = shift;
  my $domain = shift || $self->primary_domain;
  return $self->domain_data( $domain )->{ documentroot };
}

sub ip {
  my ( $self ) = @_;
  my $profile  = $self->{ profile };
  return $profile->{ IP };
}

sub start_date {
  my ( $self ) = @_;
  my $profile  = $self->{ profile };
  return( 0 + $profile->{ STARTDATE } );
}

sub plan {
  my ( $self ) = @_;
  my $profile  = $self->{ profile };
  return $profile->{ PLAN };
}

sub is_suspended {
  my ( $self ) = @_;
  my $name = $self->{ name };
  return( -f "/var/cpanel/suspended/$name" );
}

sub suspension_note {
  my ( $self ) = @_;
  my $name = $self->{ name };
  if ( -f "/var/cpanel/suspended/$name" ) {
    return slurp( "/var/cpanel/suspended/$name" );
  } else {
    return undef;
  }
}

sub domlog_paths {
  my $self   = shift;
  my @doms   = @_ ? @_ : $self->domains;
  my %logs;

  for my $dom ( @doms ) {
    my $data  = $self->domain_data( $dom );
    for my $log_info ( @{ $data->{ customlog } } ) {
      $logs{ $log_info->{ target } } = 1;
    }
  }

  my @logs = sort keys %logs;
  return( wantarray ? @logs : [ @logs ] );
}


sub to_s {
  my ( $self ) = @_;
  my $name = $self->{ name };
  return "$name";
}

Zerion Mini Shell 1.0