]> git.donarmstrong.com Git - infobot.git/blobdiff - setup/setup.pl
avoid reassigning to temp upon decode_utf8
[infobot.git] / setup / setup.pl
index 049122af8d94104a3a4189a2a28b5bfbec95a48f..89393bd1fc1039e92cd98107d01e277e81b70e22 100755 (executable)
 #!/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