#!/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
}