58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
|
import os
|
||
|
import textwrap
|
||
|
|
||
|
from orchestra.contrib.orchestration import ServiceController
|
||
|
|
||
|
from . import settings
|
||
|
|
||
|
|
||
|
class LetsEncryptController(ServiceController):
|
||
|
model = 'websites.Website'
|
||
|
verbose_name = "Let's encrypt!"
|
||
|
actions = ('encrypt',)
|
||
|
|
||
|
def prepare(self):
|
||
|
super().prepare()
|
||
|
self.cleanup = []
|
||
|
context = {
|
||
|
'letsencrypt_auto': settings.LETSENCRYPT_AUTO_PATH,
|
||
|
}
|
||
|
self.append(textwrap.dedent("""
|
||
|
%(letsencrypt_auto)s --non-interactive --no-self-upgrade \\
|
||
|
--keep --expand --agree-tos certonly --webroot \\""") % context
|
||
|
)
|
||
|
|
||
|
def encrypt(self, website):
|
||
|
context = self.get_context(website)
|
||
|
self.append(" --webroot-path %(webroot)s \\" % context)
|
||
|
self.append(" --email %(email)s \\" % context)
|
||
|
self.append(" -d %(domains)s \\" % context)
|
||
|
self.cleanup.append("rm -rf %(webroot)s/.well-known" % context)
|
||
|
|
||
|
def commit(self):
|
||
|
self.append(" || exit_code=$?")
|
||
|
for cleanup in self.cleanup:
|
||
|
self.append(cleanup)
|
||
|
context = {
|
||
|
'letsencrypt_live': os.path.normpath(settings.LETSENCRYPT_LIVE_PATH),
|
||
|
}
|
||
|
self.append(textwrap.dedent("""
|
||
|
# Report back the lineages in order to infere each certificate path
|
||
|
echo '<live-lineages>'
|
||
|
find %(letsencrypt_live)s/* -maxdepth 0
|
||
|
echo '</live-lineages>'""") % context
|
||
|
)
|
||
|
super().commit()
|
||
|
|
||
|
def get_context(self, website):
|
||
|
try:
|
||
|
content = website.content_set.get(path='/')
|
||
|
except website.content_set.model.DoesNotExist:
|
||
|
raise
|
||
|
return {
|
||
|
'letsencrypt_auto': settings.LETSENCRYPT_AUTO_PATH,
|
||
|
'webroot': content.webapp.get_path(),
|
||
|
'email': website.account.email,
|
||
|
'domains': ' \\\n -d '.join(website.encrypt_domains),
|
||
|
}
|