Newer
Older
$loc_parts = explode(' ', $l);
// see http://wiki.nginx.org/HttpCoreModule#location
if($loc_parts[1] == '=' || $loc_parts[1] == '~' || $loc_parts[1] == '~*' || $loc_parts[1] == '^~'){
$location = $loc_parts[1].' '.$loc_parts[2];
} else {
$location = $loc_parts[1];
}
unset($loc_parts);
if(!isset($locations[$location]['action'])) $locations[$location]['action'] = 'replace';
if(substr($l, -9) == '##merge##') $locations[$location]['action'] = 'merge';
if(substr($l, -10) == '##delete##') $locations[$location]['action'] = 'delete';
if(!isset($locations[$location]['open_tag'])) $locations[$location]['open_tag'] = ' location '.$location.' {';
if(!isset($locations[$location]['location']) || $locations[$location]['action'] == 'replace') $locations[$location]['location'] = '';
if($locations[$location]['action'] == 'delete') $locations_to_delete[] = $location;
if(!isset($locations[$location]['end_tag'])) $locations[$location]['end_tag'] = ' }';
if(!isset($locations[$location]['start_line'])) $locations[$location]['start_line'] = $i;
unset($lines[$i]);
} else {
if($islocation){
$openingbracketpos = strrpos($l, '{');
if($openingbracketpos !== false){
$level += 1;
}
$closingbracketpos = strrpos($l, '}');
if($closingbracketpos !== false && $level > 0 && $closingbracketpos >= intval($openingbracketpos)){
$level -= 1;
$locations[$location]['location'] .= $lines[$i]."\n";
} elseif($closingbracketpos !== false && $level == 0 && $closingbracketpos >= intval($openingbracketpos)){
$islocation = false;
} else {
$locations[$location]['location'] .= $lines[$i]."\n";
}
unset($lines[$i]);
}
}
}
if(is_array($locations) && !empty($locations)){
if(is_array($locations_to_delete) && !empty($locations_to_delete)){
foreach($locations_to_delete as $location_to_delete){
if(isset($locations[$location_to_delete])) unset($locations[$location_to_delete]);
}
}
foreach($locations as $key => $val){
$new_location = $val['open_tag']."\n".$val['location'].$val['end_tag'];
$lines[$val['start_line']] = $new_location;
}
}
ksort($lines);
$vhost_conf = implode("\n", $lines);
}
return trim($vhost_conf);
}
function client_delete($event_name, $data) {
global $app, $conf;
$app->uses("getconf");
$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
$client_id = intval($data['old']['client_id']);
if($client_id > 0) {
$client_dir = $web_config['website_basedir'].'/clients/client'.$client_id;
if(is_dir($client_dir) && !stristr($client_dir, '..')) {
// remove symlinks from $client_dir
$files = array_diff(scandir($client_dir), array('.', '..'));
if(is_array($files) && !empty($files)){
foreach($files as $file){
if(is_link($client_dir.'/'.$file)){
unlink($client_dir.'/'.$file);
$app->log('Removed symlink: '.$client_dir.'/'.$file, LOGLEVEL_DEBUG);
}
}
}
@rmdir($client_dir);
$app->log('Removed client directory: '.$client_dir, LOGLEVEL_DEBUG);
}
if($app->system->is_group('client'.$client_id)){
$this->_exec('groupdel client'.$client_id);
$app->log('Removed group client'.$client_id, LOGLEVEL_DEBUG);
}
}
}
//* Wrapper for exec function for easier debugging
private function _exec($command) {
global $app;
$app->log('exec: '.$command, LOGLEVEL_DEBUG);
exec($command);
}
private function _checkTcp ($host, $port) {
$fp = @fsockopen($host, $port, $errno, $errstr, 2);
if ($fp) {
fclose($fp);
return true;
} else {
return false;
}
}
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
public function create_relative_link($f, $t) {
global $app;
// $from already exists
$from = realpath($f);
// realpath requires the traced file to exist - so, lets touch it first, then remove
@$app->system->unlink($t); touch($t);
$to = realpath($t);
@$app->system->unlink($t);
// Remove from the left side matching path elements from $from and $to
// and get path elements counts
$a1 = explode('/', $from); $a2 = explode('/', $to);
for ($c = 0; $a1[$c] == $a2[$c]; $c++) {
unset($a1[$c]); unset($a2[$c]);
}
$cfrom = implode('/', $a1);
// Check if a path is fully a subpath of another - no way to create symlink in the case
if (count($a1) == 0 || count($a2) == 0) return false;
// Add ($cnt_to-1) number of "../" elements to left side of $cfrom
for ($c = 0; $c < (count($a2)-1); $c++) { $cfrom = '../'.$cfrom; }
return symlink($cfrom, $to);
}
private function _rewrite_quote($string) {
return str_replace(array('.', '*', '?', '+'), array('\\.', '\\*', '\\?', '\\+'), $string);
}
private function url_is_local($hostname, $domain_id){
global $app;
// ORDER BY clause makes sure wildcard subdomains (*) are listed last in the result array so that we can find direct matches first
$webs = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' ORDER BY subdomain ASC");
if(is_array($webs) && !empty($webs)){
foreach($webs as $web){
// web domain doesn't match hostname
if(substr($hostname, -strlen($web['domain'])) != $web['domain']) continue;
// own vhost and therefore server {} container of its own
//if($web['type'] == 'vhostsubdomain' || $web['type'] == 'vhostalias') continue;
// alias domains/subdomains using rewrites and therefore a server {} container of their own
//if(($web['type'] == 'alias' || $web['type'] == 'subdomain') && $web['redirect_type'] != '' && $web['redirect_path'] != '') continue;
if($web['subdomain'] == '*'){
$pattern = '/\.?'.str_replace('.', '\.', $web['domain']).'$/i';
}
if($web['subdomain'] == 'none'){
if($web['domain'] == $hostname){
if($web['domain_id'] == $domain_id || $web['parent_domain_id'] == $domain_id){
// own vhost and therefore server {} container of its own
if($web['type'] == 'vhostsubdomain' || $web['type'] == 'vhostalias') return false;
// alias domains/subdomains using rewrites and therefore a server {} container of their own
if(($web['type'] == 'alias' || $web['type'] == 'subdomain') && $web['redirect_type'] != '' && $web['redirect_path'] != '') return false;
return true;
} else {
return false;
}
}
$pattern = '/^'.str_replace('.', '\.', $web['domain']).'$/i';
}
if($web['subdomain'] == 'www'){
if($web['domain'] == $hostname || $web['subdomain'].'.'.$web['domain'] == $hostname){
if($web['domain_id'] == $domain_id || $web['parent_domain_id'] == $domain_id){
// own vhost and therefore server {} container of its own
if($web['type'] == 'vhostsubdomain' || $web['type'] == 'vhostalias') return false;
// alias domains/subdomains using rewrites and therefore a server {} container of their own
if(($web['type'] == 'alias' || $web['type'] == 'subdomain') && $web['redirect_type'] != '' && $web['redirect_path'] != '') return false;
return true;
} else {
return false;
}
}
$pattern = '/^(www\.)?'.str_replace('.', '\.', $web['domain']).'$/i';
}
if(preg_match($pattern, $hostname)){
if($web['domain_id'] == $domain_id || $web['parent_domain_id'] == $domain_id){
// own vhost and therefore server {} container of its own
if($web['type'] == 'vhostsubdomain' || $web['type'] == 'vhostalias') return false;
// alias domains/subdomains using rewrites and therefore a server {} container of their own
if(($web['type'] == 'alias' || $web['type'] == 'subdomain') && $web['redirect_type'] != '' && $web['redirect_path'] != '') return false;
return true;
} else {
return false;
}
}
}
}
return false;
}
private function get_seo_redirects($web, $prefix = '', $force_subdomain = false){
// $force_subdomain = 'none|www'
$seo_redirects = array();
if(substr($web['domain'], 0, 2) === '*.') $web['subdomain'] = '*';
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
if(($web['subdomain'] == 'www' || $web['subdomain'] == '*') && $force_subdomain != 'www'){
if($web['seo_redirect'] == 'non_www_to_www'){
$seo_redirects[$prefix.'seo_redirect_origin_domain'] = $web['domain'];
$seo_redirects[$prefix.'seo_redirect_target_domain'] = 'www.'.$web['domain'];
$seo_redirects[$prefix.'seo_redirect_operator'] = '=';
}
if($web['seo_redirect'] == '*_domain_tld_to_www_domain_tld'){
// ^(example\.com|(?!\bwww\b)\.example\.com)$
// ^(example\.com|((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.example\.com))$
$seo_redirects[$prefix.'seo_redirect_origin_domain'] = '^('.str_replace('.', '\.', $web['domain']).'|((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.'.str_replace('.', '\.', $web['domain']).'))$';
$seo_redirects[$prefix.'seo_redirect_target_domain'] = 'www.'.$web['domain'];
$seo_redirects[$prefix.'seo_redirect_operator'] = '~*';
}
if($web['seo_redirect'] == '*_to_www_domain_tld'){
$seo_redirects[$prefix.'seo_redirect_origin_domain'] = 'www.'.$web['domain'];
$seo_redirects[$prefix.'seo_redirect_target_domain'] = 'www.'.$web['domain'];
$seo_redirects[$prefix.'seo_redirect_operator'] = '!=';
}
}
if($force_subdomain != 'none'){
if($web['seo_redirect'] == 'www_to_non_www'){
$seo_redirects[$prefix.'seo_redirect_origin_domain'] = 'www.'.$web['domain'];
$seo_redirects[$prefix.'seo_redirect_target_domain'] = $web['domain'];
$seo_redirects[$prefix.'seo_redirect_operator'] = '=';
}
if($web['seo_redirect'] == '*_domain_tld_to_domain_tld'){
// ^(.+)\.example\.com$
$seo_redirects[$prefix.'seo_redirect_origin_domain'] = '^(.+)\.'.str_replace('.', '\.', $web['domain']).'$';
$seo_redirects[$prefix.'seo_redirect_target_domain'] = $web['domain'];
$seo_redirects[$prefix.'seo_redirect_operator'] = '~*';
}
if($web['seo_redirect'] == '*_to_domain_tld'){
$seo_redirects[$prefix.'seo_redirect_origin_domain'] = $web['domain'];
$seo_redirects[$prefix.'seo_redirect_target_domain'] = $web['domain'];
$seo_redirects[$prefix.'seo_redirect_operator'] = '!=';
}
}
return $seo_redirects;
}
} // end class
?>