Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

130 lignes
3.5 KiB

  1. # imports - standard imports
  2. import json
  3. import os
  4. from collections import defaultdict
  5. def get_site_config(site, bench_path="."):
  6. config_path = os.path.join(bench_path, "sites", site, "site_config.json")
  7. if not os.path.exists(config_path):
  8. return {}
  9. with open(config_path) as f:
  10. return json.load(f)
  11. def put_site_config(site, config, bench_path="."):
  12. config_path = os.path.join(bench_path, "sites", site, "site_config.json")
  13. with open(config_path, "w") as f:
  14. return json.dump(config, f, indent=1)
  15. def update_site_config(site, new_config, bench_path="."):
  16. config = get_site_config(site, bench_path=bench_path)
  17. config.update(new_config)
  18. put_site_config(site, config, bench_path=bench_path)
  19. def set_nginx_port(site, port, bench_path=".", gen_config=True):
  20. set_site_config_nginx_property(
  21. site, {"nginx_port": port}, bench_path=bench_path, gen_config=gen_config
  22. )
  23. def set_ssl_certificate(site, ssl_certificate, bench_path=".", gen_config=True):
  24. set_site_config_nginx_property(
  25. site,
  26. {"ssl_certificate": ssl_certificate},
  27. bench_path=bench_path,
  28. gen_config=gen_config,
  29. )
  30. def set_ssl_certificate_key(site, ssl_certificate_key, bench_path=".", gen_config=True):
  31. set_site_config_nginx_property(
  32. site,
  33. {"ssl_certificate_key": ssl_certificate_key},
  34. bench_path=bench_path,
  35. gen_config=gen_config,
  36. )
  37. def set_site_config_nginx_property(site, config, bench_path=".", gen_config=True):
  38. from bench.config.nginx import make_nginx_conf
  39. from bench.bench import Bench
  40. if site not in Bench(bench_path).sites:
  41. raise Exception("No such site")
  42. update_site_config(site, config, bench_path=bench_path)
  43. if gen_config:
  44. make_nginx_conf(bench_path=bench_path)
  45. def set_url_root(site, url_root, bench_path="."):
  46. update_site_config(site, {"host_name": url_root}, bench_path=bench_path)
  47. def add_domain(site, domain, ssl_certificate, ssl_certificate_key, bench_path="."):
  48. domains = get_domains(site, bench_path)
  49. for d in domains:
  50. if (isinstance(d, dict) and d["domain"] == domain) or d == domain:
  51. print(f"Domain {domain} already exists")
  52. return
  53. if ssl_certificate_key and ssl_certificate:
  54. domain = {
  55. "domain": domain,
  56. "ssl_certificate": ssl_certificate,
  57. "ssl_certificate_key": ssl_certificate_key,
  58. }
  59. domains.append(domain)
  60. update_site_config(site, {"domains": domains}, bench_path=bench_path)
  61. def remove_domain(site, domain, bench_path="."):
  62. domains = get_domains(site, bench_path)
  63. for i, d in enumerate(domains):
  64. if (isinstance(d, dict) and d["domain"] == domain) or d == domain:
  65. domains.remove(d)
  66. break
  67. update_site_config(site, {"domains": domains}, bench_path=bench_path)
  68. def sync_domains(site, domains, bench_path="."):
  69. """Checks if there is a change in domains. If yes, updates the domains list."""
  70. changed = False
  71. existing_domains = get_domains_dict(get_domains(site, bench_path))
  72. new_domains = get_domains_dict(domains)
  73. if set(existing_domains.keys()) != set(new_domains.keys()):
  74. changed = True
  75. else:
  76. for d in list(existing_domains.values()):
  77. if d != new_domains.get(d["domain"]):
  78. changed = True
  79. break
  80. if changed:
  81. # replace existing domains with this one
  82. update_site_config(site, {"domains": domains}, bench_path=".")
  83. return changed
  84. def get_domains(site, bench_path="."):
  85. return get_site_config(site, bench_path=bench_path).get("domains") or []
  86. def get_domains_dict(domains):
  87. domains_dict = defaultdict(dict)
  88. for d in domains:
  89. if isinstance(d, str):
  90. domains_dict[d] = {"domain": d}
  91. elif isinstance(d, dict):
  92. domains_dict[d["domain"]] = d
  93. return domains_dict