#!/usr/bin/perl

use strict;
use warnings;

use English;
use Getopt::Long;
use Pod::Usage;

if ( $EFFECTIVE_USER_ID != 0 ) {
    die "\n$0 must be run as root!\n\n";
}

use lib 'lib';
use Provision::Unix;
my $prov = Provision::Unix->new (debug=>0);
use Provision::Unix::Web;
my $web = Provision::Unix::Web->new( prov=> $prov, debug=>0);

###########    SITE CONFIGURATION    ###########
my ( $action, $vals );

# process command line options
GetOptions(

    'create'  => \$action->{'create'},
    'modify'  => \$action->{'modify'},
    'destroy' => \$action->{'destroy'},

    'suspend' => \$action->{'suspend'},
    'restore' => \$action->{'restore'},

    'show'   => \$action->{'show'},
    'repair' => \$action->{'repair'},
    'test'   => \$action->{'test'},

    "vhost=s"        => \$vals->{'vhost'},
    "ip=s"           => \$vals->{'ip'},
    "serveralias=s"  => \$vals->{'serveralias'},
    "serveradmin=s"  => \$vals->{'serveradmin'},
    "documentroot=s" => \$vals->{'documentroot'},
    "redirect=s"     => \$vals->{'redirect'},
    "options=s"      => \$vals->{'options'},
    "cgi=s"          => \$vals->{'cgi'},
    "ssl"            => \$vals->{'ssl'},
    "sslcert=s"      => \$vals->{'sslcert'},
    "sslkey=s"       => \$vals->{'sslkey'},
    "customlog=s"    => \$vals->{'customlog'},
    "customerror=s"  => \$vals->{'customerror'},
    "awstats"        => \$vals->{'awstats'},
    "phpmyadmin"     => \$vals->{'phpmyadmin'},
    "verbose"        => \$vals->{'debug'},

) or die "erorr parsing command line options";

  $action->{'create'}  ? $web->create( request => $vals, prompt => 1 )
: $action->{'destroy'} ? $web->destroy( request => $vals, prompt => 1 )

    # future functions....
    #: $action->{'modify'}  ? $web->modify ( request=>$vals, prompt=>1 )
    #: $action->{'suspend'} ? $web->suspend( request=>$vals, prompt=>1 )
    #: $action->{'restore'} ? $web->restore( request=>$vals, prompt=>1 )
    #: $action->{'show'}    ? $web->show   ( request=>$vals, prompt=>1 )
    #: $action->{'repair'}  ? $web->repair ( request=>$vals, prompt=>1 )
    #: $action->{'test'}    ? $web->test   ( request=>$vals, prompt=>1 )
    : pod2usage( { -verbose => $vals->{'debug'} } );

=head1 NAME 

prov_web.pl - a command line interface for provisioning web accounts

=head1 SYNOPSIS

  	prov_web.pl --action [--vhost example.com]

Action is one of the following:

  --create   - creates a new system user
  --modify   - make changes to an existing user
  --destroy  - remove a user from the system
  --suspend  - disable an account
  --restore  - restore an account

required arguments:

 -vhost          $vhost        

optional arguments:

 -ip             - IP address to listen on (default *)
 -serveralias    - list of aliases, comma separated
 -serveradmin    - email address of server admin
 -documentroot   - full path to html directory
 -redirect       - url to redirect site to
 -options        - server options ex. FollowSymLinks MultiViews Indexes ExecCGI Includes
 -ssl            - ssl enabled ? 
 -sslcert        - path to ssl certificate
 -sslkey         - path to ssl key
 -cgi            - basic | advanced | custom
 -customlog      - custom logging directive
 -customerror    - custom error logging directive
 -awstats        - include alias for awstats
 -phpmyadmin     - include alias for phpMyAdmin


=head1 USAGE
 
 prov_web.pl --create --vhost=www.example.com
 prov_web.pl --destroy --vhost=www.example.com
 prov_web.pl --modify  --vhost=www.example.com --options='Indexes ExecCGI'


=head1 DESCRIPTION
 
prov_web.pl is a command line interface to the Provision::Web provisioning modules. 

 
=head1 CONFIGURATION AND ENVIRONMENT

=head1 DEPENDENCIES
 
  Config::Tiny
  Getopt::Long
  Params::Validate
  Digest::MD5 
  LWP::UserAgent

=head1 AUTHOR
 
Matt Simerson, C<< <matt at tnpi.net> >>
 
 
=head1 LICENCE AND COPYRIGHT
 
Copyright (c) 2008 The Network People, Inc. (info@tnpi.net)

This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
