2 # setup_tables: setup MYSQL/PGSQL side of things for blootbot.
7 require "src/logger.pl";
8 require "src/modules.pl";
10 require "src/interface.pl";
12 $bot_src_dir = "./src/";
14 # read param stuff from blootbot.config.
15 &loadConfig("files/blootbot.config");
17 my $dbname = $param{'DBName'};
21 print "error: appears that teh config file was not loaded properly.\n";
25 if ($param{'DBType'} =~ /mysql/i) {
28 print "Enter root information...\n";
31 chop (my $adminuser = <STDIN>);
36 chop(my $adminpass = <STDIN>);
40 if ($adminuser eq "" or $adminpass eq "") {
41 &ERROR("error: adminuser || adminpass is NULL.");
46 &openDB($dbname, $adminuser, $adminpass);
48 # retrieve a list of db's from the server.
50 foreach ($dbh->func('_ListTables')) {
55 &status("Creating database $param{'DBName'}...");
56 $query = "CREATE DATABASE $param{'DBName'}";
57 &dbRaw("create(db $param{'DBName'})", $query);
60 print "Step 4: Creating the tables.\n";
63 if (!exists $db{'factoids'}) {
64 print " creating new table factoids...\n";
66 $query = "CREATE TABLE factoids (".
67 "factoid_key VARCHAR(64) NOT NULL,".
69 "requested_by VARCHAR(64),".
70 "requested_time INT,".
71 "requested_count SMALLINT UNSIGNED,".
72 "created_by VARCHAR(64),".
75 "modified_by VARCHAR(192),".
78 "locked_by VARCHAR(64),".
81 "factoid_value TEXT NOT NULL,".
83 "PRIMARY KEY (factoid_key)".
86 &dbRaw("create(factoids)", $query);
90 if (!exists $db{'freshmeat'}) {
91 print " creating new table freshmeat...\n";
93 $query = "CREATE TABLE freshmeat (".
94 "name VARCHAR(64) NOT NULL,".
95 "stable VARCHAR(32),".
97 "section VARCHAR(40),".
98 "license VARCHAR(32),".
99 "homepage VARCHAR(128),".
100 "download VARCHAR(128),".
101 "changelog VARCHAR(128),".
105 "oneliner VARCHAR(96) NOT NULL,".
107 "PRIMARY KEY (name)".
110 &dbRaw("create(freshmeat)", $query);
114 if (!exists $db{'karma'}) {
115 print " creating new table karma...\n";
117 $query = "CREATE TABLE karma (".
118 "nick VARCHAR(20) NOT NULL,".
119 "karma SMALLINT UNSIGNED,".
121 "PRIMARY KEY (nick)".
124 &dbRaw("create(karma)", $query);
128 if (!exists $db{'rootwarn'}) {
129 print " creating new table rootwarn...\n";
131 $query = "CREATE TABLE rootwarn (".
132 "nick VARCHAR(20) NOT NULL,".
133 "attempt SMALLINT UNSIGNED,".
134 "time INT NOT NULL,".
135 "host VARCHAR(80) NOT NULL,".
136 "channel VARCHAR(20) NOT NULL,".
138 "PRIMARY KEY (nick)".
141 &dbRaw("create(rootwarn)", $query);
145 if (!exists $db{'seen'}) {
146 print " creating new table seen...\n";
148 $query = "CREATE TABLE seen (".
149 "nick VARCHAR(20) NOT NULL,".
150 "time INT NOT NULL,".
151 "channel VARCHAR(20) NOT NULL,".
152 "host VARCHAR(80) NOT NULL,".
153 "messagecount SMALLINT UNSIGNED,".
154 "hehcount SMALLINT UNSIGNED,".
155 "message TINYTEXT NOT NULL,".
157 "PRIMARY KEY (nick)".
160 &dbRaw("create(seen)", $query);
165 &openDB("mysql", $adminuser, $adminpass);
168 &status("Step 1: Adding user information.");
171 if (!&dbGet("user","user",$param{'SQLUser'},"user")) {
172 &status(" Adding user $param{'SQLUser'} $dbname/user table...");
174 $query = "INSERT INTO user VALUES ".
175 "('localhost', '$param{'SQLUser'}', ".
176 "password('$param{'SQLPass'}'), ";
178 $query .= "'Y','Y','Y','Y','N','N','N','N','N','N','N','N','N','N')";
179 ### $query .= "'Y','Y','Y','Y','N','N','N','N','N','N')";
181 &dbRaw("create(user)", $query);
184 # Step 3. what's this for?
185 if (!&dbGet("db","db",$param{'SQLUser'},"db")) {
186 &status(" Adding 'db' entry");
188 $query = "INSERT INTO db VALUES ".
189 "('localhost', '$dbname', ".
190 "'$param{'SQLUser'}', ";
192 $query .= "'Y','Y','Y','Y','Y','N','N','N','N','N')";
193 ### $query .= "'Y','Y','Y','Y','Y','N')";
195 &dbRaw("create(db)", $query);
199 &status(" Granting user access to table.");
200 foreach ("factoids","seen","freshmeat") {
201 $query = "GRANT SELECT,INSERT,UPDATE,DELETE ON $dbname.$_ TO $param{'SQLUser'}";
202 &dbRaw("GRANT", $query);
206 &status("Flushing privileges...");
207 $query = "FLUSH PRIVILEGES"; # DOES NOT WORK on slink?
208 &dbRaw("mysql(flush)", $query);
210 } elsif ($param{'DBType'} =~ /pgsql|postgres/i) {
211 if ($param{'DBType'} =~ /pgsql|postgres/i) { use Pg; } # for runtime.
212 my $dbh = Pg::connectdb("dbname=$dbname");
214 if (PGRES_CONNECTION_OK eq $conn->status) {
215 print " opened mysql connection to $param{'mysqlHost'}\n";
217 print " error: cannot connect to $param{'mysqlHost'}.\n";
218 print " $conn->errorMessage\n";
222 # retrieve a list of db's from the server.
224 foreach ($dbh->func('_ListTables')) {
229 print "Step 4: Creating the tables.\n";
232 if (!exists $db{'factoids'}) {
233 print " creating new table factoids...\n";
235 $query = "CREATE TABLE factoids (".
236 "factoid_key varying(64) NOT NULL,".
238 "requested_by varying(64),".
239 "requested_time numeric(11,0),".
240 "requested_count numeric(5,0),".
241 "created_by varying(64),".
242 "created_time numeric(11,0),".
244 "modified_by character varying(192),".
245 "modified_time numeric(11,0),".
247 "locked_by character varying(64),".
248 "locked_time numeric(11,0),".
250 "factoid_value text NOT NULL,".
252 "PRIMARY KEY (factoid_key)".
255 &dbRaw("create(factoids)", $query);
259 if (!exists $db{'freshmeat'}) {
260 print " creating new table freshmeat...\n";
262 $query = "CREATE TABLE freshmeat (".
263 "name charcter varying(64) NOT NULL,".
264 "stable character varying(32),".
265 "devel character varying(32),".
266 "section character varying(40),".
267 "license character varying(32),".
268 "homepage character varying(128),".
269 "download character varying(128),".
270 "changelog character varying(128),".
271 "deb character varying(128),".
272 "rpm character varying(128),".
273 "link character varying(55),".
274 "oneliner character varying(96) NOT NULL,".
276 "PRIMARY KEY (name)".
279 &dbRaw("create(freshmeat)", $query);
283 if (!exists $db{'karma'}) {
284 print " creating new table karma...\n";
286 $query = "CREATE TABLE karma (".
287 "nick character varying(20) NOT NULL,".
288 "karma numeric(5,0),".
290 "PRIMARY KEY (nick)".
293 &dbRaw("create(karma)", $query);
297 if (!exists $db{'rootwarn'}) {
298 print " creating new table rootwarn...\n";
300 $query = "CREATE TABLE rootwarn (".
301 "nick character varying(20) NOT NULL,".
302 "attempt numeric(5,0),".
303 "time numeric(11,0) NOT NULL,".
304 "host character varying(80) NOT NULL,".
305 "channel character varying(20) NOT NULL,".
307 "PRIMARY KEY (nick)".
310 &dbRaw("create(rootwarn)", $query);
314 if (!exists $db{'seen'}) {
315 print " creating new table seen...\n";
317 $query = "CREATE TABLE seen (".
318 "nick character varying(20) NOT NULL,".
319 "time numeric(11,0) NOT NULL,".
320 "channel character varying(20) NOT NULL,".
321 "host character varying(80) NOT NULL,".
322 "messagecount numeric(5,0),".
323 "hehcount numeric(5,0),".
324 "message text NOT NULL,".
326 "PRIMARY KEY (nick)".
329 &dbRaw("create(seen)", $query);