import configparser
import io
+import ssl
+import tempfile
import tornado.httpclient
from . import accounts
self.db = database.Connection(**credentials)
+ @lazy_property
+ def ssl_context(self):
+ # Create SSL context
+ context = ssl.create_default_context()
+
+ # Fetch client certificate
+ certificate = self.settings.get("client-certificate", None)
+ key = self.settings.get("client-key", None)
+
+ # Apply client certificate
+ if certificate and key:
+ with tempfile.NamedTemporaryFile(mode="w") as f_cert:
+ f_cert.write(certificate)
+ f_cert.flush()
+
+ with tempfile.NamedTemporaryFile(mode="w") as f_key:
+ f_key.write(key)
+ f_key.flush()
+
+ context.load_cert_chain(f_cert.name, f_key.name)
+
+ return context
+
+ async def load_certificate(self, certfile, keyfile):
+ with self.db.transaction():
+ # Load certificate
+ with open(certfile) as f:
+ self.settings.set("client-certificate", f.read())
+
+ # Load key file
+ with open(keyfile) as f:
+ self.settings.set("client-key", f.read())
+
async def run_task(self, task, *args, **kwargs):
tasks = {
"announce-blog-posts" : self.blog.announce,
"cleanup" : self.cleanup,
"get-all-emails" : self.accounts.get_all_emails,
"launch-campaigns" : self.campaigns.launch_manually,
+ "load-certificate" : self.load_certificate,
"run-campaigns" : self.campaigns.run,
"scan-files" : self.releases.scan_files,
"send-message" : self.messages.send_cli,
import random
import smtplib
import socket
-import ssl
import subprocess
import tornado.locale
import tornado.template
class Queue(misc.Object):
- context = ssl.create_default_context()
-
@property
def messages(self):
return self.db.query("SELECT * FROM messages \
conn = smtplib.SMTP(hostname)
# Start TLS connection
- conn.starttls(context=self.context)
+ conn.starttls(context=self.backend.ssl_context)
return conn