62 lines
2.7 KiB
Python
Executable File
62 lines
2.7 KiB
Python
Executable File
#!/usr/bin/python3
|
||
|
||
import sys, os, subprocess, traceback
|
||
|
||
sys.path.append("/opt/bunkerweb/deps/python")
|
||
sys.path.append("/opt/bunkerweb/utils")
|
||
|
||
import logger
|
||
|
||
def generate_cert(first_server, days, subj) :
|
||
if os.path.isfile("/opt/bunkerweb/cache/selfsigned/" + first_server + ".pem") :
|
||
cmd = "openssl x509 -checkend 86400 -noout -in /opt/bunkerweb/cache/selfsigned/" + first_server + ".pem"
|
||
proc = subprocess.run(cmd.split(" "), stdin=subprocess.DEVNULL, stderr=subprocess.STDOUT)
|
||
if proc.returncode == 0 :
|
||
logger.log("SELF-SIGNED", "ℹ️", "Self-signed certificate already present for " + first_server)
|
||
return True, 0
|
||
logger.log("SELF-SIGNED", "ℹ️", "Generating self-signed certificate for " + first_server)
|
||
cmd = "openssl req -nodes -x509 -newkey rsa:4096 -keyout /opt/bunkerweb/cache/selfsigned/" + first_server + ".key -out /opt/bunkerweb/cache/selfsigned/" + first_server + ".pem -days " + days + " -subj " + subj
|
||
proc = subprocess.run(cmd.split(" "), stdin=subprocess.DEVNULL, stderr=subprocess.STDOUT)
|
||
if proc.returncode != 0 :
|
||
logger.log("SELF-SIGNED", "❌", "Self-signed certificate generation failed for " + first_server)
|
||
return False, 2
|
||
logger.log("SELF-SIGNED", "ℹ️", "Successfully generated self-signed certificate for " + first_server)
|
||
return True, 1
|
||
|
||
status = 0
|
||
|
||
try :
|
||
|
||
os.makedirs("/opt/bunkerweb/cache/selfsigned/", exist_ok=True)
|
||
|
||
# Multisite case
|
||
if os.getenv("MULTISITE") == "yes" :
|
||
for first_server in os.getenv("SERVER_NAME").split(" ") :
|
||
if os.getenv(first_server + "_GENERATE_SELF_SIGNED_SSL", os.getenv("GENERATE_SELF_SIGNED_SSL")) != "yes" :
|
||
continue
|
||
if first_server == "" :
|
||
continue
|
||
if os.path.isfile("/opt/bunkerweb/cache/selfsigned/" + first_server + ".pem") :
|
||
continue
|
||
ret, ret_status = generate_cert(first_server, os.getenv(first_server + "_SELF_SIGNED_SSL_EXPIRY"), os.getenv(first_server + "_SELF_SIGNED_SSL_SUBJ"))
|
||
if not ret :
|
||
status = ret_status
|
||
elif ret_status == 1 and ret_status != 2 :
|
||
status = 1
|
||
|
||
# Singlesite case
|
||
elif os.getenv("GENERATE_SELF_SIGNED_SSL") == "yes" and os.getenv("SERVER_NAME") != "" :
|
||
first_server = os.getenv("SERVER_NAME").split(" ")[0]
|
||
ret, ret_status = generate_cert(first_server, os.getenv("SELF_SIGNED_SSL_EXPIRY"), os.getenv("SELF_SIGNED_SSL_SUBJ"))
|
||
if not ret :
|
||
status = ret_status
|
||
elif ret_status == 1 and ret_status != 2 :
|
||
status = 1
|
||
|
||
except :
|
||
status = 2
|
||
logger.log("SELF-SIGNED", "❌", "Exception while running certbot-new.py :")
|
||
print(traceback.format_exc())
|
||
|
||
sys.exit(status)
|