Skip to content
apache2_plugin.inc.php 52.8 KiB
Newer Older
		
		// Chown and chmod the directories
		exec("chown -R $username:$groupname ".escapeshellcmd($data["new"]["document_root"]));
		
		// make temp direcory writable for the apache user and the website user
		exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp"));
		
		
		// Create the vhost config file
		$app->load('tpl');
		
		$tpl = new tpl();
		$tpl->newTemplate("vhost.conf.master");
		
		$vhost_data = $data["new"];
		$vhost_data["web_document_root"] = $data["new"]["document_root"]."/web";
		$vhost_data["web_document_root_www"] = "/var/www/".$data["new"]["domain"]."/web";
		
		// Check if a SSL cert exists
		$ssl_dir = $data["new"]["document_root"]."/ssl";
		$domain = $data["new"]["domain"];
  		$key_file = $ssl_dir.'/'.$domain.".key";
  		$crt_file = $ssl_dir.'/'.$domain.".crt";
		$bundle_file = $ssl_dir.'/'.$domain.".bundle";
		
		if($data["new"]["ssl"] == 'y' && @is_file($crt_file) && @is_file($key_file)) {
			$vhost_data["ssl_enabled"] = 1;
			$app->log("Enable SSL for: $domain",LOGLEVEL_DEBUG);
		} else {
			$vhost_data["ssl_enabled"] = 0;
			$app->log("Disable SSL for: $domain",LOGLEVEL_DEBUG);
		}
		
		if(@is_file($bundle_file)) $vhost_data['has_bundle_cert'] = 1;
		
		//$vhost_data["document_root"] = $data["new"]["document_root"]."/web";
		$tpl->setVar($vhost_data);
		
		// Rewrite rules
		$rewrite_rules = array();
		if($data["new"]["redirect_type"] != '') {
			$rewrite_rules[] = array(	'rewrite_domain' 	=> $data["new"]["domain"],
										'rewrite_type' 		=> $data["new"]["redirect_type"],
										'rewrite_target' 	=> $data["new"]["redirect_path"]);
		}
		
		// get alias domains (co-domains and subdomains)
		$aliases = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$data["new"]["domain_id"]." AND active = 'y'");
        switch($data["new"]["subdomain"]) {
        case 'www':
            $server_alias .= 'www.'.$data["new"]["domain"].' ';
            break;
        case '*':
            $server_alias .= '*.'.$data["new"]["domain"].' ';    
            break;
        }
		if(is_array($aliases)) {
			foreach($aliases as $alias) {
                switch($alias["subdomain"]) {
                case 'www':
                    $server_alias .= 'www.'.$alias["domain"].' '.$alias["domain"].' ';
                    break;
                case '*':
                    $server_alias .= '*.'.$alias["domain"].' '.$alias["domain"].' ';    
                    break;
                default:
                    $server_alias .= $alias["domain"].' ';            
                    break;
                }
				$app->log("Add server alias: $alias[domain]",LOGLEVEL_DEBUG);
				// Rewriting
				if($alias["redirect_type"] != '') {
					$rewrite_rules[] = array(	'rewrite_domain' 	=> $alias["domain"],
												'rewrite_type' 		=> $alias["redirect_type"],
												'rewrite_target' 	=> $alias["redirect_path"]);
				}
			}
		}
		$tpl->setVar('alias',trim($server_alias));
		if(count($rewrite_rules) > 0) {
			$tpl->setVar('rewrite_enabled',1);
		} else {
			$tpl->setVar('rewrite_enabled',0);
		}
		$tpl->setLoop('redirects',$rewrite_rules);
		
		/** 
		 * install fast-cgi starter script and add script aliasd config 
		 * first we create the script directory if not already created, then copy over the starter script
		 * settings are copied over from the server ini config for now
		 * TODO: Create form for fastcgi configs per site.
		 */
		
		if ($data["new"]["php"] == "fast-cgi")
		{
			$fastcgi_config = $app->getconf->get_server_config($conf["server_id"], 'fastcgi');
			
			$fastcgi_starter_path = str_replace("[system_user]",$data["new"]["system_user"],$fastcgi_config["fastcgi_starter_path"]);
			$fastcgi_starter_path = str_replace("[client_id]",$client_id,$fastcgi_starter_path);
			
			if (!is_dir($fastcgi_starter_path))
			{
				exec("mkdir -p ".escapeshellcmd($fastcgi_starter_path));
				exec("chown ".$data["new"]["system_user"].":".$data["new"]["system_group"]." ".escapeshellcmd($fastcgi_starter_path));
				
				
				$app->log("Creating fastcgi starter script directory: $fastcgi_starter_path",LOGLEVEL_DEBUG);
			}
			
			$fcgi_tpl = new tpl();
			$fcgi_tpl->newTemplate("php-fcgi-starter.master");
				
			$fcgi_tpl->setVar('php_ini_path',$fastcgi_config["fastcgi_phpini_path"]);
			$fcgi_tpl->setVar('document_root',$data["new"]["document_root"]);
			$fcgi_tpl->setVar('php_fcgi_children',$fastcgi_config["fastcgi_children"]);
			$fcgi_tpl->setVar('php_fcgi_max_requests',$fastcgi_config["fastcgi_max_requests"]);
			$fcgi_tpl->setVar('php_fcgi_bin',$fastcgi_config["fastcgi_bin"]);
				
			$fcgi_starter_script = escapeshellcmd($fastcgi_starter_path.$fastcgi_config["fastcgi_starter_script"]);
			file_put_contents($fcgi_starter_script,$fcgi_tpl->grab());
			unset($fcgi_tpl);
			
			$app->log("Creating fastcgi starter script: $fcgi_starter_script",LOGLEVEL_DEBUG);
			
			
			exec("chmod 755 $fcgi_starter_script");
			exec("chown ".$data["new"]["system_user"].":".$data["new"]["system_group"]." $fcgi_starter_script");

			$tpl->setVar('fastcgi_alias',$fastcgi_config["fastcgi_alias"]);
			$tpl->setVar('fastcgi_starter_path',$fastcgi_starter_path);
			$tpl->setVar('fastcgi_starter_script',$fastcgi_config["fastcgi_starter_script"]);
			
		}
		
		$vhost_file = escapeshellcmd($web_config["vhost_conf_dir"].'/'.$data["new"]["domain"].'.vhost');
		file_put_contents($vhost_file,$tpl->grab());
		$app->log("Writing the vhost file: $vhost_file",LOGLEVEL_DEBUG);
		unset($tpl);
		
		// Set the symlink to enable the vhost
		$vhost_symlink = escapeshellcmd($web_config["vhost_conf_enabled_dir"].'/'.$data["new"]["domain"].'.vhost');
		if($data["new"]["active"] == 'y' && !is_link($vhost_symlink)) {
			symlink($vhost_file,$vhost_symlink);
			$app->log("Creating the symlink: $vhost_symlink => $vhost_file",LOGLEVEL_DEBUG);
		}
		
		// Remove the symlink, if site is inactive
		if($data["new"]["active"] == 'n' && is_link($vhost_symlink)) {
			unlink($vhost_symlink);
			$app->log("Removing symlink: $vhost_symlink => $vhost_file",LOGLEVEL_DEBUG);
		}
		
		// remove old symlink and vhost file, if domain name of the site has changed
		if($this->action == 'update' && $data["old"]["domain"] != '' && $data["new"]["domain"] != $data["old"]["domain"]) {
			$vhost_symlink = escapeshellcmd($web_config["vhost_conf_enabled_dir"].'/'.$data["old"]["domain"].'.vhost');
			unlink($vhost_symlink);
			$app->log("Removing symlink: $vhost_symlink => $vhost_file",LOGLEVEL_DEBUG);
			$vhost_file = escapeshellcmd($web_config["vhost_conf_dir"].'/'.$data["old"]["domain"].'.vhost');
			unlink($vhost_file);
			$app->log("Removing File $vhost_file",LOGLEVEL_DEBUG);
		}
		
		// request a httpd reload when all records have been processed
		$app->services->restartServiceDelayed('httpd','reload');
		
	}
	
	function delete($event_name,$data) {
		global $app, $conf;
		
		// load the server configuration options
		$app->uses("getconf");
		$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
		
		// Deleting the vhost file, symlink and the data directory
		$vhost_symlink = escapeshellcmd($web_config["vhost_conf_enabled_dir"].'/'.$data["old"]["domain"].'.vhost');
		unlink($vhost_symlink);
		$app->log("Removing symlink: $vhost_symlink => $vhost_file",LOGLEVEL_DEBUG);
		
		$vhost_file = escapeshellcmd($web_config["vhost_conf_dir"].'/'.$data["old"]["domain"].'.vhost');
		unlink($vhost_file);
		$app->log("Removing vhost file: $vhost_file",LOGLEVEL_DEBUG);
		
		$docroot = escapeshellcmd($data["old"]["document_root"]);
		if($docroot != '' && !stristr($docroot,'..')) exec("rm -rf $docroot");
		
		
		//remove the php fastgi starter script if available
		if ($data["old"]["php"] == "fast-cgi")
		{
			$fastcgi_starter_path = str_replace("[system_user]",$data["old"]["system_user"],$web_config["fastcgi_starter_path"]);
			if (is_dir($fastcgi_starter_path))
			{
					exec("rm -rf $fastcgi_starter_path");
			}
		}
		
		$app->log("Removing website: $docroot",LOGLEVEL_DEBUG);
		
		// Delete the symlinks for the sites
		$client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["old"]["sys_groupid"]));
		$client_id = intval($client["client_id"]);
		unset($client);
		$tmp_symlinks_array = explode(':',$web_config["website_symlinks"]);
		if(is_array($tmp_symlinks_array)) {
			foreach($tmp_symlinks_array as $tmp_symlink) {
				$tmp_symlink = str_replace("[client_id]",$client_id,$tmp_symlink);
				$tmp_symlink = str_replace("[website_domain]",$data["old"]["domain"],$tmp_symlink);
				// Remove trailing slash
				if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1);
				// create the symlinks, if not exist
				if(is_link($tmp_symlink)) {
					unlink($tmp_symlink);
					$app->log("Removing symlink: ".$tmp_symlink,LOGLEVEL_DEBUG);
				}
			}
		}
		// end removing symlinks
		
		// Delete the log file directory
		$vhost_logfile_dir = escapeshellcmd('/var/log/ispconfig/httpd/'.$data["old"]["domain"]);
		if($data["old"]["domain"] != '' && !stristr($vhost_logfile_dir,'..')) exec("rm -rf $vhost_logfile_dir");
		$app->log("Removing website logfile directory: $vhost_logfile_dir",LOGLEVEL_DEBUG);
		
		//delete the web user
		$command = 'userdel';
		$command .= ' '.$data["old"]["system_user"];			
		exec($command);
	}
	
	//* This function is called when a IP on the server is inserted, updated or deleted
	function server_ip($event_name,$data) {
		global $app, $conf;
		
		// Here we write the name virtualhost directives
		// NameVirtualHost IP:80
		// NameVirtualHost IP:443
		
	}
	

} // end class

>>>>>>> .r745
redray's avatar
redray committed
?>