# Change SSL v2.0
"""
<parameters>
<company>AATrubilin</company>
<title>Change SSL</title>
<version>2.0</version>
<parameter>
<type>server</type>
<id>SERVER_GUID</id>
<name>Trassir server</name>
<value></value>
</parameter>
<parameter>
<type>string</type>
<name>Certificate</name>
<id>SSL_CERT</id>
<value></value>
</parameter>
<parameter>
<type>string</type>
<name>Private key</name>
<id>SSL_PKEY</id>
<value></value>
</parameter>
</parameters>
"""
import host
GLOBALS = globals()
SERVER_GUID = GLOBALS.get("SERVER_GUID", "")
SSL_CERT = GLOBALS.get("SSL_CERT", "")
SSL_PKEY = GLOBALS.get("SSL_PKEY", "")
if not SERVER_GUID:
raise ValueError(host.tr("Server not selected"))
class ResultMessage(Exception):
def __init__(self, message):
message = """<span style="color: #009900">{message}</span>""".format(
message=message
)
super(ResultMessage, self).__init__(message)
def update_certificates(server_guid, cert, pkey):
"""Update server certificates
Args:
server_guid (str): Server guid
cert (str): Certificate
pkey (str): Private key
Raises:
ValueError: if empty cert or pkey
RuntimeError: if no access to ssl_cert or ssl_pkey key in system_wide_options
ResultMessage: if changed success
"""
if not server_guid:
server_guid = host.settings("").guid
if not cert:
raise ValueError(host.tr("Empty certificate"))
if not pkey:
raise ValueError(host.tr("Empty private key"))
system_wide_options = host.settings("/{}/system_wide_options".format(server_guid))
try:
system_wide_options["ssl_cert"] = (
"-----BEGIN CERTIFICATE-----\n{certificate}\n-----END CERTIFICATE-----"
).format(certificate=cert)
system_wide_options["ssl_pkey"] = (
"-----BEGIN RSA PRIVATE KEY-----\n{private_key}\n-----END RSA PRIVATE KEY-----"
).format(private_key=pkey)
except KeyError:
raise RuntimeError(
host.tr("Script user has no enough access or you need upgrade Trassir!")
)
raise ResultMessage(host.tr("Certificates successfully changed"))
update_certificates(SERVER_GUID, SSL_CERT, SSL_PKEY)