]> jfr.im git - irc/borknet/trunk.git/blame - core/modules/q/DBControl.java
git-svn-id: https://svn.code.sf.net/p/borknet-dev-com/code/borknet_services/trunk...
[irc/borknet/trunk.git] / core / modules / q / DBControl.java
CommitLineData
b1d4498c 1/**\r
2#\r
3# BorkNet Services Core\r
4#\r
5\r
6#\r
7# Copyright (C) 2004 Ozafy - ozafy@borknet.org - http://www.borknet.org\r
8#\r
9# This program is free software; you can redistribute it and/or\r
10# modify it under the terms of the GNU General Public License\r
11# as published by the Free Software Foundation; either version 2\r
12# of the License, or (at your option) any later version.\r
13#\r
14# This program is distributed in the hope that it will be useful,\r
15# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
17# GNU General Public License for more details.\r
18#\r
19# You should have received a copy of the GNU General Public License\r
20# along with this program; if not, write to the Free Software\r
21# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
22#\r
b1d4498c 23*/\r
24import java.sql.*;\r
25import java.util.*;\r
26import java.io.*;\r
27import java.security.*;\r
28import borknet_services.core.*;\r
29\r
30/**\r
31 * The database communication class of the Q IRC Bot.\r
32 * @author Ozafy - ozafy@borknet.org - http://www.borknet.org\r
33 */\r
34public class DBControl\r
35{\r
b1d4498c 36 /** Database connection */\r
37 private Connection con;\r
38 /** Main bot */\r
39 private Core C;\r
40\r
cb67c259
O
41 private CoreDBControl dbc;\r
42\r
b1d4498c 43 private Q Bot;\r
44\r
45 /**\r
46 * Constructs a Database connection.\r
47 * @param server Database server\r
48 * @param user Database user\r
49 * @param pass Database password\r
50 * @param db Database\r
51 * @param debug Are we debugging?\r
52 * @param B Main bot\r
53 */\r
cb67c259 54 public DBControl(Core C, Q Bot)\r
b1d4498c 55 {\r
56 try\r
57 {\r
58 this.C = C;\r
59 this.Bot = Bot;\r
cb67c259
O
60 this.dbc = C.get_dbc();\r
61 this.con = dbc.getCon();\r
b1d4498c 62 PreparedStatement pstmt = con.prepareStatement("DELETE FROM q_glines WHERE oper = 'burst/other server'");\r
63 pstmt.execute();\r
64 }\r
65 catch(Exception e)\r
66 {\r
67 C.printDebug("Database error!");\r
bd09b4c0 68 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 69 }\r
70 }\r
71\r
72 /**\r
73 * Check if a channel exists.\r
74 * @param chan channel to check\r
75 *\r
76 * @return true or false\r
77 */\r
78 public boolean chanExists(String chan)\r
79 {\r
80 try\r
81 {\r
82 PreparedStatement pstmt;\r
dec7a45d 83 pstmt = con.prepareStatement("SELECT name FROM q_channels WHERE name = ?");\r
b1d4498c 84 pstmt.setString(1,chan);\r
85 ResultSet rs = pstmt.executeQuery();\r
86 rs.first();\r
cb67c259 87 String channel = rs.getString("name");\r
b1d4498c 88 return true;\r
89 }\r
90 catch(Exception e)\r
91 {\r
92 return false;\r
93 }\r
94 }\r
95\r
96 /**\r
97 * Check if an auth exists.\r
98 * @param auth auth to check\r
99 *\r
100 * @return true or false\r
101 */\r
102 public boolean authExists(String auth)\r
103 {\r
cb67c259 104 return dbc.authExists(auth);\r
b1d4498c 105 }\r
106\r
107 /**\r
108 * Check if an auth is online\r
109 * @param auth auth to check\r
110 *\r
111 * @return true or false\r
112 */\r
113 public boolean authOnline(String auth)\r
114 {\r
cb67c259
O
115 return dbc.authOnline(auth);\r
116 }\r
117\r
118 public String getNumViaAuth(String auth)\r
119 {\r
120 return dbc.getNumViaAuth(auth);\r
b1d4498c 121 }\r
122\r
123 /**\r
124 * Check if a nick is reserved.\r
125 * @param auth nick to check\r
126 *\r
127 * @return true or false\r
128 */\r
129 public boolean isReservedNick(String auth)\r
130 {\r
cb67c259 131 return dbc.isReservedNick(auth);\r
b1d4498c 132 }\r
133\r
134 /**\r
135 * Check if a nick is reserved.\r
136 * @param auth nick to check\r
137 *\r
138 * @return true or false\r
139 */\r
140 public boolean isService(String numeric)\r
141 {\r
cb67c259 142 return dbc.isService(numeric);\r
b1d4498c 143 }\r
144\r
145 /**\r
146 * Check if a mail is blocked.\r
147 * @param mail mail to check\r
148 *\r
149 * @return true or false\r
150 */\r
151 public boolean isMailBlocked(String mail)\r
152 {\r
153 try\r
154 {\r
155 PreparedStatement pstmt;\r
dec7a45d 156 pstmt = con.prepareStatement("SELECT mail FROM q_mails");\r
b1d4498c 157 ResultSet rs = pstmt.executeQuery();\r
158 while(rs.next())\r
159 {\r
cb67c259 160 String bad = rs.getString("mail");\r
b1d4498c 161 if(mail.contains(bad))\r
162 {\r
163 return true;\r
164 }\r
165 }\r
166 return false;\r
167 }\r
168 catch(Exception e)\r
169 {\r
170 return false;\r
171 }\r
172 }\r
173\r
174 /**\r
175 * Check if a numeric exists.\r
176 * @param numer numeric to check\r
177 *\r
178 * @return true or false\r
179 */\r
180 public boolean isNumUsed(String numer)\r
181 {\r
182 try\r
183 {\r
184 PreparedStatement pstmt;\r
dec7a45d 185 pstmt = con.prepareStatement("SELECT numer FROM q_fakeusers WHERE BINARY numer = ?");\r
b1d4498c 186 pstmt.setString(1,numer);\r
187 ResultSet rs = pstmt.executeQuery();\r
188 rs.first();\r
cb67c259 189 String lev = rs.getString("numer");\r
b1d4498c 190 return true;\r
191 }\r
192 catch(Exception e)\r
193 {\r
194 return false;\r
195 }\r
196 }\r
197\r
198 /**\r
199 * Check if a numeric exists.\r
200 * @param numer numeric to check\r
201 *\r
202 * @return true or false\r
203 */\r
204 public boolean isNickUsed(String nick)\r
205 {\r
cb67c259 206 return dbc.isNickUsed(nick);\r
b1d4498c 207 }\r
208\r
209 /**\r
210 * Check if a snumeric exists.\r
211 * @param numer numeric to check\r
212 *\r
213 * @return true or false\r
214 */\r
215 public boolean isServerNumeric(String numer)\r
216 {\r
cb67c259 217 return dbc.isServerNumeric(numer);\r
b1d4498c 218 }\r
219\r
220 /**\r
221 * Check if a snumeric exists.\r
222 * @param numer numeric to check\r
223 *\r
224 * @return true or false\r
225 */\r
226 public boolean isJupeNumeric(String numer)\r
227 {\r
228 try\r
229 {\r
230 PreparedStatement pstmt;\r
dec7a45d 231 pstmt = con.prepareStatement("SELECT numer FROM q_jupes WHERE BINARY numer = ?");\r
b1d4498c 232 pstmt.setString(1,numer);\r
233 ResultSet rs = pstmt.executeQuery();\r
234 rs.first();\r
cb67c259 235 String lev = rs.getString("numer");\r
b1d4498c 236 return true;\r
237 }\r
238 catch(Exception e)\r
239 {\r
240 return false;\r
241 }\r
242 }\r
243\r
244 /**\r
245 * Check if a numeric has op on a channel\r
246 * @param user numeric to check\r
247 * @param channel channel to check\r
248 *\r
249 * @return true or false\r
250 */\r
251 public boolean isOpChan(String user, String channel)\r
252 {\r
cb67c259 253 return dbc.isOpChan(user, channel);\r
b1d4498c 254 }\r
255\r
256 /**\r
257 * Check if a numeric is on a channel\r
258 * @param user numeric to check\r
259 * @param channel channel to check\r
260 *\r
261 * @return true or false\r
262 */\r
263 public boolean isOnChan(String user, String channel)\r
264 {\r
cb67c259 265 return dbc.isOnChan(user, channel);\r
b1d4498c 266 }\r
267\r
268 /**\r
269 * Check if a host is a known op on a channel\r
270 * @param host host to check\r
271 * @param channel channel to check\r
272 *\r
273 * @return true or false\r
274 */\r
275 public boolean isKnownOpChan(String host, String channel)\r
276 {\r
cb67c259 277 return dbc.isKnownOpChan(host, channel);\r
b1d4498c 278 }\r
279\r
280 /**\r
281 * Check if a host has a chanfix level\r
282 * @param user numeric to check\r
283 * @param channel channel to check\r
284 *\r
285 * @return true or false\r
286 */\r
287 public boolean hasChanfix(String user, String channel)\r
288 {\r
cb67c259 289 return dbc.hasChanfix(user, channel);\r
b1d4498c 290 }\r
291\r
292 /**\r
293 * Check if a channel has ops\r
294 * @param channel channel to check\r
295 *\r
296 * @return true or false\r
297 */\r
298 public boolean chanHasOps(String channel)\r
299 {\r
cb67c259 300 return dbc.chanHasOps(channel);\r
b1d4498c 301 }\r
302\r
303 /**\r
304 * Check if a channel has known ops\r
305 * @param channel channel to check\r
306 *\r
307 * @return true or false\r
308 */\r
309 public boolean chanfixHasOps(String channel)\r
310 {\r
cb67c259 311 return dbc.chanfixHasOps(channel);\r
b1d4498c 312 }\r
313\r
314 /**\r
315 * Check if an ip has a trust\r
316 * @param host ip to check\r
317 *\r
318 * @return true or false\r
319 */\r
320 public boolean hostHasTrust(String host)\r
321 {\r
322 try\r
323 {\r
324 PreparedStatement pstmt;\r
dec7a45d 325 pstmt = con.prepareStatement("SELECT host FROM q_trusts WHERE host = ?");\r
b1d4498c 326 pstmt.setString(1,host);\r
327 ResultSet rs = pstmt.executeQuery();\r
328 rs.first();\r
cb67c259 329 String trusthost = rs.getString("host");\r
b1d4498c 330 return true;\r
331 }\r
332 catch(Exception e)\r
333 {\r
334 return false;\r
335 }\r
336 }\r
337\r
338 /**\r
339 * Check if an auth has a trust\r
340 * @param auth auth to check\r
341 *\r
342 * @return true or false\r
343 */\r
344 public boolean authHasTrust(String auth)\r
345 {\r
346 try\r
347 {\r
348 PreparedStatement pstmt;\r
dec7a45d 349 pstmt = con.prepareStatement("SELECT auth FROM q_trusts WHERE auth = ?");\r
b1d4498c 350 pstmt.setString(1,auth);\r
351 ResultSet rs = pstmt.executeQuery();\r
352 rs.first();\r
cb67c259 353 String trustauth = rs.getString("auth");\r
b1d4498c 354 return true;\r
355 }\r
356 catch(Exception e)\r
357 {\r
358 return false;\r
359 }\r
360 }\r
361\r
362 /**\r
363 * Check if an ip needs an ident\r
364 * @param ip ip to check\r
365 *\r
366 * @return true or false\r
367 */\r
368 public boolean hostNeedsIdent(String ip)\r
369 {\r
370 try\r
371 {\r
372 PreparedStatement pstmt;\r
dec7a45d 373 pstmt = con.prepareStatement("SELECT need-ident FROM q_trusts WHERE host = ?");\r
b1d4498c 374 pstmt.setString(1,ip);\r
375 ResultSet rs = pstmt.executeQuery();\r
376 rs.first();\r
cb67c259 377 boolean b = rs.getBoolean("need-ident");\r
b1d4498c 378 return b;\r
379 }\r
380 catch(Exception e)\r
381 {\r
382 return false;\r
383 }\r
384 }\r
385\r
386 /**\r
387 * Get the number of users on a channel\r
388 * @param channel channel to check\r
389 *\r
390 * @return the number of users on a channel\r
391 */\r
392 public int getChanUsers(String channel)\r
393 {\r
cb67c259 394 return dbc.getChanUsers(channel);\r
b1d4498c 395 }\r
396\r
397 /**\r
398 * Get the number of users authed\r
399 * @param auth auth to check\r
400 *\r
401 * @return the number of users authed\r
402 */\r
403 public int getAuthUsers(String auth)\r
404 {\r
cb67c259 405 return dbc.getAuthUsers(auth);\r
b1d4498c 406 }\r
407\r
408 /**\r
cb67c259 409 * Get the number of users connected from the same host\r
b1d4498c 410 * @param host host to check\r
411 *\r
cb67c259 412 * @return the number of users connected from the same host\r
b1d4498c 413 */\r
cb67c259 414 public int getHostCount(String host)\r
b1d4498c 415 {\r
cb67c259 416 return dbc.getHostCount(host);\r
b1d4498c 417 }\r
418\r
419 /**\r
cb67c259
O
420 * Get the number of users connected from the same host\r
421 * @param host host to check\r
b1d4498c 422 *\r
cb67c259 423 * @return the number of users connected from the same host\r
b1d4498c 424 */\r
cb67c259 425 public int getIpCount(String ip)\r
b1d4498c 426 {\r
cb67c259 427 return dbc.getIpCount(ip);\r
b1d4498c 428 }\r
429\r
430 /**\r
cb67c259
O
431 * Get the number of allowed connections from an ip\r
432 * @param host ip to check\r
b1d4498c 433 *\r
cb67c259 434 * @return the number of allowed connections from an ip\r
b1d4498c 435 */\r
cb67c259 436 public int getTrustCount(String host)\r
b1d4498c 437 {\r
438 try\r
439 {\r
440 PreparedStatement pstmt;\r
cb67c259 441 pstmt = con.prepareStatement("SELECT users FROM q_trusts WHERE host = ?");\r
b1d4498c 442 pstmt.setString(1,host);\r
443 ResultSet rs = pstmt.executeQuery();\r
444 rs.first();\r
cb67c259 445 int users = rs.getInt("users");\r
b1d4498c 446 rs.close();\r
447 return users;\r
448 }\r
449 catch(Exception e)\r
450 {\r
451 return 0;\r
452 }\r
453 }\r
454\r
455 /**\r
cb67c259
O
456 * Get the number of users authed\r
457 * @param auth auth to check\r
b1d4498c 458 *\r
cb67c259 459 * @return the number of users authed\r
b1d4498c 460 */\r
cb67c259 461 public String getChallenge(String user)\r
b1d4498c 462 {\r
463 try\r
464 {\r
465 PreparedStatement pstmt;\r
dec7a45d 466 pstmt = con.prepareStatement("SELECT challenge,time FROM q_challenge WHERE user = ?");\r
b1d4498c 467 pstmt.setString(1,user);\r
468 ResultSet rs = pstmt.executeQuery();\r
469 rs.first();\r
cb67c259
O
470 String chall = rs.getString("challenge");\r
471 Calendar cal = Calendar.getInstance();\r
472 long l = (cal.getTimeInMillis() / 1000);\r
473 if(rs.getLong("time")>=l-60)\r
b1d4498c 474 {\r
475 rs.close();\r
476 return chall;\r
477 }\r
478 else\r
479 {\r
480 rs.close();\r
481 return "0";\r
482 }\r
483 }\r
484 catch(Exception e)\r
485 {\r
486 C.debug(e);\r
487 return "0";\r
488 }\r
489 }\r
490\r
491 /**\r
492 * Get a numeric's user row\r
493 * @param numer numeric of the user to fetch\r
494 *\r
495 * @return an array of all fields\r
496 */\r
497 public String[] getUserRow(String numer)\r
498 {\r
cb67c259 499 return dbc.getUserRow(numer);\r
b1d4498c 500 }\r
501\r
502 /**\r
503 * Get an auth's user row\r
504 * @param auth auth of the user to fetch\r
505 *\r
506 * @return an array of all fields\r
507 */\r
508 public String[] getUserRowViaAuth(String auth)\r
509 {\r
cb67c259 510 return dbc.getUserRowViaAuth(auth);\r
b1d4498c 511 }\r
512\r
513 /**\r
514 * Get a hosts's user row\r
515 * @param host host of the user to fetch\r
516 *\r
517 * @return an array of all fields\r
518 */\r
519 public String[] getUserRowViaHost(String host)\r
520 {\r
cb67c259 521 return dbc.getUserRowViaHost(host);\r
b1d4498c 522 }\r
523\r
524 /**\r
525 * Get a nick's user row\r
526 * @param nick nick of the user to fetch\r
527 *\r
528 * @return an array of all fields\r
529 */\r
530 public String[] getNickRow(String nick)\r
531 {\r
cb67c259 532 return dbc.getNickRow(nick);\r
b1d4498c 533 }\r
534\r
535 /**\r
536 * Get a channel's row\r
537 * @param channel channel to fetch\r
538 *\r
539 * @return an array of all fields\r
540 */\r
541 public String[] getChanRow(String channel)\r
542 {\r
543 try\r
544 {\r
545 PreparedStatement pstmt;\r
546 pstmt = con.prepareStatement("SELECT * FROM q_channels WHERE name = ?");\r
547 pstmt.setString(1,channel);\r
548 ResultSet rs = pstmt.executeQuery();\r
549 rs.first();\r
cb67c259 550 return new String[]{ rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), rs.getString(7), rs.getString(8), rs.getString(9), rs.getString(10), rs.getString(11)};\r
b1d4498c 551 }\r
552 catch(Exception e)\r
553 {\r
554 return new String[]{"0","0","0","0","0","0","0","0","0","0","0","0","0"};\r
555 }\r
556 }\r
557\r
558 /**\r
559 * Get an auth's row\r
560 * @param nick auth to fetch\r
561 *\r
562 * @return an array of all fields\r
563 */\r
564 public String[] getAuthRow(String nick)\r
565 {\r
cb67c259 566 return dbc.getAuthRow(nick);\r
b1d4498c 567 }\r
568\r
569 /**\r
570 * Get an auth's row WITH it's index\r
571 * @param nick auth to fetch\r
572 *\r
573 * @return an array of all fields, including the index!\r
574 */\r
cb67c259 575 /*public String[] getAuthRowWithIndex(String nick)\r
b1d4498c 576 {\r
577 try\r
578 {\r
579 PreparedStatement pstmt;\r
580 pstmt = con.prepareStatement("SELECT * FROM auths WHERE authnick = ?");\r
581 pstmt.setString(1,nick);\r
582 ResultSet rs = pstmt.executeQuery();\r
583 rs.first();\r
584 return new String[]{ rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), rs.getString(7), rs.getString(8)};\r
585 }\r
586 catch(Exception e)\r
587 {\r
588 return new String[]{"0","0","0","0","0","0","0","0","0","0"};\r
589 }\r
cb67c259 590 }*/\r
b1d4498c 591\r
592 /**\r
cb67c259
O
593 * Get an auth's access on a channel\r
594 * @param nick auth to fetch\r
595 * @param channel channel to fetch\r
b1d4498c 596 *\r
cb67c259 597 * @return an array of all fields\r
b1d4498c 598 */\r
cb67c259 599 public String[] getAccRow(String nick,String channel)\r
b1d4498c 600 {\r
601 try\r
602 {\r
603 PreparedStatement pstmt;\r
cb67c259
O
604 pstmt = con.prepareStatement("SELECT * FROM q_access WHERE user = ? AND channel = ?");\r
605 pstmt.setString(1,nick);\r
606 pstmt.setString(2,channel);\r
b1d4498c 607 ResultSet rs = pstmt.executeQuery();\r
cb67c259
O
608 rs.first();\r
609 return new String[]{ rs.getString(1), rs.getString(2), rs.getString(3)};\r
b1d4498c 610 }\r
611 catch(Exception e)\r
612 {\r
cb67c259 613 return new String[]{"0","0","0","0","0","0","0","0","0","0"};\r
b1d4498c 614 }\r
615 }\r
616\r
617 /**\r
cb67c259
O
618 * Get a user's channels\r
619 * @param user user's numeric\r
b1d4498c 620 *\r
cb67c259
O
621 * @return an array of all channels\r
622 */\r
b6e55943 623 public ArrayList<String> getUserChans(String user)\r
cb67c259
O
624 {\r
625 return dbc.getUserChans(user);\r
626 }\r
627\r
628 /**\r
629 * Get a channel's users\r
630 * @param chan channel to fetch\r
631 *\r
632 * @return an array of all users\r
633 */\r
634 public String[] getChannelUsers(String chan)\r
635 {\r
636 return dbc.getChannelUsers(chan);\r
637 }\r
638\r
639 /**\r
640 * Get a channel's bans\r
641 * @param channel channel to fetch\r
642 *\r
643 * @return an array of all bans\r
b1d4498c 644 */\r
cb67c259 645 public String[] getBanList(String channel)\r
b1d4498c 646 {\r
647 try\r
648 {\r
649 PreparedStatement pstmt;\r
cb67c259
O
650 pstmt = con.prepareStatement("SELECT host FROM q_bans WHERE name = ?");\r
651 pstmt.setString(1,channel);\r
b1d4498c 652 ResultSet rs = pstmt.executeQuery();\r
653 ArrayList<String> a = new ArrayList<String>();\r
b1d4498c 654 while(rs.next())\r
655 {\r
cb67c259 656 a.add(rs.getString("host"));\r
b1d4498c 657 }\r
b1d4498c 658 if(a.size()>0)\r
659 {\r
cb67c259 660 String[] r = (String[]) a.toArray(new String[ a.size() ]);\r
b1d4498c 661 return r;\r
662 }\r
663 else\r
664 {\r
cb67c259 665 return new String[]{"0","0","0","0","0","0","0","0","0","0"};\r
b1d4498c 666 }\r
667 }\r
668 catch(Exception e)\r
669 {\r
cb67c259 670 return new String[]{"0","0","0","0","0","0","0","0","0","0"};\r
b1d4498c 671 }\r
672 }\r
673\r
674 /**\r
cb67c259
O
675 * Get all registerd channels\r
676 * @return an array of all registerd channels\r
b1d4498c 677 */\r
cb67c259 678 public String[] getChanTable()\r
b1d4498c 679 {\r
680 try\r
681 {\r
682 PreparedStatement pstmt;\r
cb67c259 683 pstmt = con.prepareStatement("SELECT name FROM q_channels");\r
b1d4498c 684 ResultSet rs = pstmt.executeQuery();\r
685 ArrayList<String> a = new ArrayList<String>();\r
b1d4498c 686 while(rs.next())\r
687 {\r
cb67c259 688 a.add(rs.getString("name"));\r
b1d4498c 689 }\r
b1d4498c 690 if(a.size()>0)\r
691 {\r
cb67c259 692 String[] r = (String[]) a.toArray(new String[ a.size() ]);\r
b1d4498c 693 return r;\r
694 }\r
695 else\r
696 {\r
cb67c259 697 return new String[]{"0","0","0","0","0","0","0","0","0","0"};\r
b1d4498c 698 }\r
699 }\r
700 catch(Exception e)\r
701 {\r
cb67c259 702 return new String[]{"0","0","0","0","0","0","0","0","0","0"};\r
b1d4498c 703 }\r
704 }\r
705\r
cb67c259
O
706 /**\r
707 * Get all channels\r
708 * @return an array of all channels\r
709 */\r
710 public String[] getUserChanTable()\r
711 {\r
712 return dbc.getUserChanTable();\r
713 }\r
714\r
715 /**\r
716 * Get all numerics\r
717 * @return an array of all numerics\r
718 */\r
719 public String[] getNumericTable()\r
720 {\r
721 return dbc.getNumericTable();\r
722 }\r
723\r
724 /**\r
725 * Get all numerics\r
726 * @return an array of all numerics\r
727 */\r
728 public String[] getNumericTable(String server)\r
729 {\r
730 return dbc.getNumericTable(server);\r
731 }\r
732\r
733 /**\r
734 * Get all numerics\r
735 * @return an array of all numerics\r
736 */\r
737 /*public String[] getNumericTableUniqueHosts()\r
738 {\r
739 return dbc.getNumericTableUniqueHosts();\r
740 }*/\r
741\r
742 /**\r
743 * Get all staff members\r
744 * @return an array of all staff members\r
745 */\r
746 public ArrayList<String> getStaffList()\r
747 {\r
748 return dbc.getStaffList();\r
749 }\r
750\r
751 /**\r
752 * Get all user rows connected to an auth\r
753 * @param auth auth to fetch\r
754 *\r
755 * @return a double array of all users\r
756 */\r
757 public ArrayList<String[]> getUserRowsViaAuth(String auth)\r
758 {\r
759 return dbc.getUserRowsViaAuth(auth);\r
760 }\r
761\r
b1d4498c 762 /**\r
763 * Get a user's full access\r
764 * @param user auth to fetch\r
765 *\r
766 * @return a double array of all access lines\r
767 */\r
768 public String[][] getAccessTable(String user)\r
769 {\r
770 try\r
771 {\r
772 PreparedStatement pstmt;\r
cb67c259 773 pstmt = con.prepareStatement("SELECT channel,flags FROM q_access WHERE user = ?");\r
b1d4498c 774 pstmt.setString(1,user);\r
775 ResultSet rs = pstmt.executeQuery();\r
776 ArrayList<String> a = new ArrayList<String>();\r
777 ArrayList<String> b = new ArrayList<String>();\r
778 while(rs.next())\r
779 {\r
cb67c259
O
780 a.add(rs.getString("channel"));\r
781 b.add(rs.getString("flags"));\r
b1d4498c 782 }\r
783 String[][] r = new String[a.size()][2];\r
784 if(a.size()>0)\r
785 {\r
786 for(int n=0; n<r.length; n++)\r
787 {\r
788 r[n][0] = a.get(n);\r
789 r[n][1] = b.get(n);\r
790 }\r
791 return r;\r
792 }\r
793 else\r
794 {\r
795 return new String[][] {{"0","0"},{"0","0"}};\r
796 }\r
797 }\r
798 catch(Exception e)\r
799 {\r
800 return new String[][] {{"0","0"},{"0","0"}};\r
801 }\r
802 }\r
803\r
804 /**\r
805 * Get a common access list of two auths\r
806 * @param user auth to fetch\r
807 * @param userinfo auth to fetch\r
808 *\r
809 * @return a double array of all access lines\r
810 */\r
811 public String[][] getCommonAccessTable(String user, String userinfo)\r
812 {\r
813 try\r
814 {\r
815 PreparedStatement pstmt;\r
cb67c259 816 pstmt = con.prepareStatement("SELECT channel,flags FROM q_access WHERE user = ?");\r
b1d4498c 817 pstmt.setString(1,userinfo);\r
818 ResultSet rs = pstmt.executeQuery();\r
cb67c259 819 pstmt = con.prepareStatement("SELECT channel FROM q_access WHERE user = ?");\r
b1d4498c 820 pstmt.setString(1,user);\r
821 ResultSet rs2 = pstmt.executeQuery();\r
822 ArrayList<String> c = new ArrayList<String>();\r
823 while(rs2.next())\r
824 {\r
cb67c259 825 c.add(rs2.getString("channel").toLowerCase());\r
b1d4498c 826 }\r
827 ArrayList<String> a = new ArrayList<String>();\r
828 ArrayList<String> b = new ArrayList<String>();\r
829 while(rs.next())\r
830 {\r
cb67c259 831 if(c.indexOf(rs.getString("channel").toLowerCase()) != -1)\r
b1d4498c 832 {\r
cb67c259
O
833 a.add(rs.getString("channel"));\r
834 b.add(rs.getString("flags"));\r
b1d4498c 835 }\r
836 }\r
837 String[][] r = new String[a.size()][2];\r
838 if(a.size()>0)\r
839 {\r
840 for(int n=0; n<r.length; n++)\r
841 {\r
842 r[n][0] = a.get(n);\r
843 r[n][1] = b.get(n);\r
844 }\r
845 return r;\r
846 }\r
847 else\r
848 {\r
849 return new String[][] {{"0","0"},{"0","0"}};\r
850 }\r
851 }\r
852 catch(Exception e)\r
853 {\r
854 return new String[][] {{"0","0"},{"0","0"}};\r
855 }\r
856 }\r
857\r
858 /**\r
859 * Get a all users with access to a channel\r
860 * @param channel channel to fetch\r
861 *\r
862 * @return a double array of all access lines\r
863 */\r
864 public String[][] getChanlev(String channel)\r
865 {\r
866 try\r
867 {\r
868 PreparedStatement pstmt;\r
cb67c259 869 pstmt = con.prepareStatement("SELECT user,flags FROM q_access WHERE channel = ?");\r
b1d4498c 870 pstmt.setString(1,channel);\r
871 ResultSet rs = pstmt.executeQuery();\r
872 ArrayList<String> a = new ArrayList<String>();\r
873 ArrayList<String> b = new ArrayList<String>();\r
874 while(rs.next())\r
875 {\r
cb67c259
O
876 a.add(rs.getString("user"));\r
877 b.add(rs.getString("flags"));\r
b1d4498c 878 }\r
879 String[][] r = new String[a.size()][2];\r
880 if(a.size()>0)\r
881 {\r
882 for(int n=0; n<r.length; n++)\r
883 {\r
884 r[n][0] = a.get(n);\r
885 r[n][1] = b.get(n);\r
886 }\r
887 return r;\r
888 }\r
889 else\r
890 {\r
891 return new String[][] {{"0","0"},{"0","0"}};\r
892 }\r
893 }\r
894 catch(Exception e)\r
895 {\r
896 return new String[][] {{"0","0"},{"0","0"}};\r
897 }\r
898 }\r
899\r
900 /**\r
901 * Get a list of all glines matching a host\r
902 * @param host host to fetch\r
903 *\r
904 * @return a double array of all glines\r
905 */\r
906 public String[][] getGlist(String host)\r
907 {\r
908 try\r
909 {\r
910 PreparedStatement pstmt;\r
911 pstmt = con.prepareStatement("SELECT * FROM q_glines WHERE gline like ?");\r
912 pstmt.setString(1,host);\r
913 ResultSet rs = pstmt.executeQuery();\r
914 ArrayList<String> a = new ArrayList<String>();\r
915 ArrayList<Integer> b = new ArrayList<Integer>();\r
916 ArrayList<String> c = new ArrayList<String>();\r
917 ArrayList<String> d = new ArrayList<String>();\r
918 while(rs.next())\r
919 {\r
cb67c259
O
920 a.add(rs.getString(1));\r
921 b.add(Integer.parseInt(rs.getString(2)) + Integer.parseInt(rs.getString(3)) - Integer.parseInt(C.get_time()));\r
922 c.add(rs.getString(5));\r
923 d.add(rs.getString(4));\r
b1d4498c 924 }\r
925 String[][] r = new String[a.size()][4];\r
926 if(a.size()>0)\r
927 {\r
928 for(int n=0; n<r.length; n++)\r
929 {\r
930 r[n][0] = a.get(n);\r
931 r[n][1] = b.get(n)+"";\r
932 r[n][2] = c.get(n);\r
933 r[n][3] = d.get(n);\r
934 }\r
935 return r;\r
936 }\r
937 else\r
938 {\r
939 return new String[][] {{"0","0"},{"0","0"}};\r
940 }\r
941 }\r
942 catch(Exception e)\r
943 {\r
944 return new String[][] {{"0","0"},{"0","0"}};\r
945 }\r
946 }\r
947\r
948 /**\r
949 * Get a list of all jupes matching a host\r
950 * @param host host to fetch\r
951 *\r
952 * @return a double array of all jupes\r
953 */\r
954 public String[][] getJupelist(String host)\r
955 {\r
956 try\r
957 {\r
958 PreparedStatement pstmt;\r
959 pstmt = con.prepareStatement("SELECT * FROM q_jupes WHERE jupe like ?");\r
960 pstmt.setString(1,host);\r
961 ResultSet rs = pstmt.executeQuery();\r
962 ArrayList<String> a = new ArrayList<String>();\r
963 ArrayList<String> b = new ArrayList<String>();\r
bd09b4c0 964 ArrayList<String> c = new ArrayList<String>();\r
b1d4498c 965 ArrayList<String> d = new ArrayList<String>();\r
966 ArrayList<String> e = new ArrayList<String>();\r
bd09b4c0 967 ArrayList<String> f = new ArrayList<String>();\r
b1d4498c 968 while(rs.next())\r
969 {\r
cb67c259
O
970 a.add(rs.getString(1));\r
971 b.add(rs.getString(2));\r
bd09b4c0 972 //c.add(Integer.parseInt(rs.getString(3)) + Integer.parseInt(rs.getString(4)) - Integer.parseInt(C.get_time()));\r
973 c.add(rs.getString(3));\r
974 d.add(rs.getString(4));\r
975 e.add(rs.getString(5));\r
976 f.add(rs.getString(6));\r
b1d4498c 977 }\r
bd09b4c0 978 String[][] r = new String[a.size()][6];\r
b1d4498c 979 if(a.size()>0)\r
980 {\r
981 for(int n=0; n<r.length; n++)\r
982 {\r
983 r[n][0] = a.get(n);\r
984 r[n][1] = b.get(n);\r
bd09b4c0 985 r[n][2] = c.get(n);\r
b1d4498c 986 r[n][3] = d.get(n);\r
987 r[n][4] = e.get(n);\r
bd09b4c0 988 r[n][5] = f.get(n);\r
b1d4498c 989 }\r
990 return r;\r
991 }\r
992 else\r
993 {\r
994 return new String[][] {{"0","0"},{"0","0"}};\r
995 }\r
996 }\r
997 catch(Exception e)\r
998 {\r
999 return new String[][] {{"0","0"},{"0","0"}};\r
1000 }\r
1001 }\r
1002\r
1003 /**\r
1004 * Get a list of all trusts matching a host\r
1005 * @param host host to fetch\r
1006 *\r
1007 * @return a double array of all trusts\r
1008 */\r
1009 public String[][] getTrustList(String host)\r
1010 {\r
1011 try\r
1012 {\r
1013 PreparedStatement pstmt;\r
1014 pstmt = con.prepareStatement("SELECT * FROM q_trusts WHERE host like ?");\r
1015 pstmt.setString(1,host);\r
1016 ResultSet rs = pstmt.executeQuery();\r
1017 ArrayList<String> a = new ArrayList<String>();\r
1018 ArrayList<String> b = new ArrayList<String>();\r
1019 ArrayList<String> c = new ArrayList<String>();\r
1020 ArrayList<String> d = new ArrayList<String>();\r
1021 ArrayList<String> e = new ArrayList<String>();\r
1022 while(rs.next())\r
1023 {\r
cb67c259
O
1024 a.add(rs.getString(1));\r
1025 b.add(rs.getString(2));\r
1026 c.add(rs.getString(3));\r
1027 d.add(rs.getString(4));\r
1028 e.add(rs.getString(5));\r
b1d4498c 1029 }\r
1030 String[][] r = new String[a.size()][5];\r
1031 if(a.size()>0)\r
1032 {\r
1033 for(int n=0; n<r.length; n++)\r
1034 {\r
1035 r[n][0] = a.get(n);\r
1036 r[n][1] = b.get(n);\r
1037 r[n][2] = c.get(n);\r
1038 r[n][3] = d.get(n);\r
1039 r[n][4] = e.get(n);\r
1040 }\r
1041 return r;\r
1042 }\r
1043 else\r
1044 {\r
1045 return new String[][] {{"0","0"},{"0","0"}};\r
1046 }\r
1047 }\r
1048 catch(Exception e)\r
1049 {\r
1050 return new String[][] {{"0","0"},{"0","0"}};\r
1051 }\r
1052 }\r
1053\r
1054 /**\r
1055 * Get a list of all fakeusers matching a nick\r
1056 * @param nick nick to fetch\r
1057 *\r
1058 * @return a double array of all fakeusers\r
1059 */\r
1060 public String[][] getFakeList(String nick)\r
1061 {\r
1062 try\r
1063 {\r
1064 PreparedStatement pstmt;\r
1065 pstmt = con.prepareStatement("SELECT * FROM q_fakeusers WHERE nick like ?");\r
1066 pstmt.setString(1,nick);\r
1067 ResultSet rs = pstmt.executeQuery();\r
1068 ArrayList<String> a = new ArrayList<String>();\r
1069 ArrayList<String> b = new ArrayList<String>();\r
1070 ArrayList<String> c = new ArrayList<String>();\r
1071 ArrayList<String> d = new ArrayList<String>();\r
1072 ArrayList<String> e = new ArrayList<String>();\r
1073 while(rs.next())\r
1074 {\r
cb67c259
O
1075 a.add(rs.getString(1));\r
1076 b.add(rs.getString(2));\r
1077 c.add(rs.getString(3));\r
1078 d.add(rs.getString(4));\r
1079 e.add(rs.getString(5));\r
b1d4498c 1080 }\r
1081 String[][] r = new String[a.size()][5];\r
1082 if(a.size()>0)\r
1083 {\r
1084 for(int n=0; n<r.length; n++)\r
1085 {\r
1086 r[n][0] = a.get(n);\r
1087 r[n][1] = b.get(n)+"";\r
1088 r[n][2] = c.get(n);\r
1089 r[n][3] = d.get(n);\r
1090 r[n][4] = e.get(n);\r
1091 }\r
1092 return r;\r
1093 }\r
1094 else\r
1095 {\r
1096 return new String[][] {{"0","0"},{"0","0"}};\r
1097 }\r
1098 }\r
1099 catch(Exception e)\r
1100 {\r
1101 return new String[][] {{"0","0"},{"0","0"}};\r
1102 }\r
1103 }\r
1104\r
1105 /**\r
1106 * Get a list of all blocked e-mails matching mail\r
1107 * @param mail mail to fetch\r
1108 *\r
1109 * @return a double array of all fakeusers\r
1110 */\r
1111 public String[][] getMailList(String mail)\r
1112 {\r
1113 try\r
1114 {\r
1115 PreparedStatement pstmt;\r
cb67c259 1116 pstmt = con.prepareStatement("SELECT mail FROM q_mails WHERE mail like ?");\r
b1d4498c 1117 pstmt.setString(1,mail);\r
1118 ResultSet rs = pstmt.executeQuery();\r
1119 ArrayList<String> a = new ArrayList<String>();\r
1120 while(rs.next())\r
1121 {\r
cb67c259 1122 a.add(rs.getString("mail"));\r
b1d4498c 1123 }\r
1124 String[][] r = new String[a.size()][5];\r
1125 if(a.size()>0)\r
1126 {\r
1127 for(int n=0; n<r.length; n++)\r
1128 {\r
1129 r[n][0] = a.get(n);\r
1130 }\r
1131 return r;\r
1132 }\r
1133 else\r
1134 {\r
1135 return new String[][] {{"0","0"},{"0","0"}};\r
1136 }\r
1137 }\r
1138 catch(Exception e)\r
1139 {\r
1140 return new String[][] {{"0","0"},{"0","0"}};\r
1141 }\r
1142 }\r
1143\r
1144 /**\r
cb67c259
O
1145 * Check if a mail is blocked.\r
1146 * @param mail mail to check\r
1147 *\r
1148 * @return true or false\r
b1d4498c 1149 */\r
cb67c259 1150 public String getInfoLine()\r
b1d4498c 1151 {\r
1152 try\r
1153 {\r
b1d4498c 1154 PreparedStatement pstmt;\r
cb67c259
O
1155 pstmt = con.prepareStatement("SELECT info FROM q_variables LIMIT 1");\r
1156 ResultSet rs = pstmt.executeQuery();\r
1157 rs.first();\r
1158 return rs.getString("info");\r
b1d4498c 1159 }\r
cb67c259 1160 catch(Exception e)\r
b1d4498c 1161 {\r
cb67c259 1162 return "0";\r
b1d4498c 1163 }\r
1164 }\r
1165\r
1166 /**\r
cb67c259
O
1167 * Check if a mail is blocked.\r
1168 * @param mail mail to check\r
1169 *\r
1170 * @return true or false\r
b1d4498c 1171 */\r
cb67c259 1172 public void setInfoLine(String info)\r
b1d4498c 1173 {\r
1174 try\r
1175 {\r
b1d4498c 1176 PreparedStatement pstmt;\r
cb67c259 1177 pstmt = con.prepareStatement("UPDATE q_variables SET info = ?");\r
b1d4498c 1178 pstmt.setString(1,info);\r
b1d4498c 1179 pstmt.executeUpdate();\r
1180 }\r
1181 catch ( SQLException e )\r
1182 {\r
1183 System.out.println ( "Error executing sql statement" );\r
1184 e.printStackTrace();\r
bd09b4c0 1185 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1186 }\r
1187 }\r
1188\r
cb67c259
O
1189 /**\r
1190 * Set a userline field to a new value\r
1191 * @param numer numeric of user to adapt\r
1192 * @param colum colum to change\r
1193 * @param info new info to insert\r
1194 */\r
1195 public void setUserField(String numer, int colum, String info)\r
1196 {\r
1197 dbc.setUserField(numer, colum, info);\r
1198 }\r
1199\r
1200 /**\r
1201 * Set an authline field to a new value\r
1202 * @param auth auth of user to adapt\r
1203 * @param colum colum to change\r
1204 * @param info new info to insert\r
1205 */\r
1206 public void setAuthField(String auth, int colum, String info)\r
1207 {\r
1208 dbc.setAuthField(auth, colum, info);\r
1209 }\r
1210\r
b1d4498c 1211 /**\r
1212 * Set a chanline field to a new value\r
1213 * @param chan chan to adapt\r
1214 * @param colum colum to change\r
1215 * @param info new info to insert\r
1216 */\r
1217 public void setChanField(String chan, int colum, String info)\r
1218 {\r
1219 try\r
1220 {\r
1221 String set[] = new String[]{"name", "flags", "modes","welcome","topic","last","chanlimit","suspended","chankey","level","owner"};\r
1222 PreparedStatement pstmt;\r
1223 pstmt = con.prepareStatement("UPDATE q_channels SET "+set[colum]+" = ? WHERE name = ?");\r
cb67c259
O
1224 if(colum==6 || colum == 9)\r
1225 {\r
1226 pstmt.setInt(1,Integer.parseInt(info));\r
1227 }\r
1228 else if(colum==7)\r
1229 {\r
1230 pstmt.setBoolean(1,Boolean.parseBoolean(info));\r
1231 }\r
1232 else if(colum==5)\r
1233 {\r
1234 pstmt.setLong(1,Long.parseLong(info));\r
1235 }\r
1236 else\r
1237 {\r
1238 pstmt.setString(1,info);\r
1239 }\r
b1d4498c 1240 pstmt.setString(2,chan);\r
1241 pstmt.executeUpdate();\r
1242 }\r
1243 catch ( SQLException e )\r
1244 {\r
1245 System.out.println ( "Error executing sql statement" );\r
1246 e.printStackTrace();\r
bd09b4c0 1247 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1248 }\r
1249 }\r
1250\r
1251 /**\r
1252 * Set an accessline field to a new value\r
1253 * @param auth auth of user to adapt\r
1254 * @param channel channel to adapt\r
1255 * @param access new info to insert\r
1256 */\r
1257 public void setAccessRow(String auth, String channel, String access)\r
1258 {\r
1259 try\r
1260 {\r
1261 PreparedStatement pstmt;\r
1262 pstmt = con.prepareStatement("UPDATE q_access SET flags = ? WHERE user = ? AND channel = ?");\r
1263 pstmt.setString(1,access);\r
1264 pstmt.setString(2,auth);\r
1265 pstmt.setString(3,channel);\r
1266 pstmt.executeUpdate();\r
1267 }\r
1268 catch ( SQLException e )\r
1269 {\r
1270 System.out.println ( "Error executing sql statement" );\r
1271 e.printStackTrace();\r
bd09b4c0 1272 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1273 }\r
1274 }\r
1275\r
1276 /**\r
1277 * Move the bot from one channel to another\r
1278 * @param oldchan channel where the bot is\r
1279 * @param newchan channel where the bot will go to\r
1280 */\r
1281 public void moveChan(String oldchan, String newchan)\r
1282 {\r
1283 try\r
1284 {\r
1285 String chan[] = getChanRow(oldchan);\r
cb67c259 1286 addChan(newchan, chan[1], chan[2], chan[3], chan[4], Long.parseLong(chan[5]), Integer.parseInt(chan[6]), Boolean.parseBoolean(chan[7]), chan[8], Integer.parseInt(chan[9]), chan[10]);\r
b1d4498c 1287 String bans[] = getBanList(oldchan);\r
1288 if(!bans[0].equals("0"))\r
1289 {\r
1290 for(int n=0; n<bans.length; n++)\r
1291 {\r
1292 addBan(newchan,bans[n]);\r
1293 }\r
1294 }\r
1295 String acc[][] = getChanlev(oldchan);\r
1296 for(int n=0; n<acc.length; n++)\r
1297 {\r
1298 addAccess(acc[n][0],newchan,acc[n][1]);\r
1299 }\r
1300 delChan(oldchan);\r
1301 }\r
1302 catch ( Exception e )\r
1303 {\r
1304 System.out.println ( "Error executing sql statement" );\r
1305 e.printStackTrace();\r
bd09b4c0 1306 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1307 }\r
1308 }\r
1309\r
1310 /**\r
1311 * Delete a channel\r
1312 * @param channel channel to delete\r
1313 */\r
1314 public void delChan(String channel)\r
1315 {\r
1316 try\r
1317 {\r
1318 PreparedStatement pstmt;\r
1319 pstmt = con.prepareStatement("DELETE FROM q_channels WHERE name = ? LIMIT 1");\r
1320 pstmt.setString(1,channel);\r
1321 pstmt.executeUpdate();\r
1322 pstmt = con.prepareStatement("DELETE FROM q_access WHERE channel = ?");\r
1323 pstmt.setString(1,channel);\r
1324 pstmt.executeUpdate();\r
1325 pstmt = con.prepareStatement("DELETE FROM q_bans WHERE name = ?");\r
1326 pstmt.setString(1,channel);\r
1327 pstmt.executeUpdate();\r
1328 }\r
1329 catch ( SQLException e )\r
1330 {\r
1331 System.out.println ( "Error executing sql statement" );\r
1332 e.printStackTrace();\r
bd09b4c0 1333 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1334 }\r
1335 }\r
1336\r
1337 /**\r
1338 * Delete an auth\r
1339 * @param auth auth to delete\r
1340 */\r
1341 public void delAuth(String auth)\r
1342 {\r
1343 try\r
1344 {\r
cb67c259 1345 dbc.delAuth(auth);\r
b1d4498c 1346 PreparedStatement pstmt;\r
b1d4498c 1347 pstmt = con.prepareStatement("DELETE FROM q_access WHERE user = ?");\r
1348 pstmt.setString(1,auth);\r
1349 pstmt.executeUpdate();\r
1350 pstmt = con.prepareStatement("DELETE FROM q_pwrequest WHERE user = ?");\r
1351 pstmt.setString(1,auth);\r
1352 pstmt.executeUpdate();\r
1353 }\r
1354 catch ( SQLException e )\r
1355 {\r
1356 System.out.println ( "Error executing sql statement" );\r
1357 e.printStackTrace();\r
bd09b4c0 1358 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1359 }\r
1360 }\r
1361\r
1362 /**\r
1363 * Delete a ban\r
1364 * @param channel channel where the ban needs removal\r
1365 * @param nr id of the ban to delete\r
1366 */\r
1367 public void delBan(String channel, int nr)\r
1368 {\r
1369 try\r
1370 {\r
1371 PreparedStatement pstmt;\r
cb67c259 1372 pstmt = con.prepareStatement("SELECT host FROM q_bans WHERE name = ? LIMIT "+nr+",1");\r
b1d4498c 1373 pstmt.setString(1,channel);\r
1374 ResultSet rs = pstmt.executeQuery();\r
1375 String host = "";\r
1376 while(rs.next())\r
1377 {\r
cb67c259
O
1378 C.cmd_mode_me(Bot.get_num(),Bot.get_corenum(),rs.getString("host"), channel , "-b");\r
1379 host = rs.getString("host");\r
b1d4498c 1380 }\r
1381 pstmt = con.prepareStatement("DELETE FROM q_bans WHERE name = ? AND host = ?");\r
1382 pstmt.setString(1,channel);\r
1383 pstmt.setString(2,host);\r
1384 pstmt.executeUpdate();\r
1385 }\r
1386 catch ( SQLException e )\r
1387 {\r
1388 System.out.println ( "Error executing sql statement" );\r
1389 e.printStackTrace();\r
bd09b4c0 1390 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1391 }\r
1392 }\r
1393\r
1394 /**\r
1395 * Delete an accessrow\r
1396 * @param auth auth of user to delete\r
1397 * @param channel channel where access should be removed\r
1398 */\r
1399 public void delAccessRow(String auth, String channel)\r
1400 {\r
1401 try\r
1402 {\r
1403 PreparedStatement pstmt;\r
1404 pstmt = con.prepareStatement("DELETE FROM q_access WHERE user = ? AND channel = ?");\r
1405 pstmt.setString(1,auth);\r
1406 pstmt.setString(2,channel);\r
1407 pstmt.executeUpdate();\r
1408 }\r
1409 catch ( SQLException e )\r
1410 {\r
1411 System.out.println ( "Error executing sql statement" );\r
1412 e.printStackTrace();\r
bd09b4c0 1413 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1414 }\r
1415 }\r
1416\r
1417 /**\r
1418 * Delete a gline\r
1419 * @param host host to be removed\r
1420 */\r
1421 public void delGline(String host)\r
1422 {\r
1423 try\r
1424 {\r
1425 PreparedStatement pstmt;\r
cb67c259 1426 pstmt = con.prepareStatement("SELECT gline FROM q_glines WHERE gline like ?");\r
b1d4498c 1427 pstmt.setString(1,host);\r
1428 ResultSet rs = pstmt.executeQuery();\r
1429 while(rs.next())\r
1430 {\r
cb67c259 1431 C.cmd_ungline(Bot.get_num(),rs.getString("gline"));\r
b1d4498c 1432 }\r
1433 pstmt = con.prepareStatement("DELETE FROM q_glines WHERE gline like ?");\r
1434 pstmt.setString(1,host);\r
1435 pstmt.executeUpdate();\r
1436 }\r
1437 catch ( SQLException e )\r
1438 {\r
1439 System.out.println ( "Error executing sql statement" );\r
1440 e.printStackTrace();\r
bd09b4c0 1441 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1442 }\r
1443 }\r
1444\r
1445 /**\r
1446 * Delete a gline\r
1447 * @param host host to be removed\r
1448 */\r
1449 public void delJupe(String host, String numer)\r
1450 {\r
1451 try\r
1452 {\r
1453 PreparedStatement pstmt;\r
bd09b4c0 1454 pstmt = con.prepareStatement("SELECT jupe FROM q_jupes WHERE jupe like ?");\r
b1d4498c 1455 pstmt.setString(1,host);\r
1456 ResultSet rs = pstmt.executeQuery();\r
1457 while(rs.next())\r
1458 {\r
bd09b4c0 1459 C.cmd_unjupe(numer, rs.getString("jupe"));\r
b1d4498c 1460 }\r
1461 pstmt = con.prepareStatement("DELETE FROM q_jupes WHERE jupe like ?");\r
1462 pstmt.setString(1,host);\r
1463 pstmt.executeUpdate();\r
1464 }\r
1465 catch ( SQLException e )\r
1466 {\r
1467 System.out.println ( "Error executing sql statement" );\r
1468 e.printStackTrace();\r
bd09b4c0 1469 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1470 }\r
1471 }\r
1472\r
1473 /**\r
1474 * Delete a trust\r
1475 * @param host host to be removed\r
1476 */\r
1477 public void delTrust(String host)\r
1478 {\r
1479 try\r
1480 {\r
1481 PreparedStatement pstmt;\r
1482 pstmt = con.prepareStatement("DELETE FROM q_trusts WHERE host like ?");\r
1483 pstmt.setString(1,host);\r
1484 pstmt.executeUpdate();\r
1485 }\r
1486 catch ( SQLException e )\r
1487 {\r
1488 System.out.println ( "Error executing sql statement" );\r
1489 e.printStackTrace();\r
bd09b4c0 1490 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1491 }\r
1492 }\r
1493\r
1494 /**\r
1495 * Delete a fakeuser\r
1496 * @param numer numeric of the fakeuser to be removed\r
1497 */\r
1498 public void delFakeUser(String numer)\r
1499 {\r
1500 try\r
1501 {\r
1502 PreparedStatement pstmt;\r
1503 pstmt = con.prepareStatement("DELETE FROM q_fakeusers WHERE BINARY numer = ? ");\r
1504 pstmt.setString(1,numer);\r
1505 pstmt.executeUpdate();\r
1506 }\r
1507 catch ( SQLException e )\r
1508 {\r
1509 System.out.println ( "Error executing sql statement" );\r
1510 e.printStackTrace();\r
bd09b4c0 1511 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1512 }\r
1513 }\r
1514\r
1515 /**\r
1516 * Delete a mail\r
1517 * @param mail mail to be removed\r
1518 */\r
1519 public void delMail(String mail)\r
1520 {\r
1521 try\r
1522 {\r
1523 PreparedStatement pstmt;\r
1524 pstmt = con.prepareStatement("DELETE FROM q_mails WHERE mail like ? ");\r
1525 pstmt.setString(1,mail);\r
1526 pstmt.executeUpdate();\r
1527 }\r
1528 catch ( SQLException e )\r
1529 {\r
1530 System.out.println ( "Error executing sql statement" );\r
1531 e.printStackTrace();\r
bd09b4c0 1532 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1533 }\r
1534 }\r
1535\r
1536 /**\r
1537 * Delete an auth\r
1538 * @param auth auth to delete\r
1539 */\r
1540 public void delChallenge(String user)\r
1541 {\r
1542 try\r
1543 {\r
1544 PreparedStatement pstmt;\r
1545 pstmt = con.prepareStatement("DELETE FROM q_challenge WHERE user = ?");\r
1546 pstmt.setString(1,user);\r
1547 pstmt.executeUpdate();\r
1548 }\r
1549 catch ( SQLException e )\r
1550 {\r
1551 System.out.println ( "Error executing sql statement" );\r
1552 e.printStackTrace();\r
bd09b4c0 1553 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1554 }\r
1555 }\r
1556\r
1557 public void addFakeUser(String nume,String nick, String ident, String host, String desc)\r
1558 {\r
1559 try\r
1560 {\r
1561 PreparedStatement pstmt;\r
cb67c259 1562 pstmt = con.prepareStatement("INSERT INTO q_fakeusers VALUES (?,?,?,?,?)");\r
b1d4498c 1563 pstmt.setString(1,nume);\r
1564 pstmt.setString(2,nick);\r
1565 pstmt.setString(3,ident);\r
1566 pstmt.setString(4,host);\r
1567 pstmt.setString(5,desc);\r
1568 pstmt.executeUpdate();\r
1569 }\r
1570 catch ( SQLException e )\r
1571 {\r
1572 System.out.println ( "Error executing sql statement" );\r
1573 e.printStackTrace();\r
bd09b4c0 1574 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1575 }\r
1576 }\r
1577\r
1578 public void addMail(String mail)\r
1579 {\r
1580 try\r
1581 {\r
1582 PreparedStatement pstmt;\r
cb67c259 1583 pstmt = con.prepareStatement("INSERT INTO q_mails VALUES (?)");\r
b1d4498c 1584 pstmt.setString(1,mail);\r
1585 pstmt.executeUpdate();\r
1586 }\r
1587 catch ( SQLException e )\r
1588 {\r
1589 System.out.println ( "Error executing sql statement" );\r
1590 e.printStackTrace();\r
bd09b4c0 1591 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1592 }\r
1593 }\r
1594\r
cb67c259 1595 public void addAuth(String auth,String pass, String mail1, int lev, boolean suspended, Long time, String info, String userflags, String vhost)\r
b1d4498c 1596 {\r
cb67c259 1597 dbc.addAuth(auth, pass, mail1, lev, suspended, time, info, userflags, vhost);\r
b1d4498c 1598 }\r
1599\r
cb67c259 1600 public void addChan(String channel,String flags,String modes,String welcome,String topic,Long time, int limit, boolean suspended, String key, int level, String owner)\r
b1d4498c 1601 {\r
1602 try\r
1603 {\r
1604 PreparedStatement pstmt;\r
cb67c259 1605 pstmt = con.prepareStatement("INSERT INTO q_channels VALUES (?,?,?,?,?,?,?,?,?,?,?)");\r
b1d4498c 1606 pstmt.setString(1,channel);\r
1607 pstmt.setString(2,flags);\r
1608 pstmt.setString(3,modes);\r
1609 pstmt.setString(4,welcome);\r
1610 pstmt.setString(5,topic);\r
cb67c259
O
1611 pstmt.setLong(6,time);\r
1612 pstmt.setInt(7,limit);\r
1613 pstmt.setBoolean(8,suspended);\r
b1d4498c 1614 pstmt.setString(9,key);\r
cb67c259 1615 pstmt.setInt(10,level);\r
b1d4498c 1616 pstmt.setString(11,owner);\r
1617 pstmt.executeUpdate();\r
1618 }\r
1619 catch ( SQLException e )\r
1620 {\r
1621 System.out.println ( "Error executing sql statement" );\r
1622 e.printStackTrace();\r
bd09b4c0 1623 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1624 }\r
1625 }\r
1626\r
1627 public void addAccess(String user,String channel,String flags)\r
1628 {\r
1629 try\r
1630 {\r
1631 PreparedStatement pstmt;\r
cb67c259 1632 pstmt = con.prepareStatement("INSERT INTO q_access VALUES (?,?,?)");\r
b1d4498c 1633 pstmt.setString(1,user);\r
1634 pstmt.setString(2,channel);\r
1635 pstmt.setString(3,flags);\r
1636 pstmt.executeUpdate();\r
1637 }\r
1638 catch ( SQLException e )\r
1639 {\r
1640 System.out.println ( "Error executing sql statement" );\r
1641 e.printStackTrace();\r
bd09b4c0 1642 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1643 }\r
1644 }\r
1645\r
1646 public void addPwRequest(String user,String pass,String code)\r
1647 {\r
1648 try\r
1649 {\r
1650 PreparedStatement pstmt;\r
1651 pstmt = con.prepareStatement("DELETE FROM q_pwrequest WHERE user = ? ");\r
1652 pstmt.setString(1,user);\r
1653 pstmt.executeUpdate();\r
cb67c259 1654 pstmt = con.prepareStatement("INSERT INTO q_pwrequest VALUES (?,?,?)");\r
b1d4498c 1655 pstmt.setString(1,user);\r
1656 pstmt.setString(2,pass);\r
1657 pstmt.setString(3,code);\r
1658 pstmt.executeUpdate();\r
1659 }\r
1660 catch ( SQLException e )\r
1661 {\r
1662 System.out.println ( "Error executing sql statement" );\r
1663 e.printStackTrace();\r
bd09b4c0 1664 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1665 }\r
1666 }\r
1667\r
cb67c259
O
1668 public String getPwRequest(String user, String code)\r
1669 {\r
1670 try\r
1671 {\r
1672 PreparedStatement pstmt;\r
1673 pstmt = con.prepareStatement("SELECT pass FROM q_pwrequest WHERE user = ? AND code = ?");\r
1674 pstmt.setString(1, user);\r
1675 pstmt.setString(2, code);\r
1676 ResultSet rs = pstmt.executeQuery();\r
1677 rs.first();\r
1678 String pass = rs.getString("pass");\r
1679 pstmt = con.prepareStatement("DELETE FROM q_pwrequest WHERE user = ? ");\r
1680 pstmt.setString(1, user);\r
1681 pstmt.executeUpdate();\r
1682 return pass;\r
1683 }\r
1684 catch (SQLException e)\r
1685 {\r
1686 return "0";\r
1687 }\r
1688 }\r
1689\r
b1d4498c 1690 public void addBan(String channel, String ban)\r
1691 {\r
1692 try\r
1693 {\r
1694 PreparedStatement pstmt;\r
7376dcea 1695 pstmt = con.prepareStatement("INSERT IGNORE INTO q_bans VALUES (?,?)");\r
b1d4498c 1696 pstmt.setString(1,channel);\r
1697 pstmt.setString(2,ban);\r
1698 pstmt.executeUpdate();\r
1699 }\r
1700 catch ( SQLException e )\r
1701 {\r
1702 System.out.println ( "Error executing sql statement" );\r
1703 e.printStackTrace();\r
bd09b4c0 1704 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1705 }\r
1706 }\r
1707\r
1708 public void addGline(String host,String timeset, String timeexp, String reason, String oper)\r
1709 {\r
1710 try\r
1711 {\r
1712 PreparedStatement pstmt;\r
cb67c259 1713 pstmt = con.prepareStatement("INSERT IGNORE INTO q_glines VALUES (?,?,?,?,?)");\r
b1d4498c 1714 pstmt.setString(1,host);\r
1715 pstmt.setString(2,timeset);\r
1716 pstmt.setString(3,timeexp);\r
1717 pstmt.setString(4,reason);\r
1718 pstmt.setString(5,oper);\r
1719 pstmt.executeUpdate();\r
1720 if(!oper.equals("burst/other server"))\r
1721 {\r
1722 C.cmd_gline(Bot.get_num(), host, timeexp, reason);\r
1723 }\r
1724 }\r
1725 catch ( SQLException e )\r
1726 {\r
1727 System.out.println ( "Error executing sql statement" );\r
1728 e.printStackTrace();\r
bd09b4c0 1729 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1730 }\r
1731 }\r
1732\r
cb67c259 1733 public void addJupe(String host, String numeric, Long timeset, Long timeexp, String reason, String oper, String nume)\r
b1d4498c 1734 {\r
1735 try\r
1736 {\r
1737 PreparedStatement pstmt;\r
cb67c259 1738 pstmt = con.prepareStatement("INSERT INTO q_jupes VALUES (?,?,?,?,?,?)");\r
b1d4498c 1739 pstmt.setString(1,host);\r
1740 pstmt.setString(2,numeric);\r
cb67c259
O
1741 pstmt.setLong(3,timeset);\r
1742 pstmt.setLong(4,timeexp);\r
b1d4498c 1743 pstmt.setString(5,reason);\r
1744 pstmt.setString(6,oper);\r
1745 pstmt.executeUpdate();\r
1746 C.cmd_jupe(nume, host, numeric);\r
1747 }\r
1748 catch ( SQLException e )\r
1749 {\r
1750 System.out.println ( "Error executing sql statement" );\r
1751 e.printStackTrace();\r
bd09b4c0 1752 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1753 }\r
1754 }\r
1755\r
cb67c259 1756 public void addTrust(String host,int users, String auth, Long time, boolean ident)\r
b1d4498c 1757 {\r
1758 try\r
1759 {\r
1760 PreparedStatement pstmt;\r
cb67c259 1761 pstmt = con.prepareStatement("INSERT IGNORE INTO q_trusts VALUES (?,?,?,?,?)");\r
b1d4498c 1762 pstmt.setString(1,host);\r
cb67c259 1763 pstmt.setInt(2,users);\r
b1d4498c 1764 pstmt.setString(3,auth);\r
cb67c259
O
1765 pstmt.setLong(4,time);\r
1766 pstmt.setBoolean(5,ident);\r
b1d4498c 1767 pstmt.executeUpdate();\r
1768 }\r
1769 catch ( SQLException e )\r
1770 {\r
1771 System.out.println ( "Error executing sql statement" );\r
1772 e.printStackTrace();\r
bd09b4c0 1773 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1774 }\r
1775 }\r
1776\r
cb67c259 1777 public void addChallenge(String user,String challenge, Long time)\r
b1d4498c 1778 {\r
1779 try\r
1780 {\r
1781 PreparedStatement pstmt;\r
1782 pstmt = con.prepareStatement("DELETE FROM q_challenge WHERE user = ? ");\r
1783 pstmt.setString(1,user);\r
1784 pstmt.executeUpdate();\r
cb67c259 1785 pstmt = con.prepareStatement("INSERT INTO q_challenge VALUES (?,?,?)");\r
b1d4498c 1786 pstmt.setString(1,user);\r
1787 pstmt.setString(2,challenge);\r
cb67c259 1788 pstmt.setLong(3,time);\r
b1d4498c 1789 pstmt.executeUpdate();\r
1790 }\r
1791 catch ( SQLException e )\r
1792 {\r
1793 System.out.println ( "Error executing sql statement" );\r
1794 e.printStackTrace();\r
bd09b4c0 1795 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1796 }\r
1797 }\r
1798\r
1799 public void unBanAll(String channel)\r
1800 {\r
1801 try\r
1802 {\r
1803 PreparedStatement pstmt;\r
cb67c259 1804 pstmt = con.prepareStatement("SELECT host FROM q_bans WHERE name = ?");\r
b1d4498c 1805 pstmt.setString(1,channel);\r
1806 ResultSet rs = pstmt.executeQuery();\r
1807 while(rs.next())\r
1808 {\r
cb67c259 1809 C.cmd_mode_me(Bot.get_num(),Bot.get_corenum(),rs.getString("host"), channel , "-b");\r
b1d4498c 1810 }\r
1811 pstmt = con.prepareStatement("DELETE FROM q_bans WHERE name = ?");\r
1812 pstmt.setString(1,channel);\r
1813 pstmt.executeUpdate();\r
1814 }\r
1815 catch ( SQLException e )\r
1816 {\r
1817 System.out.println ( "Error executing sql statement" );\r
1818 e.printStackTrace();\r
bd09b4c0 1819 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1820 }\r
1821 }\r
1822\r
1823 public void clean()\r
1824 {\r
8a3ce9f6 1825 Calendar cal = Calendar.getInstance();\r
cb67c259 1826 long now = (cal.getTimeInMillis() / 1000);\r
b1d4498c 1827 try\r
1828 {\r
8a3ce9f6 1829 C.report("Cleaning Q DB...");\r
b1d4498c 1830 PreparedStatement pstmt;\r
8a3ce9f6 1831 pstmt = con.prepareStatement("SELECT name,level,suspended,last FROM q_channels");\r
b1d4498c 1832 ResultSet rs = pstmt.executeQuery();\r
1833 while(rs.next())\r
1834 {\r
8a3ce9f6 1835 if(!chanfixHasOps(rs.getString("name")) && Integer.parseInt(rs.getString("level")) < 2 && Integer.parseInt(rs.getString("suspended"))==0 && Long.parseLong(rs.getString("last")) < now-3456000)\r
b1d4498c 1836 {\r
8a3ce9f6 1837 C.report("Deleting Channel: '" + rs.getString("name") + "'");\r
1838 delChan(rs.getString("name"));\r
1839 C.cmd_part(Bot.get_num(),Bot.get_corenum(),rs.getString("name"), "Automatic removal");\r
b1d4498c 1840 }\r
1841 }\r
8a3ce9f6 1842 pstmt = con.prepareStatement("SELECT gline,timeset,timeexp FROM q_glines");\r
b1d4498c 1843 rs = pstmt.executeQuery();\r
1844 while(rs.next())\r
1845 {\r
8a3ce9f6 1846 if(Integer.parseInt(rs.getString("timeset")) + Integer.parseInt(rs.getString("timeexp")) - Integer.parseInt(C.get_time()) < 0)\r
b1d4498c 1847 {\r
8a3ce9f6 1848 C.report("Deleting G-line: '" + rs.getString("gline") + "'");\r
1849 delGline(rs.getString("gline"));\r
b1d4498c 1850 }\r
1851 }\r
8a3ce9f6 1852 pstmt = con.prepareStatement("SELECT host,time FROM q_trusts");\r
b1d4498c 1853 rs = pstmt.executeQuery();\r
1854 while(rs.next())\r
1855 {\r
8a3ce9f6 1856 if(Long.parseLong(rs.getString("time")) < Long.parseLong(C.get_time()))\r
b1d4498c 1857 {\r
8a3ce9f6 1858 C.report("Deleting Trust: '" + rs.getString("host") + "'.");\r
1859 addGline(rs.getString("host"),C.get_time(),"60","Trust expired. 60 Second gline applied.","Q");\r
1860 delTrust(rs.getString("host"));\r
b1d4498c 1861 }\r
1862 }\r
8a3ce9f6 1863 pstmt = con.prepareStatement("SELECT jupe,timeset,timeexp FROM q_jupes");\r
b1d4498c 1864 rs = pstmt.executeQuery();\r
1865 while(rs.next())\r
1866 {\r
8a3ce9f6 1867 if(Integer.parseInt(rs.getString("timeset")) + Integer.parseInt(rs.getString("timeexp")) - Integer.parseInt(C.get_time()) < 0)\r
b1d4498c 1868 {\r
8a3ce9f6 1869 C.report("Deleting Jupe: '" + rs.getString("jupe") + "'");\r
1870 delJupe(rs.getString("jupe"),Bot.get_num());\r
b1d4498c 1871 }\r
1872 }\r
8a3ce9f6 1873 pstmt = con.prepareStatement("SELECT user,time FROM q_challenge");\r
b1d4498c 1874 rs = pstmt.executeQuery();\r
1875 while(rs.next())\r
1876 {\r
8a3ce9f6 1877 if(Long.parseLong(rs.getString("time")) < now-60)\r
b1d4498c 1878 {\r
8a3ce9f6 1879 delChallenge(rs.getString("user"));\r
b1d4498c 1880 }\r
1881 }\r
ec7c57c9 1882 pstmt = con.prepareStatement("DELETE FROM q_access WHERE user NOT IN (SELECT authnick FROM auths)");\r
1883 pstmt.executeUpdate();\r
8a3ce9f6 1884 C.report("Q Cleanup complete!");\r
b1d4498c 1885 }\r
1886 catch(Exception e)\r
1887 {\r
1888 System.out.println ( "Error executing sql statement" );\r
1889 e.printStackTrace();\r
bd09b4c0 1890 C.die("SQL error, trying to die gracefully.");\r
8a3ce9f6 1891 }\r
b1d4498c 1892 }\r
1893\r
1894 public String encrypt(String plaintext)\r
1895 {\r
1896 byte[] defaultBytes = plaintext.getBytes();\r
1897 try\r
1898 {\r
1899 MessageDigest algorithm = MessageDigest.getInstance("MD5");\r
1900 algorithm.reset();\r
1901 algorithm.update(defaultBytes);\r
1902 byte messageDigest[] = algorithm.digest();\r
1903 StringBuffer hexString = new StringBuffer();\r
1904 for (int i=0;i<messageDigest.length;i++)\r
1905 {\r
1906 String hex = Integer.toHexString(0xFF & messageDigest[i]);\r
1907 if(hex.length()==1) hexString.append('0');\r
1908 hexString.append(hex);\r
1909 }\r
1910 return hexString.toString();\r
1911 }\r
1912 catch(NoSuchAlgorithmException e)\r
1913 {\r
1914 System.out.println ( "Error encrypting password." );\r
1915 e.printStackTrace();\r
bd09b4c0 1916 C.die("SQL error, trying to die gracefully.");\r
b1d4498c 1917 return "0";\r
1918 }\r
1919 }\r
1920}