File: 1.00.4a/server/web/admin.php (View as Code)

1: 2: /* ------------------------------------------------------------- 3: This file is part of FreeNATS 4: 5: FreeNATS is (C) Copyright 2008 PurplePixie Systems 6: 7: FreeNATS is free software: you can redistribute it and/or modify 8: it under the terms of the GNU General Public License as published by 9: the Free Software Foundation, either version 3 of the License, or 10: (at your option) any later version. 11: 12: FreeNATS is distributed in the hope that it will be useful, 13: but WITHOUT ANY WARRANTY; without even the implied warranty of 14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15: GNU General Public License for more details. 16: 17: You should have received a copy of the GNU General Public License 18: along with FreeNATS. If not, see www.gnu.org/licenses 19: 20: For more information see www.purplepixie.org/freenats 21: -------------------------------------------------------------- */ 22: 23: ob_start(); 24: require("include.php"); 25: $NATS->Start(); 26: if (!$NATS_Session->Check($NATS->DB)) 27: { 28: header("Location: ./?login_msg=Invalid+Or+Expired+Session"); 29: exit(); 30: } 31: if ($NATS_Session->userlevel<9) UL_Error("Admin Interface"); 32: 33: if (isset($_REQUEST['action'])) 34: { 35: switch($_REQUEST['action']) 36: { 37: case "save_user": 38: $q="UPDATE fnuser SET realname=\"".ss($_REQUEST['realname'])."\",userlevel=".ss($_REQUEST['userlevel']); 39: if ((isset($_REQUEST['pword']))&&($_REQUEST['pword']!="_NOTTHIS_")) $q.=",password=MD5(\"".ss($_REQUEST['pword'])."\")"; 40: $q.=" WHERE username=\"".ss($_REQUEST['username'])."\""; 41: $NATS->DB->Query($q); 42: if ($NATS->DB->Affected_Rows()<=0) $amsg="Save User Failed or Nothing Changed"; 43: else $amsg="Save User ".$_REQUEST['username']." Succeeded"; 44: break; 45: 46: case "create_user": 47: $q="INSERT INTO fnuser(username,password,realname,userlevel) VALUES(\"".ss($_REQUEST['username'])."\","; 48: $q.="MD5(\"".ss($_REQUEST['pword'])."\"),\"".ss($_REQUEST['realname'])."\",".ss($_REQUEST['userlevel']).")"; 49: $NATS->DB->Query($q); 50: //echo $q; 51: if ($NATS->DB->Affected_Rows()<=0) $amsg="Create User Failed"; 52: else $amsg="User ".$_REQUEST['username']." Created"; 53: break; 54: 55: case "delete_user": 56: /* - disabled for 0.02.44 to allow duplicate deletion 57: if ($_REQUEST['username']=="admin") 58: { 59: $amsg="Can't delete the admin user"; 60: break; 61: } 62: */ 63: if (!isset($_REQUEST['confirmed'])) 64: { 65: $back=urlencode("admin.php?action=delete_user&mode=users&username=".$_REQUEST['username']."&confirmed=1"); 66: $url="confirm.php?action=Delete+User+".$_REQUEST['username']."&back=".$back; 67: header("Location: ".$url); 68: exit(); 69: } 70: $q="DELETE FROM fnuser WHERE username=\"".ss($_REQUEST['username'])."\""; 71: $NATS->DB->Query($q); 72: $amsg="User ".$_REQUEST['username']." Deleted"; 73: break; 74: 75: case "var_save": 76: if ($_REQUEST['new_var']=="") // delete 77: { 78: $q="DELETE FROM fnconfig WHERE fnc_var=\"".ss($_REQUEST['orig_var'])."\""; 79: } 80: else // update 81: { 82: $q="UPDATE fnconfig SET fnc_var=\"".ss($_REQUEST['new_var'])."\",fnc_val=\"".ss($_REQUEST['new_val'])."\" "; 83: $q.="WHERE fnc_var=\"".ss($_REQUEST['orig_var'])."\""; 84: } 85: $NATS->DB->Query($q); 86: if ($NATS->DB->Affected_Rows()<=0) $amsg="Update/Delete Variable Failed"; 87: else $amsg="Updated/Deleted Variable"; 88: break; 89: case "var_new": 90: $q="INSERT INTO fnconfig(fnc_var,fnc_val) VALUES(\"".ss($_REQUEST['new_var'])."\",\"".ss($_REQUEST['new_val'])."\")"; 91: //echo $q; 92: $NATS->DB->Query($q); 93: if ($NATS->DB->Affected_Rows()<=0) $amsg="Create Variable Failed"; 94: else $amsg="Created Variable"; 95: break; 96: 97: case "save_aa": 98: $q="UPDATE fnalertaction SET "; 99: $q.="atype=\"".ss($_REQUEST['atype'])."\","; 100: $q.="ctrlimit=".ss($_REQUEST['ctrlimit']).","; 101: $q.="ctrtoday=".ss($_REQUEST['ctrtoday']).","; 102: $q.="aname=\"".ss($_REQUEST['aname'])."\","; 103: if (isset($_REQUEST['efrom'])) $q.="efrom=\"".ss($_REQUEST['efrom'])."\","; 104: $q.="etolist=\"".ss($_REQUEST['etolist'])."\","; 105: if (isset($_REQUEST['esubject'])) $q.="esubject=".ss($_REQUEST['esubject']).","; 106: $q.="etype=".ss($_REQUEST['etype']); 107: if (isset($_REQUEST['awarnings'])) $q.=",awarnings=".ss($_REQUEST['awarnings']); 108: else $q.=",awarnings=0"; 109: if (isset($_REQUEST['adecrease'])) $q.=",adecrease=".ss($_REQUEST['adecrease']); 110: else $q.=",adecrease=0"; 111: $q.=" WHERE aaid=".ss($_REQUEST['aaid']); 112: //echo $q; 113: $NATS->DB->Query($q); 114: if ($NATS->DB->Affected_Rows()<=0) $amsg="Action Update Failed or Nothing Changed"; 115: else $amsg="Action Updated"; 116: break; 117: 118: case "action_test": 119: $q="SELECT mdata FROM fnalertaction WHERE aaid=".ss($_REQUEST['aaid'])." LIMIT 0,1"; 120: $r=$NATS->DB->Query($q); 121: $row=$NATS->DB->Fetch_Array($r); 122: $oldm=$row['mdata']; 123: $q="UPDATE fnalertaction SET mdata=\"** ACTION TEST **\" WHERE aaid=".ss($_REQUEST['aaid']); 124: $NATS->DB->Query($q); 125: $NATS->ActionFlush(); 126: $q="UPDATE fnalertaction SET mdata=\"".ss($oldm)."\" WHERE aaid=".ss($_REQUEST['aaid']); 127: $NATS->DB->Query($q); 128: $amsg="Alert Action Tested & Flushed"; 129: break; 130: 131: case "action_create": 132: $q="INSERT INTO fnalertaction(atype) VALUES(\"\")"; 133: $NATS->DB->Query($q); 134: $amsg="Created New Alert Action"; 135: $_REQUEST['aaid']=$NATS->DB->Insert_Id(); 136: break; 137: 138: case "action_delete": 139: if (!isset($_REQUEST['confirmed'])) 140: { 141: $back=urlencode("admin.php?mode=alertactions&aaid_del=".$_REQUEST['aaid_del']."&action=action_delete&confirmed=1"); 142: $url="confirm.php?action=Delete+alert+action&back=".$back; 143: header("Location: ".$url); 144: exit(); 145: } 146: // otherwise confirmed 147: $q="DELETE FROM fnalertaction WHERE aaid=".ss($_REQUEST['aaid_del']); 148: $NATS->DB->Query($q); 149: if ($NATS->DB->Affected_Rows()>0) $amsg="Alert Action Deleted"; 150: else $amsg="Alert Action Delete Failed"; 151: $q="DELETE FROM fnnalink WHERE aaid=".ss($_REQUEST['aaid_del']); 152: $NATS->DB->Query($q); 153: break; 154: 155: case "optimize": 156: $q="OPTIMIZE TABLE ".ss($_REQUEST['table']); 157: $NATS->DB->Query($q); 158: $msg="Optimised Table ".$_REQUEST['table']; 159: break; 160: 161: } 162: } 163: 164: ob_end_flush(); 165: Screen_Header("Administration Interface",1,1,"","main","admin"); 166: 167: if (isset($_REQUEST['mode'])) $mode=$_REQUEST['mode']; 168: else $mode=""; 169: 170: if (isset($_REQUEST['message'])) echo "
".$_REQUEST['message']."
";
171: if (isset($amsg)) echo "
".$amsg."
";
172: 173: echo "
";
174: if (isset($_REQUEST['updatecheck'])) 175: { 176: // check for updates 177: $dq="?CheckVersion=".$NATS->Version."&JSMode=1"; 178: $dl="http://www.purplepixie.org/freenats/download.php"; 179: $du=$dl.$dq; 180: /* old method 181: $cp=@fopen($du,"r"); 182: if ($cp>0) 183: { 184: $cs=@fgets($cp,128); 185: @fclose($cp); 186: if ($cs=="0") echo "System Up to Date
";
187: else echo "Update Available: ".$cs."
";
188: } 189: else echo "Error Checking for Updates
";
190: */ 191: echo "Checking Version: "; 192: echo "\n"; 193: echo "

";
194: } 195: else if ($mode=="") 196: { 197: echo "Check for FreeNATS Updates

";
198: } 199: 200: function tul($l) 201: { 202: if ($l>9) return "Administrator"; 203: if ($l>4) return "Power User"; 204: if ($l>0) return "Normal User"; 205: return "Disabled"; 206: } 207: 208: function aat_etype($type) 209: { 210: switch ($type) 211: { 212: case 0: return "Short"; 213: case 1: return "Long"; 214: default: return "Unknown"; 215: } 216: } 217: 218: function aat_esub($type) 219: { 220: switch ($type) 221: { 222: case 0: return "Blank"; 223: case 1: return "Short"; 224: case 2: return "Long"; 225: default: return "Unknown"; 226: } 227: } 228: 229: function aat_atype($type) 230: { 231: switch($type) 232: { 233: case "": case "Disabled": return "Disabled"; 234: case "email": return "EMail"; 235: case "url": return "URL"; 236: case "mqueue": return "Message Queue"; 237: default: return "Unknown (".$type.")"; 238: } 239: } 240: 241: if ($mode=="users") 242: { 243: echo "Users

";
244: 245: 246: 247: 248: $q="SELECT username,realname,userlevel FROM fnuser"; 249: $r=$NATS->DB->Query($q); 250: echo ""; 251: echo ""; 252: echo ""; 253: while ($row=$NATS->DB->Fetch_Array($r)) 254: { 255: echo "
";
256: echo ""; 257: echo ""; 258: echo ""; 259: echo ""; 260: echo ""; 261: echo ""; 269: echo ""; 270: echo ""; 271: echo ""; 272: echo ""; 273: } 274: echo "
";
275: echo ""; 276: echo ""; 277: echo ""; 278: echo ""; 279: echo ""; 285: echo ""; 286: echo ""; 287: echo ""; 288: echo "
Username Real NameUser LevelPasswordOptions
".$row['username'].""; 268: echo " Delete

";
289: echo "
";
290: $NATS->DB->Free($r); 291: } 292: else if ($mode=="nodetestsessions") 293: { 294: echo "Test Sessions for ".$_REQUEST['nodeid']."

";
295: echo "Running Sessions for ".$_REQUEST['nodeid']."
";
296: $q="SELECT * FROM fntestrun WHERE fnode=\"".ss($_REQUEST['nodeid'])."\" AND finishx=0 ORDER BY trid DESC"; 297: $r=$NATS->DB->Query($q); 298: if ($NATS->DB->Num_Rows($r)==0) echo "No running test sessions
";
299: echo ""; 300: while ($row=$NATS->DB->Fetch_Array($r)) 301: { 302: echo ""; 303: echo ""; 308: } 309: echo "
run/".$row['trid']."".nicedt($row['startx'])." - "; 304: if ($row['finishx']>0) echo nicedt($row['finishx']); 305: else echo "Still Running"; 306: echo " (System Logs)"; 307: echo "
";
310: $NATS->DB->Free($r); 311: echo "
";
312: echo "
";
313: 314: echo "Last 100 Previous Sessions for ".$_REQUEST['nodeid']."
";
315: $q="SELECT * FROM fntestrun WHERE fnode=\"".ss($_REQUEST['nodeid'])."\" ORDER BY trid DESC LIMIT 0,100"; 316: $r=$NATS->DB->Query($q); 317: if ($NATS->DB->Num_Rows($r)==0) echo "No previous test sessions
";
318: echo ""; 319: while ($row=$NATS->DB->Fetch_Array($r)) 320: { 321: echo ""; 322: echo ""; 327: } 328: echo "
run/".$row['trid']."".nicedt($row['startx'])." - "; 323: if ($row['finishx']>0) echo nicedt($row['finishx']); 324: else echo "Still Running"; 325: echo " (System Logs)"; 326: echo "
";
329: $NATS->DB->Free($r); 330: echo "
";
331: echo "
";
332: 333: } 334: else if ($mode=="testsessions") 335: { 336: echo "Running Test Sessions

";
337: $q="SELECT * FROM fntestrun WHERE finishx=0 ORDER BY trid DESC"; 338: $r=$NATS->DB->Query($q); 339: if ($NATS->DB->Num_Rows($r)==0) echo "No running test sessions
";
340: echo ""; 341: while ($row=$NATS->DB->Fetch_Array($r)) 342: { 343: echo ""; 344: echo ""; 349: } 350: echo "
run/".$row['trid']."".nicedt($row['startx'])." - "; 345: if ($row['finishx']>0) echo nicedt($row['finishx']); 346: else echo "Still Running"; 347: echo " (System Logs)"; 348: echo "
";
351: $NATS->DB->Free($r); 352: echo "
";
353: echo "
"; 354: echo ""; 355: echo "Last 100 Test Sessions for "; 356: $q="SELECT nodeid,nodename FROM fnnode ORDER BY weight ASC"; 357: $r=$NATS->DB->Query($q); 358: echo "
";
364: } 365: else if ($mode=="alertactions") 366: { 367: echo "Alert Actions

";
368: 369: if (isset($_REQUEST['aaid'])) 370: { // view/edit aaid 371: $q="SELECT * FROM fnalertaction WHERE aaid=".ss($_REQUEST['aaid']); 372: $r=$NATS->DB->Query($q); 373: if (!$row=$NATS->DB->Fetch_Array($r)) 374: { 375: echo "Error Fetching AAID

";
376: Screen_Footer(); 377: exit(); 378: } 379: echo ""; 380: echo "
";
381: echo ""; 382: echo ""; 383: echo ""; 384: echo ""; 385: 386: echo ""; 387: echo ""; 390: 391: echo ""; 400: 401: echo ""; 402: if ($row['awarnings']==1) $s=" checked"; 403: else $s=""; 404: echo ""; 405: 406: echo ""; 407: if ($row['adecrease']==1) $s=" checked"; 408: else $s=""; 409: echo ""; 410: 411: echo ""; 412: echo ""; 416: 417: echo ""; 418: echo ""; 426: 427: if ($row['atype']!="url") 428: { 429: 430: echo ""; 431: echo ""; 434: 435: echo ""; 443: 444: } 445: 446: echo ""; 453: 454: echo ""; 457: 458: echo ""; 462: 463: echo "
ID : action/".$_REQUEST['aaid']."
Action Name : "; 388: echo ""; 389: echo "
Type : "; 392: echo ""; 399: echo "
Warnings : ".hlink("AAction:Warnings")."
Decreases : ".hlink("AAction:Decreases")."
Action Limit : "; 413: echo " "; 414: echo hlink("AAction:Limit"); 415: echo "
Action Counter : "; 419: echo " "; 420: echo hlink("AAction:Counter"); 421: echo " (for "; 422: if ($row['ctrdate']=="") echo "unknown"; 423: else echo substr($row['ctrdate'],6,2)."/".substr($row['ctrdate'],4,2)."/".substr($row['ctrdate'],0,4); 424: echo ")"; 425: echo "
Email From : "; 432: echo ""; 433: echo "
Email Subject : "; 436: echo ""; 442: echo "
Msg Type : "; 447: echo ""; 452: echo "
Email To
or URL :
"; 455: echo ""; 456: echo "
  Cancel Update | "; 459: echo "Test Action | "; 460: echo "Delete Action"; 461: echo "


";
464: $NATS->DB->Free($r); 465: } 466: 467: $q="SELECT aaid,atype,aname FROM fnalertaction"; 468: $r=$NATS->DB->Query($q); 469: echo ""; 470: echo ""; 471: while ($row=$NATS->DB->Fetch_Array($r)) 472: { 473: echo ""; 475: echo ""; 478: } 479: echo "
IDAction NameAction Type
"; 474: echo "".$row['aaid']."".$row['aname'].""; 476: echo aat_atype($row['atype']); 477: echo "
";
480: 481: echo "
Create New Alert Action
";
482: echo "

";
483: } 484: else if ($mode=="logs") 485: { 486: echo "System Logs

";
487: echo "System Event Log

";
488: 489: echo "

";
490: } 491: else if ($mode=="status") 492: { 493: // system healthcheck 494: 495: // usage data 496: //$q="SELECT COUNT(fnnode.nodeid),COUNT(fngroup.groupid),COUNT( FROM fnnode,fngroup"; 497: $q="SHOW TABLE STATUS LIKE \"fn%\""; 498: $r=$NATS->DB->Query($q); 499: 500: echo "FreeNATS System Status

";
501: 502: $tinfo=array(); 503: 504: echo "Table Sizes

";
505: 506: echo ""; 507: echo ""; 508: while ($row=$NATS->DB->Fetch_Array($r)) 509: { 510: echo ""; 511: echo ""; 519: } 520: echo "
Table NameSize (Rows)Size (kb)Other Information
".$row['Name']."".$row['Rows']."".round($row['Data_length']/1024,0).""; 512: if (isset($tinfo[$row['Name']])) echo $tinfo[$row['Name']]; 513: else echo " "; 514: if ($row['Data_free']>0) 515: { 516: echo " [".round($row['Data_free']/1024,0)."kb Free - Optimise]"; 517: } 518: echo "
";
521: $NATS->DB->Free($r); 522: echo "

";
523: 524: echo "Test Sessions

";
525: $q="SELECT * FROM fntestrun WHERE finishx=0"; 526: $r=$NATS->DB->Query($q); 527: echo "".$NATS->DB->Num_Rows($r)." Open/Running Test Sessions

";
528: if ($NATS->DB->Num_Rows($r)>0) 529: { 530: echo ""; 531: echo ""; 532: $nowx=time(); 533: $fifteenx=$nowx-(15*60); 534: $hourx=$nowx-(60*60); 535: while ($row=$NATS->DB->Fetch_Array($r)) 536: { 537: echo ""; 539: echo ""; 540: echo ""; 541: echo ""; 546: } 547: echo "
IDNodeStartedNotes
"; 538: echo $row['trid']."".nicedt($row['startx'])." - ".dtago($row['startx']).""; 542: if ($row['startx']<$hourx) echo "Error: Over an hour old"; 543: else if($row['startx']<$fifteenx) echo "Warning: Over fifteen minutes old"; 544: else echo " "; 545: echo "
";
548: } 549: $NATS->DB->Free($r); 550: echo "

";
551: 552: 553: echo "Please note this merely displays FreeNATS software status - not
the status of ";
554: echo "the underlying Virtual Machine (if applicable).

You should monitor disk space and ";
555: echo "performance for the VM via
the relevant system (such as the rPath interface).

";
556: 557: } 558: else if ($mode=="variables") 559: { 560: echo "Variables ".hlink("Variable")."

";
561: $q="SELECT * FROM fnconfig ORDER BY fnc_var ASC"; 562: $r=$NATS->DB->Query($q); 563: echo ""; 564: while ($row=$NATS->DB->Fetch_Array($r)) 565: { 566: echo "
";
567: echo ""; 568: echo ""; 569: echo ""; 570: echo ""; 571: echo ""; 573: echo ""; 574: echo ""; 575: echo ""; 578: echo ""; 579: echo ""; 580: } 581: echo "
";
582: echo ""; 583: echo ""; 584: echo ""; 585: echo ""; 586: echo ""; 587: echo ""; 588: echo ""; 589: echo ""; 590: echo "
"; 572: echo "= "; 576: echo hlink("Var:".$row['fnc_var']); 577: echo "
=
";
591: } 592: else // catch-all 593: { 594: echo "  "; 595: echo "User Administration

";
596: echo "  "; 597: echo "System Event Log

";
598: echo "  "; 599: echo "Alert Actions

";
600: echo "  "; 601: echo "System Variables

";
602: echo "  "; 603: echo "Test Sessions

";
604: echo "  "; 605: echo "Test Schedules

";
606: echo "  "; 607: echo "File Manager

";
608: 609: if ($NATS->Cfg->Get("site.enable.adminsql",0)==1) 610: { 611: echo "  "; 612: echo "SQL Console

";
613: } 614: echo "  "; 615: echo "DNS Query Console

";
616: echo "  "; 617: echo "System Status Report

";
618: } 619: 620: if ($mode!="") echo "Back to Main Admin Menu

";
621: ?> 622: 623: 624: 625: Screen_Footer(); 626: ?> 627: