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); }
<?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);
<?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; } }
<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); }*/ } } }