#!/usr/bin/perl
-# setup_tables: setup MYSQL/PGSQL side of things for blootbot.
+# setup_tables: setup MYSQL/PGSQL side of things for infobot.
# written by the xk.
###
-require "src/core.pl";
require "src/logger.pl";
+require "src/core.pl";
require "src/modules.pl";
require "src/Misc.pl";
-require "src/interface.pl";
+require "src/CLI/Support.pl";
+
+$bot_src_dir = "src/";
-$bot_src_dir = "./src/";
+# read param stuff from infobot.config.
+&loadConfig("files/infobot.config");
-# read param stuff from blootbot.config.
-&loadConfig("files/blootbot.config");
&loadDBModules();
my $dbname = $param{'DBName'};
my $query;
-if ($dbname eq "") {
- print "error: appears that teh config file was not loaded properly.\n";
- exit 1;
+if ( $dbname eq "" ) {
+ print "error: appears that the config file was not loaded properly.\n";
+ exit 1;
}
-if ($param{'DBType'} =~ /mysql/i) {
+if ( $param{'DBType'} =~ /mysql/i ) {
use DBI;
print "Enter root information...\n";
+
# username.
print "Username: ";
- chop (my $adminuser = <STDIN>);
+ chop( my $adminuser = <STDIN> );
# passwd.
system "stty -echo";
print "Password: ";
- chop(my $adminpass = <STDIN>);
+ chop( my $adminpass = <STDIN> );
print "\n";
system "stty echo";
- if ($adminuser eq "" or $adminpass eq "") {
- &ERROR("error: adminuser || adminpass is NULL.");
- exit 1;
- }
-
- &openDB("mysql", $adminuser, $adminpass);
-
- &status("Creating db ...");
- &dbRaw("CREATE DATABASE $param{'DBName'}");
-
- # Step 1.
- &status("Step 1: Adding user information.");
-
- # Step 2.
- if (!&dbGet("user","user",$param{'SQLUser'},"user")) {
- &status(" Adding user $param{'SQLUser'} $dbname/user table...");
-
- $query = "INSERT INTO user VALUES ".
- "('localhost', '$param{'SQLUser'}', ".
- "password('$param{'SQLPass'}'), ";
-
- $query .= "'Y','Y','Y','Y','Y','Y','N','N','N','N','N','N','N','N')";
-### $query .= "'Y','Y','Y','Y','N','N','N','N','N','N')";
-
- &dbRaw("create(user)", $query);
+ if ( $adminuser eq "" or $adminpass eq "" ) {
+ &ERROR("error: adminuser || adminpass is NULL.");
+ exit 1;
}
- # Step 3. what's this for?
- if (!&dbGet("db","db",$param{'SQLUser'},"db")) {
- &status(" Adding 'db' entry");
-
- $query = "INSERT INTO db VALUES ".
- "('localhost', '$dbname', ".
- "'$param{'SQLUser'}', ";
-
- $query .= "'Y','Y','Y','Y','Y','Y','Y','N','N','N')";
-### $query .= "'Y','Y','Y','Y','Y','N')";
+ &sqlOpenDB( "mysql", "mysql", $adminuser, $adminpass );
- &dbRaw("create(db)", $query);
+ my $database_exists = 0;
+ foreach $database ( &sqlRawReturn("SHOW DATABASES") ) {
+ $database_exists++ if $database eq $param{DBName};
}
-
- # grant.
- &status(" Granting user access to table.");
- foreach ("factoids","seen","freshmeat") {
- $query = "GRANT SELECT,INSERT,UPDATE,DELETE ON $dbname.$_ TO $param{'SQLUser'}";
- &dbRaw("GRANT", $query);
- }
-
- # flush.
- &status("Flushing privileges...");
- $query = "FLUSH PRIVILEGES"; # DOES NOT WORK on slink?
- &dbRaw("mysql(flush)", $query);
-
-} elsif ($param{'DBType'} =~ /pgsql|postgres/i) {
- if ($param{'DBType'} =~ /pgsql|postgres/i) { use Pg; } # for runtime.
- my $dbh = Pg::connectdb("dbname=$dbname");
-
- if (PGRES_CONNECTION_OK eq $conn->status) {
- print " opened mysql connection to $param{'mysqlHost'}\n";
- } else {
- print " error: cannot connect to $param{'mysqlHost'}.\n";
- print " $conn->errorMessage\n";
- exit 1;
+ if ($database_exists) {
+ &status("Database '$param{DBName}' already exists. Continuing...");
}
-
- # retrieve a list of db's from the server.
- my %db;
- foreach ($dbh->func('_ListTables')) {
- $db{$_} = 1;
+ else {
+ &status("Creating db ...");
+ &sqlRaw( "create(database)", "CREATE DATABASE $param{DBName}" );
}
- # Step 4.
- print "Step 4: Creating the tables.\n";
-
- # factoid db.
- if (!exists $db{'factoids'}) {
- print " creating new table factoids...\n";
-
- $query = "CREATE TABLE factoids (".
- "factoid_key varying(64) NOT NULL,".
-
- "requested_by varying(64),".
- "requested_time numeric(11,0),".
- "requested_count numeric(5,0),".
- "created_by varying(64),".
- "created_time numeric(11,0),".
+ &status("--- Adding user information for user '$param{'SQLUser'}'");
- "modified_by character varying(192),".
- "modified_time numeric(11,0),".
+ if (
+ !&sqlSelect(
+ "user", "user", { 'user' => &sqlQuote( $param{'SQLUser'} ) }
+ )
+ )
+ {
+ &status("--- Adding user '$param{'SQLUser'}' $dbname/user table...");
- "locked_by character varying(64),".
- "locked_time numeric(11,0),".
+ $query =
+ "INSERT INTO user VALUES "
+ . "('localhost', '$param{'SQLUser'}', "
+ . "password('$param{'SQLPass'}'), ";
- "factoid_value text NOT NULL,".
+ $query .= "'Y','Y','Y','Y','Y','Y','N','N','N','N','N','N','N','N')";
- "PRIMARY KEY (factoid_key)".
- ")";
-
- &dbRaw("create(factoids)", $query);
+ &sqlRaw( "create(user)", $query );
}
-
- # freshmeat.
- if (!exists $db{'freshmeat'}) {
- print " creating new table freshmeat...\n";
-
- $query = "CREATE TABLE freshmeat (".
- "name charcter varying(64) NOT NULL,".
- "stable character varying(32),".
- "devel character varying(32),".
- "section character varying(40),".
- "license character varying(32),".
- "homepage character varying(128),".
- "download character varying(128),".
- "changelog character varying(128),".
- "deb character varying(128),".
- "rpm character varying(128),".
- "link character varying(55),".
- "oneliner character varying(96) NOT NULL,".
-
- "PRIMARY KEY (name)".
- ")";
-
- &dbRaw("create(freshmeat)", $query);
+ else {
+ &status("... user information already present.");
}
- # karma.
- if (!exists $db{'karma'}) {
- print " creating new table karma...\n";
+ if ( !&sqlSelect( "db", "db", { 'db' => &sqlQuote( $param{'SQLUser'} ) } ) )
+ {
+ &status("--- Adding database information for database '$dbname'.");
- $query = "CREATE TABLE karma (".
- "nick character varying(20) NOT NULL,".
- "karma numeric(5,0),".
+ $query =
+ "INSERT INTO db VALUES "
+ . "('localhost', '$dbname', "
+ . "'$param{'SQLUser'}', ";
- "PRIMARY KEY (nick)".
- ")";
+ $query .= "'Y','Y','Y','Y','Y','Y','Y','N','N','N')";
- &dbRaw("create(karma)", $query);
+ &sqlRaw( "create(db)", $query );
}
-
- # rootwarn.
- if (!exists $db{'rootwarn'}) {
- print " creating new table rootwarn...\n";
-
- $query = "CREATE TABLE rootwarn (".
- "nick character varying(20) NOT NULL,".
- "attempt numeric(5,0),".
- "time numeric(11,0) NOT NULL,".
- "host character varying(80) NOT NULL,".
- "channel character varying(20) NOT NULL,".
-
- "PRIMARY KEY (nick)".
- ")";
-
- &dbRaw("create(rootwarn)", $query);
+ else {
+ &status("... db info already present.");
}
- # seen.
- if (!exists $db{'seen'}) {
- print " creating new table seen...\n";
-
- $query = "CREATE TABLE seen (".
- "nick character varying(20) NOT NULL,".
- "time numeric(11,0) NOT NULL,".
- "channel character varying(20) NOT NULL,".
- "host character varying(80) NOT NULL,".
- "messagecount numeric(5,0),".
- "hehcount numeric(5,0),".
- "message text NOT NULL,".
-
- "PRIMARY KEY (nick)".
- ")";
-
- &dbRaw("create(seen)", $query);
- }
+ # flush.
+ &status("Flushing privileges...");
+ $query = "FLUSH PRIVILEGES";
+ &sqlRaw( "mysql(flush)", $query );
}
-print "Done.\n";
+&status("Done.");
+
+&sqlCloseDB();
-&closeDB();
+# vim:ts=4:sw=4:expandtab:tw=80