The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl


# cudbi-configdb v0.06.
# generate Class::User::DBI tables in database.
# Warning: This will drop the following tables before creating them: 
# cud_users, cud_user_ips, cud_roles, cud_privileges, cud_role_privileges,
# cud_user_domains, cud_domains.

use strict;
use warnings;

use DBIx::Connector;


use Class::User::DBI;
use Class::User::DBI::Roles;
use Class::User::DBI::Privileges;
use Class::User::DBI::Domains;
use Class::User::DBI::RolePrivileges;
use Class::User::DBI::UserDomains;
use Class::User::DBI::DB;

die( usage('Too few params.') ) if @ARGV < 2;

my ( $dbtype, $dbname, $dbuser, $dbpass ) = @ARGV;

$dbtype =~ s/sqlite/SQLite/i;    # SQLite likes CAMel casing.
$dbtype =~ s/mysql/mysql/i;      # MySQL wants lower case.

my $dsn = "dbi:$dbtype:database=$dbname";

my @classes = qw(
    Class::User::DBI
    Class::User::DBI::Roles
    Class::User::DBI::Privileges
    Class::User::DBI::Domains
    Class::User::DBI::RolePrivileges
    Class::User::DBI::UserDomains
);

eval {
    my $conn = DBIx::Connector->new(
        $dsn,
        defined $dbuser ? $dbuser : (),
        defined $dbpass ? $dbpass : (),
        {
            AutoCommit => 1,
            RaiseError => 1,
        }
    );
    foreach my $class ( @classes ) {
        $class->configure_db( $conn );
    }
};

if ($@) {
    usage("Database tables weren't created: $@");
}

sub usage {
    my $message = shift;
    die <<"HERE";
$message
Usage: cudbi-configdb 'dbtype' 'dbname' [ 'dbuser' ['dbpass'] ]

dbtype is known to support 'mysql' and for 'SQLite'.
dbname must be a valid database.
dbuser must be a user id for the database that has CREATE TABLE priviledges.
dbpass must be the password dbuser uses to log into the database.
HERE

}