|  | @@ -133,7 +133,7 @@ class SiteGen:
 | 
		
	
		
			
			| 133 | 133 |                  domains.append(file[:-4])
 | 
		
	
		
			
			| 134 | 134 |          return domains
 | 
		
	
		
			
			| 135 | 135 |  
 | 
		
	
		
			
			| 136 |  | -    def get_all_site_templates(self):
 | 
		
	
		
			
			|  | 136 | +    def get_all_site_confs(self):
 | 
		
	
		
			
			| 137 | 137 |          files = os.listdir(self.get_site_template_dir())
 | 
		
	
		
			
			| 138 | 138 |          files.sort()
 | 
		
	
		
			
			| 139 | 139 |          templates = []
 | 
		
	
	
		
			
			|  | @@ -142,6 +142,15 @@ class SiteGen:
 | 
		
	
		
			
			| 142 | 142 |                  templates.append(file[:-5])
 | 
		
	
		
			
			| 143 | 143 |          return templates
 | 
		
	
		
			
			| 144 | 144 |  
 | 
		
	
		
			
			|  | 145 | +    def get_all_site_incs(self):
 | 
		
	
		
			
			|  | 146 | +        files = os.listdir(self.get_site_template_dir())
 | 
		
	
		
			
			|  | 147 | +        files.sort()
 | 
		
	
		
			
			|  | 148 | +        templates = []
 | 
		
	
		
			
			|  | 149 | +        for file in files:
 | 
		
	
		
			
			|  | 150 | +            if file.endswith(".include"):
 | 
		
	
		
			
			|  | 151 | +                templates.append(file[:-8])
 | 
		
	
		
			
			|  | 152 | +        return templates
 | 
		
	
		
			
			|  | 153 | +
 | 
		
	
		
			
			| 145 | 154 |      def get_all_sites(self):
 | 
		
	
		
			
			| 146 | 155 |          files = os.listdir(self.siteConfDir)
 | 
		
	
		
			
			| 147 | 156 |          files.sort()
 | 
		
	
	
		
			
			|  | @@ -165,10 +174,10 @@ class SiteGen:
 | 
		
	
		
			
			| 165 | 174 |              path.join(self.siteConfDir, domain + ".include")
 | 
		
	
		
			
			| 166 | 175 |          ]
 | 
		
	
		
			
			| 167 | 176 |  
 | 
		
	
		
			
			| 168 |  | -    def get_site_template_conf_files(self, template):
 | 
		
	
		
			
			|  | 177 | +    def get_site_template_conf_files(self, inc, conf):
 | 
		
	
		
			
			| 169 | 178 |          return [
 | 
		
	
		
			
			| 170 |  | -            path.join(self.get_site_template_dir(), template + ".conf"),
 | 
		
	
		
			
			| 171 |  | -            path.join(self.get_site_template_dir(), template + ".include")
 | 
		
	
		
			
			|  | 179 | +            path.join(self.get_site_template_dir(), conf + ".conf"),
 | 
		
	
		
			
			|  | 180 | +            path.join(self.get_site_template_dir(), inc + ".include")
 | 
		
	
		
			
			| 172 | 181 |          ]
 | 
		
	
		
			
			| 173 | 182 |  
 | 
		
	
		
			
			| 174 | 183 |      def get_site_dir(self, domain):
 | 
		
	
	
		
			
			|  | @@ -180,8 +189,8 @@ class SiteGen:
 | 
		
	
		
			
			| 180 | 189 |                  return True
 | 
		
	
		
			
			| 181 | 190 |          return False
 | 
		
	
		
			
			| 182 | 191 |  
 | 
		
	
		
			
			| 183 |  | -    def is_site_template_present(self, template):
 | 
		
	
		
			
			| 184 |  | -        for file in self.get_site_template_conf_files(template):
 | 
		
	
		
			
			|  | 192 | +    def is_site_template_present(self, inc, conf):
 | 
		
	
		
			
			|  | 193 | +        for file in self.get_site_template_conf_files(inc, conf):
 | 
		
	
		
			
			| 185 | 194 |              if path.isfile(file):
 | 
		
	
		
			
			| 186 | 195 |                  return True
 | 
		
	
		
			
			| 187 | 196 |          return False
 | 
		
	
	
		
			
			|  | @@ -249,14 +258,14 @@ class SiteGen:
 | 
		
	
		
			
			| 249 | 258 |          for domain in domains:
 | 
		
	
		
			
			| 250 | 259 |              self.cert_renew(domain)
 | 
		
	
		
			
			| 251 | 260 |  
 | 
		
	
		
			
			| 252 |  | -    def site_create(self, domain, template):
 | 
		
	
		
			
			|  | 261 | +    def site_create(self, domain, inc, conf):
 | 
		
	
		
			
			| 253 | 262 |          if self.is_site_present(domain):
 | 
		
	
		
			
			| 254 | 263 |              raise SiteGenException("Site is present", 1)
 | 
		
	
		
			
			| 255 |  | -        if not self.is_site_template_present(template):
 | 
		
	
		
			
			|  | 264 | +        if not self.is_site_template_present(inc, conf):
 | 
		
	
		
			
			| 256 | 265 |              raise SiteGenException("Template is not present", 1)
 | 
		
	
		
			
			| 257 | 266 |  
 | 
		
	
		
			
			| 258 | 267 |          args = [domain, self.get_site_dir(domain)]
 | 
		
	
		
			
			| 259 |  | -        conf_files = self.get_site_template_conf_files(template)
 | 
		
	
		
			
			|  | 268 | +        conf_files = self.get_site_template_conf_files(inc, conf)
 | 
		
	
		
			
			| 260 | 269 |          site_files = self.get_site_conf_files(domain)
 | 
		
	
		
			
			| 261 | 270 |          for f in conf_files:
 | 
		
	
		
			
			| 262 | 271 |              args.append(f)
 | 
		
	
	
		
			
			|  | @@ -296,13 +305,18 @@ class SiteGen:
 | 
		
	
		
			
			| 296 | 305 |          os.remove(self.get_hook_file(hook_type, hook_name, True))
 | 
		
	
		
			
			| 297 | 306 |  
 | 
		
	
		
			
			| 298 | 307 |  
 | 
		
	
		
			
			| 299 |  | -def parse_domain(domain):
 | 
		
	
		
			
			| 300 |  | -    site_template = "default"
 | 
		
	
		
			
			|  | 308 | +def parse_domain(domain, default_inc="default", default_conf="https"):
 | 
		
	
		
			
			|  | 309 | +    inc = default_inc
 | 
		
	
		
			
			|  | 310 | +    conf = default_conf
 | 
		
	
		
			
			| 301 | 311 |      if ":" in domain:
 | 
		
	
		
			
			| 302 | 312 |          split = domain.split(":")
 | 
		
	
		
			
			| 303 | 313 |          domain = split[0]
 | 
		
	
		
			
			| 304 |  | -        site_template = split[1]
 | 
		
	
		
			
			| 305 |  | -    return domain, site_template
 | 
		
	
		
			
			|  | 314 | +        inc = split[1]
 | 
		
	
		
			
			|  | 315 | +        if "." in inc:
 | 
		
	
		
			
			|  | 316 | +            split = inc.split(".")
 | 
		
	
		
			
			|  | 317 | +            inc = split[0]
 | 
		
	
		
			
			|  | 318 | +            conf = split[1]
 | 
		
	
		
			
			|  | 319 | +    return domain, inc, conf
 | 
		
	
		
			
			| 306 | 320 |  
 | 
		
	
		
			
			| 307 | 321 |  
 | 
		
	
		
			
			| 308 | 322 |  def parse_hook(hook):
 | 
		
	
	
		
			
			|  | @@ -328,16 +342,25 @@ def domain_completer(prefix, **kwargs):
 | 
		
	
		
			
			| 328 | 342 |      return site_gen.get_all_domains()
 | 
		
	
		
			
			| 329 | 343 |  
 | 
		
	
		
			
			| 330 | 344 |  
 | 
		
	
		
			
			| 331 |  | -def site_template_completer(prefix, **kwargs):
 | 
		
	
		
			
			|  | 345 | +def site_conf_completer(prefix, **kwargs):
 | 
		
	
		
			
			| 332 | 346 |      site_gen = get_site_gen(prefix, **kwargs)
 | 
		
	
		
			
			| 333 |  | -    return site_gen.get_all_site_templates()
 | 
		
	
		
			
			|  | 347 | +    return site_gen.get_all_site_confs()
 | 
		
	
		
			
			|  | 348 | +
 | 
		
	
		
			
			|  | 349 | +
 | 
		
	
		
			
			|  | 350 | +def site_inc_completer(prefix, **kwargs):
 | 
		
	
		
			
			|  | 351 | +    site_gen = get_site_gen(prefix, **kwargs)
 | 
		
	
		
			
			|  | 352 | +    return site_gen.get_all_site_incs()
 | 
		
	
		
			
			| 334 | 353 |  
 | 
		
	
		
			
			| 335 | 354 |  
 | 
		
	
		
			
			| 336 | 355 |  def site_create_completer(prefix, **kwargs):
 | 
		
	
		
			
			| 337 |  | -    if ":" in prefix:
 | 
		
	
		
			
			| 338 |  | -        domain, template = parse_domain(prefix)
 | 
		
	
		
			
			| 339 |  | -        templates = site_template_completer(prefix, **kwargs)
 | 
		
	
		
			
			| 340 |  | -        return [domain + ":" + elt for elt in templates]
 | 
		
	
		
			
			|  | 356 | +    domain, inc, conf = parse_domain(prefix, None, None)
 | 
		
	
		
			
			|  | 357 | +    if inc is not None:
 | 
		
	
		
			
			|  | 358 | +        if conf is not None:
 | 
		
	
		
			
			|  | 359 | +            templates = site_conf_completer(prefix, **kwargs)
 | 
		
	
		
			
			|  | 360 | +            return [domain + ":" + inc + "." + elt for elt in templates]
 | 
		
	
		
			
			|  | 361 | +        else:
 | 
		
	
		
			
			|  | 362 | +            templates = site_inc_completer(prefix, **kwargs)
 | 
		
	
		
			
			|  | 363 | +            return [domain + ":" + elt for elt in templates]
 | 
		
	
		
			
			| 341 | 364 |  
 | 
		
	
		
			
			| 342 | 365 |      return domain_completer(prefix, **kwargs)
 | 
		
	
		
			
			| 343 | 366 |  
 | 
		
	
	
		
			
			|  | @@ -404,8 +427,8 @@ def main():
 | 
		
	
		
			
			| 404 | 427 |                  site_gen.cert_enddate(args.cert_enddate)
 | 
		
	
		
			
			| 405 | 428 |  
 | 
		
	
		
			
			| 406 | 429 |          elif args.site_create is not None:
 | 
		
	
		
			
			| 407 |  | -            domain, site_template = parse_domain(args.site_create)
 | 
		
	
		
			
			| 408 |  | -            site_gen.site_create(domain, site_template)
 | 
		
	
		
			
			|  | 430 | +            domain, inc, conf = parse_domain(args.site_create)
 | 
		
	
		
			
			|  | 431 | +            site_gen.site_create(domain, inc, conf)
 | 
		
	
		
			
			| 409 | 432 |  
 | 
		
	
		
			
			| 410 | 433 |          elif args.hook_enable is not None:
 | 
		
	
		
			
			| 411 | 434 |              hook_type, hook_name = parse_hook(args.hook_enable)
 |