public function exec($params)
 {
     $data = array();
     $module = isset($params['module']) ? $params['module'] : 'servers';
     $view = isset($params['view']) ? $params['view'] : 'index';
     $data['module'] = $module;
     $data['view'] = $view;
     $data['title'] = '';
     $data['uri'] = '/' . $module . '/' . $view;
     $data['uriArray'] = array('/', $module, $view);
     switch ($module) {
         case 'domains':
             $domains = R::find('domain');
             $data['title'] = 'Domains';
             $data['domains'] = $domains;
             $data['template'] = 'design/desktop/templates/domains.tpl.php';
             break;
         case 'accounts':
             $data['title'] = 'Domains to accounts';
             $data['domains'] = getUnrelatedMainDomains();
             $data['template'] = 'design/desktop/templates/accounts.tpl.php';
             break;
         case 'servers':
             $data['title'] = 'Servers';
             $data['hasFieldSelector'] = true;
             $data['avaliableFields'] = getAvaliableFields('servers');
             $data['enabledFields'] = getEnabledFields('servers');
             $data['serversGrouped'] = getGroupedByType();
             $data['template'] = 'design/desktop/templates/servers_list.tpl.php';
             break;
         case 'search':
             $data['title'] = 'Search';
             $data['template'] = 'design/desktop/templates/search.tpl.php';
             break;
         case 'cleanup':
             $data['title'] = 'Cleanup';
             $data['template'] = 'design/desktop/templates/cleanup.tpl.php';
             break;
         default:
             $data['title'] = '404 Page not found';
             $data['template'] = 'design/desktop/templates/error.tpl.php';
             $data['error'] = array('code' => '404', 'msg' => 'Page not found');
             break;
     }
     mvc\render('design/desktop/templates/header.tpl.php', $data);
     mvc\render('design/desktop/templates/top_menu.tpl.php', $data);
     if (isset($data['hasFieldSelector']) && $data['hasFieldSelector']) {
         mvc\render('design/desktop/templates/field_selector.tpl.php', $data);
     }
     if (mvc\retrieve('debug')) {
         $data['values']['params'] = $params;
         mvc\render('design/desktop/templates/debug.tpl.php', $data);
     }
     mvc\render($data['template'], $data);
     mvc\render('design/desktop/templates/footer.tpl.php', $data);
 }
Example #2
0
<?php

require 'external/mimvic/uvic.php';
require 'external/redbean/rb.php';
require 'external/tivoka/include.php';
require 'models/class.Model_Domain.php';
require 'models/class.Model_Drive.php';
require 'classes/class.rpcHandler.php';
require 'classes/class.ajaxHandler.php';
require 'classes/class.contentHandler.php';
require 'classes/class.dataCollectorHandler.php';
require 'classes/class.searchHandler.php';
require 'functions.php';
//require 'mobileDetect/MobileDetect.class.php';
use MiMViC as mvc;
$config = (require dirname(__FILE__) . '/../config.php');
mvc\store('config', $config);
$dsn = 'mysql:host=' . mvc\retrieve('config')->dbHost . ';dbname=' . mvc\retrieve('config')->dbName;
R::setup($dsn, mvc\retrieve('config')->dbUsername, mvc\retrieve('config')->dbPassword);
$linker = new RedBean_LinkManager(R::$toolbox);
mvc\store('beanLinker', $linker);
// TODO: RedBean freeze schema
//$detect = MobileDetect::getInstance();
$debug = false;
mvc\store('debug', $debug);
if ($debug) {
    R::debug(true);
}
//$theme = $detect->isMobile() ? 'mobile' : 'desktop';
$theme = 'desktop';
mvc\store('theme', $theme);
Example #3
0
<?php

require 'includes/bootstrap.php';
use MiMViC as mvc;
$linker = mvc\retrieve('beanLinker');
$app = R::dispense('app');
$app->name = 'wordpress';
R::store($app);
$server = R::dispense('server');
$server->name = 'rockhopper.dk';
R::store($server);
$domain = R::dispense('domain');
$domain->name = 'rockhopper.dk';
R::store($domain);
$vhost = R::dispense('vhost');
$vhost->name = 'rockhopper.dk';
$linker->link($vhost, $server);
$linker->link($vhost, $app);
R::store($vhost);
$vhostEntry = R::dispense('vhostEntry');
$vhostEntry->type = 'name';
$linker->link($vhostEntry, $server);
$linker->link($vhostEntry, $vhost);
$linker->link($vhostEntry, $domain);
R::store($vhostEntry);
 /**
  * Searches for accounts
  *
  * @return array
  * @author Henrik Farre <*****@*****.**>
  **/
 private function accountSearch($str)
 {
     $finalResults = array();
     require 'class.sugarCrmConnector.php';
     try {
         $sugar = sugarCrmConnector::getInstance();
         $sugar->connect(mvc\retrieve('config')->sugarLogin, mvc\retrieve('config')->sugarPassword);
         $results = $sugar->getEntryList('Accounts', "accounts.account_type = 'Customer' AND accounts.name LIKE '{$str}'", 'name', 0, array('name'));
         foreach ($results->entry_list as $result) {
             $formattedResult = array('id' => $result->id, 'label' => $result->name_value_list[0]->value, 'type' => $this->type, 'value' => $result->name_value_list[0]->value);
             $finalResults[] = $formattedResult;
         }
     } catch (Exception $e) {
         // TODO: return error msg
         error_log(__LINE__ . ':' . __FILE__ . ' ' . $e->getMessage());
         // hf@bellcom.dk debugging
     }
     return $finalResults;
 }
 public function exec($params)
 {
     register_shutdown_function(array($this, 'outPutJson'));
     $this->setJsonMsg(array('msg' => 'No data returned'), self::ERROR);
     switch ($params['action']) {
         case 'accountsToDomains':
             if (empty($_GET['account_id']) || empty($_GET['domains'])) {
                 $this->setJsonMsg(array('msg' => 'Some fields are missing'), self::ERROR);
             } else {
                 $owner = false;
                 $owner = R::findOne('owner', 'account_id=?', array($_GET['account_id']));
                 if (!$owner instanceof RedBean_OODBBean) {
                     $owner = R::dispense("owner");
                     $owner->name = $_GET['account_name'];
                     $owner->account_id = $_GET['account_id'];
                     $id = R::store($owner);
                 }
                 foreach ($_GET['domains'] as $id) {
                     $domain = R::load('domain', $id);
                     R::associate($owner, $domain);
                     /*$otherDomainsDefinedInVhost = R::find("domain","vhost_id = ?",array($domain->vhost_id));
                       foreach ($otherDomainsDefinedInVhost as $otherDomain) 
                       {
                         if ( in_array( $otherDomain->id, $_GET['domains'] ) )
                         {
                           continue;
                         }
                         R::associate( $owner, $otherDomain );
                       }*/
                 }
                 $domains = getUnrelatedMainDomains();
                 $html = '';
                 foreach ($domains as $domain) {
                     $html .= '<option value="' . $domain->id . '">' . $domain->name . '</option>';
                 }
                 $this->setJsonMsg(array('msg' => $owner->name . ' set as owner of domains', 'content' => $html));
             }
             break;
         case 'getDomains':
             // TODO: use search
             $serverID = (int) $_GET['serverID'];
             $server = R::load("server", $serverID);
             $linker = mvc\retrieve('beanLinker');
             $vhostEntries = R::find('vhostEntry', 'server_id = ?', array($server->id));
             if (!empty($vhostEntries)) {
                 $html = '<h1>Domains in vhosts on server (excluding www aliases)</h1><div class="domains list">';
                 foreach ($vhostEntries as $entry) {
                     $domain = R::load('domain', $entry->domain_id);
                     // ignore www aliases
                     if ($domain->sub == 'www' && $domain->type == 'alias') {
                         continue;
                     }
                     $html .= '<div class="domain">
           <div class="status">' . (!$entry->is_valid ? '<img src="/design/desktop/images/error.png" title="' . $entry->note . '" class="icon"/>' : '') . '</div>
           <div class="name' . ($domain->is_active ? '' : ' inactive') . '">' . ($entry->type == 'alias' ? '- ' : '') . '<a href="http://' . $domain->getFQDN() . '">' . $domain->name . '</a></div>
           <br class="cls">
           </div>';
                 }
                 $html .= '</div>';
                 $this->setJsonMsg(array('msg' => 'ok', 'content' => $html));
             } else {
                 $this->setJsonMsg(array('msg' => 'No domains found on server'), self::WARNING);
             }
             break;
         case 'search':
             if (isset($_GET['query']) && isset($_GET['type'])) {
                 $type = $_GET['type'];
                 $query = $_GET['query'];
                 $query = $query . '%';
                 if (isset($_GET['wildcards']) && $_GET['wildcards'] == 'both') {
                     $query = '%' . $query;
                 }
                 $handler = new searchHandler($type);
                 $json = $handler->query($query);
                 $this->setJsonData($json);
             } else {
                 $this->setJsonMsg(array('msg' => 'Missing paramaters'), self::ERROR);
             }
             break;
         case 'missingDomRelation':
             $servers = R::find("server", "type = ?", array('xenu'));
             $content = array();
             foreach ($servers as $server) {
                 $dom0 = false;
                 $dom0 = R::getParent($server);
                 if (!$dom0 instanceof RedBean_OODBBean || empty($dom0->name)) {
                     $content[] = $server->name;
                 }
             }
             if (empty($content)) {
                 $this->setJsonMsg(array('msg' => 'No servers found', 'msg_type' => self::OK), self::ERROR);
             } else {
                 $this->setJsonMsg(array('msg' => 'ok', 'content' => implode('<br>', $content)));
             }
             break;
         case 'missingFieldsOnServer':
             $servers = R::find("server");
             $content = array();
             $allowedMissing = array('comment');
             foreach ($servers as $server) {
                 $missingFields = array();
                 foreach ($server->getIterator() as $key => $value) {
                     if (in_array($key, $allowedMissing)) {
                         continue;
                     }
                     if (empty($value) || is_null($value)) {
                         $missingFields[] = $key;
                     }
                 }
                 if (!empty($missingFields)) {
                     $content[] = 'Id: ' . $server->id . (!empty($server->name) ? ' (' . $server->name . ')' : '') . ' is missing: ' . implode(', ', $missingFields);
                 }
             }
             $this->setJsonMsg(array('msg' => 'ok', 'content' => implode('<br>', $content)));
             break;
         case 'inactiveDomains':
             $domains = R::find("domain", "is_active=?", array(false));
             $content = array();
             foreach ($domains as $domain) {
                 $server = R::load("server", $domain->server_id);
                 $content[] = $domain->name . ' on ' . $server->name . ' last updated ' . date('d-m-Y H:i:s', $domain->updated);
             }
             if (empty($content)) {
                 $this->setJsonMsg(array('msg' => 'No inactive domains found', 'msg_type' => self::OK), self::ERROR);
             } else {
                 $this->setJsonMsg(array('msg' => 'ok', 'content' => implode('<br>', $content)));
             }
             break;
         case 'notUpdatedRecently':
             $content = array();
             $type = $params['segments'][0][0];
             $ts = mktime();
             switch ($type) {
                 case 'domains':
                     $results = R::find("domain", "updated < ?", array($ts));
                     foreach ($results as $domain) {
                         $content[] = $domain->getFQDN();
                     }
                     break;
                 case 'servers':
                     $results = R::find("server", "updated < ?", array($ts));
                     foreach ($results as $result) {
                         $content[] = $result->name;
                     }
                     break;
             }
             if (empty($content)) {
                 $this->setJsonMsg(array('msg' => 'No ' . $type . ' not updated the last 3 days', 'msg_type' => self::OK), self::ERROR);
             } else {
                 $this->setJsonMsg(array('msg' => 'ok', 'content' => implode('<br>', $content)));
             }
             break;
         case 'domainsWithForeignDNS':
             $dnsServers = mvc\retrieve('config')->dnsServers;
             if (is_array($dnsServers)) {
                 $content = array();
                 $ipAddresses = R::find('ip_address', " type = 'NS' AND value NOT IN ('" . implode("', '", $dnsServers) . "') ");
                 foreach ($ipAddresses as $ip) {
                     $domains = R::related($ip, 'domain');
                     foreach ($domains as $domain) {
                         $content[$domain->name] = $domain->name . ' (' . $ip->value . ')';
                     }
                 }
                 $this->setJsonMsg(array('msg' => 'ok', 'content' => implode('<br>', $content)));
             } else {
                 $this->setJsonMsg(array('msg' => 'Please set "dnsServers" as an array in the config file'), self::ERROR);
             }
             break;
             // TODO: should be generalized to allow editing of other fields
         // TODO: should be generalized to allow editing of other fields
         case 'editServerComment':
             $serverID = (int) $_GET['serverID'];
             $server = R::load("server", $serverID);
             if ($server instanceof RedBean_OODBBean) {
                 $content = '<form action="/service/ajax/saveServerComment/?serverID=' . $serverID . '" method="post" id="serverCommentForm">
         <p>
         <textarea name="comment" rows="10" cols="50">' . $server->comment . '</textarea><br>
         <input type="submit" name="serverCommentSaveAction" value="Save" />
         </p>
         </form';
                 $this->setJsonMsg(array('msg' => 'ok', 'content' => $content));
             } else {
                 $this->setJsonMsg(array('msg' => 'Unknown server'), self::ERROR);
             }
             break;
             // TODO: should be generalized to allow editing of other fields
         // TODO: should be generalized to allow editing of other fields
         case 'saveServerComment':
             $comment = $_GET['comment'];
             $serverID = (int) $_GET['serverID'];
             $server = R::load("server", $serverID);
             $server->comment = $comment;
             R::store($server);
             $this->setJsonMsg(array('msg' => 'Comment stored'));
             break;
         case 'setEnabledFields':
             $type = $_GET['type'];
             $availableFields = getAvaliableFields($type);
             $enabledFields = array();
             foreach ($_GET['field'] as $key) {
                 if (isset($availableFields[$key])) {
                     $enabledFields[$key] = $availableFields[$key];
                 }
             }
             setcookie('enabledFields', serialize(array($type => $enabledFields)), time() + 36000, '/');
             $this->setJsonMsg(array('msg' => 'Enabled fields set'));
             break;
         case 'getServerList':
             $data['hasFieldSelector'] = true;
             $data['avaliableFields'] = getAvaliableFields('servers');
             $data['enabledFields'] = getEnabledFields('servers');
             $data['serversGrouped'] = getGroupedByType();
             $data['template'] = 'design/desktop/templates/servers_list.tpl.php';
             ob_start();
             mvc\render($data['template'], $data);
             $content = ob_get_clean();
             $this->setJsonMsg(array('msg' => 'ok', 'content' => $content));
             break;
         case 'getFieldList':
             // TODO: should not be hardcoded
             $avaliableFields = getAvaliableFields('servers');
             $enabledFields = getEnabledFields('servers');
             $avaliableLi = '';
             $enabledLi = '';
             $enabledFieldKeys = array_keys($enabledFields);
             foreach ($avaliableFields as $key => $prettyName) {
                 if (in_array($key, $enabledFieldKeys)) {
                     $enabledLi .= '<li id="field=' . $key . '">' . $prettyName . '</li>';
                 } else {
                     $avaliableLi .= '<li id="field=' . $key . '">' . $prettyName . '</li>';
                 }
             }
             $content = '<div class="sortableListContainer first">
       <h2>Enabled fields</h2>
       <ul class="connectedSortable" id="enabledFields">
       ' . $enabledLi . '
       </ul>
       </div>
       <div class="sortableListContainer last">
       <h2>Avaliable fields</h2>
       <ul class="connectedSortable" id="avaliableFields">
       ' . $avaliableLi . '
       </ul>
       </div>';
             $this->setJsonMsg(array('msg' => 'ok', 'content' => $content));
             break;
         default:
             $this->setJsonMsg(array('msg' => 'Unknown action'), self::ERROR);
             break;
     }
 }
Example #6
0
        <th>Server</th>
        <th>IP addresses</th>
        <th>TLD</th>
      </tr>
    </thead>
    <tbody>

<?php 
use MiMViC as mvc;
$linker = mvc\retrieve('beanLinker');
foreach ($domains as $domain) {
    $owners = array();
    $owners = R::related($domain, 'owner');
    $ownerString = '';
    foreach ($owners as $owner) {
        $ownerString .= '<a href="' . sprintf(mvc\retrieve('config')->sugarAccountUrl, $owner->account_id) . '">' . $owner->name . '</a> ';
    }
    $vhostEntries = R::find('vhostEntry', 'domain_id = ?', array($domain->id));
    $servers = array();
    foreach ($vhostEntries as $entry) {
        $server = $linker->getBean($entry, 'server');
        $servers[] = $server->name;
    }
    $ips = array();
    $ipString = '';
    $ipAddresses = R::related($domain, 'ip_address');
    if (!empty($ipAddresses)) {
        foreach ($ipAddresses as $ip) {
            $ips[] = $ip->value;
        }
        $ipString = implode(', ', $ips);
 public function exec($params)
 {
     $data = unserialize(base64_decode($_POST['data']));
     $linker = mvc\retrieve('beanLinker');
     if ($data['hostname'] == null || empty($data['hostname'])) {
         die('Missing hostname');
     }
     $server = R::findOne("server", "name = ? ", array($data['hostname']));
     if (!$server instanceof RedBean_OODBBean) {
         $server = R::dispense('server');
         $server->created = mktime();
     }
     $server->updated = mktime();
     $server->name = $data['hostname'];
     $server->int_ip = $data['ipaddress'];
     $server->ext_ip = preg_match('/^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:[.](?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$/', $data['external_ip']) ? $data['external_ip'] : '';
     $hardware = array('memory' => $data['memorysize'], 'cpucount' => $data['processorcount'], 'cpu' => $data['processor0']);
     if (isset($data['disk']['partitions'])) {
         $hardware['partitions'] = $data['disk']['partitions'];
     }
     $server->kernel_release = $data['kernelrelease'];
     $server->os = $data['lsbdistid'];
     $server->os_release = $data['lsbdistrelease'];
     $server->arch = $data['hardwaremodel'];
     $server->hardware = serialize($hardware);
     $server->type = $data['virtual'];
     $server->comment = $server->comment;
     // keep existing comment - should be dropped when schema is frozen
     $server->is_active = true;
     $server->uptime = isset($data['uptime']) ? $data['uptime'] : 0.0;
     $server->software_updates = !empty($data['software_updates']) ? serialize($data['software_updates']) : null;
     $serverID = R::store($server);
     if (isset($data['disk']['physical'])) {
         foreach ($data['disk']['physical'] as $disk) {
             // TODO: set drives inactive to make sure only active drives are is_active = true;
             $drive = R::findOne("drive", "serial_no=?", array($disk['SerialNo']));
             if (!$drive instanceof RedBean_OODBBean) {
                 $drive = R::dispense('drive');
                 $drive->created = mktime();
                 $drive->updated = mktime();
                 $drive->is_active = true;
                 $drive->setBrand($disk['Model']);
                 $drive->model = $disk['Model'];
                 $drive->serial_no = $disk['SerialNo'];
                 $drive->fw_revision = $disk['FwRev'];
                 $drive->type = $disk['type'];
             } else {
                 $drive->is_active = true;
                 $drive->updated = mktime();
             }
             R::store($drive);
             R::associate($server, $drive);
         }
     }
     if ($server->type === 'xen0' && isset($data['domUs']) && !empty($data['domUs'])) {
         foreach ($data['domUs'] as $domUName) {
             $domU = array();
             $result = array();
             $domU = R::findOne("server", "name=?", array($domUName));
             if (!$domU instanceof RedBean_OODBBean) {
                 $domU = R::dispense('server');
                 $domU->name = $domUName;
                 $domU->created = mktime();
                 $domU->updated = mktime();
                 $domU->type = 'xenu';
                 R::attach($server, $domU);
                 $domUID = R::store($domU);
             } else {
                 $domU->updated = mktime();
                 R::attach($server, $domU);
                 // server is parent of domU
             }
         }
     }
     // Handle domains
     if (isset($data['vhosts'])) {
         $updateTimestamp = mktime();
         foreach ($data['vhosts'] as $v) {
             $vhost = R::findOne('vhost', 'server_id=? AND server_name=?', array($serverID, $v['servername']));
             if (!$vhost instanceof RedBean_OODBBean) {
                 $vhost = R::dispense('vhost');
                 $vhost->created = $updateTimestamp;
             }
             $vhost->updated = $updateTimestamp;
             $vhost->server_name = $v['servername'];
             $vhost->file_name = isset($v['filename']) ? $v['filename'] : null;
             $vhost->document_root = isset($v['documentroot']) ? $v['documentroot'] : null;
             $vhost->server_admin = isset($v['serveradmin']) ? $v['serveradmin'] : null;
             $app = null;
             if (isset($v['app']['name'])) {
                 $app = R::findOne('app', 'name=?', array($v['app']['name']));
                 if (!$app instanceof RedBean_OODBBean) {
                     $app = R::dispense('app');
                     $app->name = $v['app']['name'];
                     R::store($app);
                 }
             }
             $vhost->app_version = isset($v['app']['version']) ? $v['app']['version'] : null;
             //$vhost->is_valid      = true;
             $vhost->comment = '';
             if ($app instanceof RedBean_OODBBean) {
                 $linker->link($vhost, $app);
             }
             $linker->link($vhost, $server);
             $vhostID = R::store($vhost);
             foreach ($v['domains'] as $domainEntry) {
                 if (empty($domainEntry['name'])) {
                     continue;
                 }
                 $domainParts = array();
                 $domainParts = array_reverse(explode('.', $domainEntry['name']));
                 // TODO: check if 2 first parts are an ccTLD, see http://publicsuffix.org/list/
                 $tld = null;
                 $sld = null;
                 $sub = null;
                 $tld = array_shift($domainParts);
                 $sld = array_shift($domainParts);
                 $sub = !empty($domainParts) ? implode('.', array_reverse($domainParts)) : null;
                 /*
                           $sql = 'sub=? AND sld=? AND tld=? AND vhost_id=?';
                           $args = array($sub,$sld,$tld,$vhostID);
                           if ( is_null($sub) )
                           {
                  $sql = 'sub IS NULL AND sld=? AND tld=? AND vhost_id=?';
                  $args = array($sld,$tld,$vhostID);
                           }
                 
                           $domain = R::findOne('domain',$sql,$args);
                 */
                 $domain = R::findOne('domain', 'name = ?', array($domainEntry['name']));
                 if (!$domain instanceof RedBean_OODBBean) {
                     $domain = R::dispense('domain');
                     $domain->created = $updateTimestamp;
                 }
                 $domain->updated = $updateTimestamp;
                 $domain->sub = empty($sub) ? null : $sub;
                 $domain->sld = $sld;
                 $domain->tld = $tld;
                 $domain->name = $domainEntry['name'];
                 $domain->is_active = true;
                 //$linker->link($domain,$vhost);
                 $domainID = R::store($domain);
                 $vhostEntry = R::findOne('vhostEntry', 'type = ? AND vhost_id = ? AND domain_id = ?', array($domainEntry['type'], $vhostID, $domainID));
                 if (!$vhostEntry instanceof RedBean_OODBBean) {
                     $vhostEntry = R::dispense('vhostEntry');
                     $vhostEntry->created = $updateTimestamp;
                     $vhostEntry->is_valid = true;
                     $vhostEntry->note = '';
                 }
                 $vhostEntry->type = $domainEntry['type'];
                 $vhostEntry->updated = $updateTimestamp;
                 $linker->link($vhostEntry, $vhost);
                 $linker->link($vhostEntry, $domain);
                 $linker->link($vhostEntry, $server);
                 R::store($vhostEntry);
             }
             // set is_active to false for those domains in the current vhost which has not been updated
             /*$notUpdatedDomains = R::find("domain","updated != ? AND vhost_id = ?", array( $updateTimestamp, $vhostID ));
               $domain = array();
               foreach ($notUpdatedDomains as $domain) 
               {
                 $domain->is_active = false; 
                 $domainID = R::store($domain);
               }*/
         }
     }
 }