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

1: 2: /* ------------------------------------------------------------- 3: This file is part of FreeNATS 4: 5: FreeNATS is (C) Copyright 2008-2010 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: $q.="scheduleid=".ss($_REQUEST['scheduleid']).","; 104: if (isset($_REQUEST['efrom'])) $q.="efrom=\"".ss($_REQUEST['efrom'])."\","; 105: $q.="etolist=\"".ss($_REQUEST['etolist'])."\","; 106: if (isset($_REQUEST['esubject'])) $q.="esubject=".ss($_REQUEST['esubject']).","; 107: $q.="etype=".ss($_REQUEST['etype']); 108: if (isset($_REQUEST['awarnings'])) $q.=",awarnings=".ss($_REQUEST['awarnings']); 109: else $q.=",awarnings=0"; 110: if (isset($_REQUEST['adecrease'])) $q.=",adecrease=".ss($_REQUEST['adecrease']); 111: else $q.=",adecrease=0"; 112: $q.=" WHERE aaid=".ss($_REQUEST['aaid']); 113: //echo $q; 114: $NATS->DB->Query($q); 115: if ($NATS->DB->Affected_Rows()<=0) $amsg="Action Update Failed or Nothing Changed"; 116: else $amsg="Action Updated"; 117: break; 118: 119: case "action_test": 120: $q="SELECT mdata FROM fnalertaction WHERE aaid=".ss($_REQUEST['aaid'])." LIMIT 0,1"; 121: $r=$NATS->DB->Query($q); 122: $row=$NATS->DB->Fetch_Array($r); 123: $oldm=$row['mdata']; 124: $q="UPDATE fnalertaction SET mdata=\"** ACTION TEST **\" WHERE aaid=".ss($_REQUEST['aaid']); 125: $NATS->DB->Query($q); 126: $NATS->ActionFlush(); 127: $q="UPDATE fnalertaction SET mdata=\"".ss($oldm)."\" WHERE aaid=".ss($_REQUEST['aaid']); 128: $NATS->DB->Query($q); 129: $amsg="Alert Action Tested & Flushed"; 130: break; 131: 132: case "action_create": 133: $q="INSERT INTO fnalertaction(atype) VALUES(\"\")"; 134: $NATS->DB->Query($q); 135: $amsg="Created New Alert Action"; 136: $_REQUEST['aaid']=$NATS->DB->Insert_Id(); 137: break; 138: 139: case "action_delete": 140: if (!isset($_REQUEST['confirmed'])) 141: { 142: $back=urlencode("admin.php?mode=alertactions&aaid_del=".$_REQUEST['aaid_del']."&action=action_delete&confirmed=1"); 143: $url="confirm.php?action=Delete+alert+action&back=".$back; 144: header("Location: ".$url); 145: exit(); 146: } 147: // otherwise confirmed 148: $q="DELETE FROM fnalertaction WHERE aaid=".ss($_REQUEST['aaid_del']); 149: $NATS->DB->Query($q); 150: if ($NATS->DB->Affected_Rows()>0) $amsg="Alert Action Deleted"; 151: else $amsg="Alert Action Delete Failed"; 152: $q="DELETE FROM fnnalink WHERE aaid=".ss($_REQUEST['aaid_del']); 153: $NATS->DB->Query($q); 154: break; 155: 156: case "optimize": 157: $q="OPTIMIZE TABLE ".ss($_REQUEST['table']); 158: $NATS->DB->Query($q); 159: $msg="Optimised Table ".$_REQUEST['table']; 160: break; 161: 162: } 163: } 164: 165: ob_end_flush(); 166: Screen_Header("Administration Interface",1,1,"","main","admin"); 167: 168: if (isset($_REQUEST['mode'])) $mode=$_REQUEST['mode']; 169: else $mode=""; 170: 171: if (isset($_REQUEST['message'])) echo "
".$_REQUEST['message']."
";
172: if (isset($amsg)) echo "
".$amsg."
";
173: 174: echo "
";
175: if (isset($_REQUEST['updatecheck'])) 176: { 177: // check for updates 178: $dq="?CheckVersion=".$NATS->Version."&JSMode=1"; 179: $dl="http://www.purplepixie.org/freenats/download.php"; 180: $du=$dl.$dq; 181: /* old method 182: $cp=@fopen($du,"r"); 183: if ($cp>0) 184: { 185: $cs=@fgets($cp,128); 186: @fclose($cp); 187: if ($cs=="0") echo "System Up to Date
";
188: else echo "Update Available: ".$cs."
";
189: } 190: else echo "Error Checking for Updates
";
191: */ 192: echo "Checking Version: "; 193: echo "\n"; 194: echo "

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

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

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

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

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

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

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

";
377: Screen_Footer(); 378: exit(); 379: } 380: echo ""; 381: echo "
";
382: echo ""; 383: echo ""; 384: echo ""; 385: echo ""; 386: 387: echo ""; 388: echo ""; 391: 392: echo ""; 401: 402: echo ""; 417: 418: 419: echo ""; 420: if ($row['awarnings']==1) $s=" checked"; 421: else $s=""; 422: echo ""; 423: 424: echo ""; 425: if ($row['adecrease']==1) $s=" checked"; 426: else $s=""; 427: echo ""; 428: 429: echo ""; 430: echo ""; 434: 435: echo ""; 436: echo ""; 444: 445: if ($row['atype']!="url") 446: { 447: 448: echo ""; 449: echo ""; 452: 453: echo ""; 461: 462: } 463: 464: echo ""; 471: 472: echo ""; 475: 476: echo ""; 480: 481: echo "
ID : action/".$_REQUEST['aaid']."
Action Name : "; 389: echo ""; 390: echo "
Type : "; 393: echo ""; 400: echo "
Schedule : "; 403: echo ""; 414: $NATS->DB->Free($sr); 415: echo " ".hlink("AlertSchedule"); 416: echo "
Warnings : ".hlink("AAction:Warnings")."
Decreases : ".hlink("AAction:Decreases")."
Action Limit : "; 431: echo " "; 432: echo hlink("AAction:Limit"); 433: echo "
Action Counter : "; 437: echo " "; 438: echo hlink("AAction:Counter"); 439: echo " (for "; 440: if ($row['ctrdate']=="") echo "unknown"; 441: else echo substr($row['ctrdate'],6,2)."/".substr($row['ctrdate'],4,2)."/".substr($row['ctrdate'],0,4); 442: echo ")"; 443: echo "
Email From : "; 450: echo ""; 451: echo "
Email Subject : "; 454: echo ""; 460: echo "
Msg Type : "; 465: echo ""; 470: echo "
Email To
or URL :
"; 473: echo ""; 474: echo "
  Cancel Update | "; 477: echo "Test Action | "; 478: echo "Delete Action"; 479: echo "


";
482: $NATS->DB->Free($r); 483: } 484: 485: $q="SELECT aaid,atype,aname FROM fnalertaction"; 486: $r=$NATS->DB->Query($q); 487: echo ""; 488: echo ""; 489: while ($row=$NATS->DB->Fetch_Array($r)) 490: { 491: echo ""; 493: echo ""; 496: } 497: echo "
IDAction NameAction Type
"; 492: echo "".$row['aaid']."".$row['aname'].""; 494: echo aat_atype($row['atype']); 495: echo "
";
498: 499: echo "
Create New Alert Action
";
500: echo "

";
501: } 502: else if ($mode=="logs") 503: { 504: echo "System Logs

";
505: echo "System Event Log

";
506: 507: echo "

";
508: } 509: else if ($mode=="status") 510: { 511: // system healthcheck 512: 513: // usage data 514: //$q="SELECT COUNT(fnnode.nodeid),COUNT(fngroup.groupid),COUNT( FROM fnnode,fngroup"; 515: $q="SHOW TABLE STATUS LIKE \"fn%\""; 516: $r=$NATS->DB->Query($q); 517: 518: echo "FreeNATS System Status

";
519: 520: $tinfo=array(); 521: 522: echo "Table Sizes

";
523: 524: echo ""; 525: echo ""; 526: while ($row=$NATS->DB->Fetch_Array($r)) 527: { 528: echo ""; 529: echo ""; 537: } 538: echo "
Table NameSize (Rows)Size (kb)Other Information
".$row['Name']."".$row['Rows']."".round($row['Data_length']/1024,0).""; 530: if (isset($tinfo[$row['Name']])) echo $tinfo[$row['Name']]; 531: else echo " "; 532: if ($row['Data_free']>0) 533: { 534: echo " [".round($row['Data_free']/1024,0)."kb Free - Optimise]"; 535: } 536: echo "
";
539: $NATS->DB->Free($r); 540: echo "

";
541: 542: echo "Test Sessions

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

";
546: if ($NATS->DB->Num_Rows($r)>0) 547: { 548: echo ""; 549: echo ""; 550: $nowx=time(); 551: $fifteenx=$nowx-(15*60); 552: $hourx=$nowx-(60*60); 553: while ($row=$NATS->DB->Fetch_Array($r)) 554: { 555: echo ""; 557: echo ""; 558: echo ""; 559: echo ""; 564: } 565: echo "
IDNodeStartedNotes
"; 556: echo $row['trid']."".nicedt($row['startx'])." - ".dtago($row['startx']).""; 560: if ($row['startx']<$hourx) echo "Error: Over an hour old"; 561: else if($row['startx']<$fifteenx) echo "Warning: Over fifteen minutes old"; 562: else echo " "; 563: echo "
";
566: } 567: $NATS->DB->Free($r); 568: echo "

";
569: 570: echo "Environment: PHP Web (Apache Module/PHP-CGI)

";
571: $env_test_web=1; 572: include("environment.test.php"); 573: echo "
";
574: echo "Environment: PHP CLI (Command-Line Binary)

";
575: $output=array(); 576: $return=0; 577: exec("php -q environment.test.php",$output,$return); 578: if ($return!=1) 579: { 580: echo "Error: PHP CLI Script did not seem to execute. PHP-CLI is required for FreeNATS (fatal error)
";
581: } 582: foreach($output as $line) 583: echo $line; 584: 585: echo "

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

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

";
589: 590: } 591: else if ($mode=="variables") 592: { 593: echo "Variables ".hlink("Variable")."

";
594: $q="SELECT * FROM fnconfig ORDER BY fnc_var ASC"; 595: $r=$NATS->DB->Query($q); 596: echo ""; 597: while ($row=$NATS->DB->Fetch_Array($r)) 598: { 599: echo "
";
600: echo ""; 601: echo ""; 602: echo ""; 603: echo ""; 604: echo ""; 606: echo ""; 607: echo ""; 608: echo ""; 611: echo ""; 612: echo ""; 613: } 614: echo "
";
615: echo ""; 616: echo ""; 617: echo ""; 618: echo ""; 619: echo ""; 620: echo ""; 621: echo ""; 622: echo ""; 623: echo "
"; 605: echo "= "; 609: echo hlink("Var:".$row['fnc_var']); 610: echo "
=
";
624: } 625: else if ($mode=="sysinfo") 626: { 627: echo "FreeNATS System Information

";
628: 629: echo "Version Information

";
630: echo ""; 631: echo ""; 632: echo ""; 633: echo ""; 634: echo "
Version:".$NATS->Version."
Release:".$NATS->Release."
Compound:".$NATS->Version.$NATS->Release."


";
635: 636: echo "Registered Test Modules

";
637: echo ""; 638: echo ""; 639: foreach($NATS->Tests->QuickList as $key => $val) 640: { 641: echo ""; 650: } 651: echo "
NameProvidesRevisionAdditional
"; 642: echo $NATS->Tests->Tests[$key]->name; 643: echo ""; 644: echo $NATS->Tests->Tests[$key]->type; 645: echo ""; 646: echo $NATS->Tests->Tests[$key]->revision; 647: echo ""; 648: echo $NATS->Tests->Tests[$key]->additional; 649: echo "


";
652: 653: echo "Registered Event Handlers

";
654: echo ""; 655: echo ""; 656: foreach($NATS->EventHandlers as $key => $val) 657: { 658: echo ""; 662: } 663: echo "
EventHandler(s)
".$key.""; 659: foreach($NATS->EventHandlers[$key] as $handler) 660: echo $handler."
";
661: echo "


";
664: } 665: else // catch-all 666: { 667: echo "  "; 668: echo "User Administration

";
669: echo "  "; 670: echo "System Event Log

";
671: echo "  "; 672: echo "Alert Actions

";
673: echo "  "; 674: echo "System Variables

";
675: echo "  "; 676: echo "Test Sessions

";
677: echo "  "; 678: echo "Test and Alert Schedules

";
679: echo "  "; 680: echo "File Manager

";
681: 682: if ($NATS->Cfg->Get("site.enable.adminsql",0)==1) 683: { 684: echo "  "; 685: echo "SQL Console

";
686: } 687: echo "  "; 688: echo "DNS Query Console

";
689: echo "  "; 690: echo "Backup and Restore

";
691: echo "  "; 692: echo "System Status Report

";
693: echo "  "; 694: echo "System Information

";
695: } 696: 697: if ($mode!="") echo "Back to Main Admin Menu

";
698: ?> 699: 700: 701: 702: Screen_Footer(); 703: ?> 704: