plugins->registerEvent('proxy_reverse_insert', $this->plugin_name, 'insert'); $app->plugins->registerEvent('proxy_reverse_update', $this->plugin_name, 'update'); $app->plugins->registerEvent('proxy_reverse_delete', $this->plugin_name, 'delete'); $app->plugins->registerEvent('web_domain_insert', $this->plugin_name, 'insert'); $app->plugins->registerEvent('web_domain_update', $this->plugin_name, 'update'); $app->plugins->registerEvent('web_domain_delete', $this->plugin_name, 'delete'); } function insert($event_name, $data) { global $app, $conf; // just run the update function $this->update($event_name, $data); } function update($event_name, $data) { global $app, $conf; $domains = $this->_getSquidDomains($app); $rules = $this->_getSquidRewriteRules($app); $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate("squidRewriteRules.py.master"); if (!empty($rules))$tpl->setLoop('squid_rewrite_rules', $rules); file_put_contents('/etc/squid/squidRewriteRules.py', $tpl->grab()); unset($tpl); $app->log('Writing squid rewrite configuration to /etc/squid/squidRewriteRules.py', LOGLEVEL_DEBUG); $tpl = new tpl(); $tpl->newTemplate("domains.txt.master"); $tpl->setLoop('squid_domains', $domains); file_put_contents('/etc/squid/domains.txt', $tpl->grab()); unset($tpl); $app->log('Writing squid domains configuration to /etc/squid/domains.txt', LOGLEVEL_DEBUG); // request a httpd reload when all records have been processed $app->services->restartServiceDelayed('squid', 'restart'); } function delete($event_name, $data) { global $app, $conf; // load the server configuration options // just run the update function $this->update($event_name, $data); } function _getSquidDomains($app) { $records = $app->dbmaster->queryAllRecords("SELECT ds.origin, dr.name, IF(origin=name,true,false) AS isRoot FROM dns_soa ds inner join dns_rr dr ON ds.id=dr.zone WHERE ds.active='Y' AND dr.type IN ('A','CNAME') AND dr.name NOT IN ('mail','ns1')"); $domains = array(); foreach ($records as $record) { $origin = substr($record["origin"], 0, -1); if ($record["isRoot"]) { array_push($domains, array("domain" => $origin)); } else { array_push($domains, array("domain" => $record["name"].".".$origin)); } } return $domains; } function _getSquidRewriteRules($app) { $rules = array(); $rules = $app->db->queryAllRecords("SELECT rewrite_url_src, rewrite_url_dest FROM squid_reverse ORDER BY rewrite_id ASC"); $web_domains = $app->db->queryAllRecords("SELECT wd.subdomain, wd.domain, si.ip_address FROM web_domain wd INNER JOIN server s USING(server_id) INNER JOIN server_ip si USING(server_id)"); foreach ($web_domains as $domain) { if ($domain["subdomain"] == "www") { array_push($rules, array("rewrite_url_src"=>"^http://www.".$domain["domain"]."/(.*)", "rewrite_url_dest"=>"http://".$domain["ip_address"].":80/")); array_push($rules, array("rewrite_url_src"=>"^http://".$domain["domain"]."/(.*)", "rewrite_url_dest"=>"http://".$domain["ip_address"].":80/")); } else { array_push($rules, array("rewrite_url_src"=>"^http://www.".$domain["domain"]."/(.*)", "rewrite_url_dest"=>"http://".$domain["ip_address"].":80/")); } } return $rules; } } // end class ?>