stranck-dev in drew-dev #17
|
@ -167,3 +167,4 @@ furizon_webinit_riverside2023.tar.gz
|
|||
diomerdas
|
||||
furizon.net/site/*
|
||||
furizon.net.zip
|
||||
stuff/secrets.py
|
||||
|
|
3
app.py
3
app.py
|
@ -12,7 +12,7 @@ from io import BytesIO
|
|||
from asyncio import Queue
|
||||
from messages import LOCALES
|
||||
import sqlite3
|
||||
from sanic.log import logger
|
||||
from sanic.log import logger, logging
|
||||
|
||||
app = Sanic(__name__)
|
||||
app.static("/res", "res/")
|
||||
|
@ -45,6 +45,7 @@ async def clear_session(request, exception):
|
|||
@app.before_server_start
|
||||
async def main_start(*_):
|
||||
logger.info(f"[{app.name}] >>>>>> main_start <<<<<<")
|
||||
logger.setLevel(LOG_LEVEL)
|
||||
|
||||
app.config.REQUEST_MAX_SIZE = PROPIC_MAX_FILE_SIZE * 3
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
from sanic.log import logging
|
||||
LOG_LEVEL = logging.DEBUG
|
||||
|
||||
API_TOKEN = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
|
||||
ORGANIZER = 'furizon'
|
||||
EVENT_NAME = 'overlord'
|
||||
|
@ -25,6 +28,9 @@ SMTP_HOST = 'host'
|
|||
SMTP_PORT = 0
|
||||
SMTP_USER = 'user'
|
||||
SMTP_PASSWORD = 'pw'
|
||||
EMAIL_SENDER_NAME = "Fantastic Furcon Wow"
|
||||
EMAIL_SENDER_MAIL = "no-reply@thisIsAFantasticFurconWowItIsWonderful.cuteFurries.ovh"
|
||||
SMPT_CLIENT_CLOSE_TIMEOUT = 60 * 15 # 15 minutes
|
||||
|
||||
FILL_CACHE = True
|
||||
CACHE_EXPIRE_TIME = 60 * 60 * 4
|
||||
|
@ -111,11 +117,6 @@ CATEGORIES_LIST_MAP = {
|
|||
'dailys': []
|
||||
}
|
||||
|
||||
SPONSORSHIP_COLOR_MAP = {
|
||||
'super': (251, 140, 0),
|
||||
'normal': (142, 36, 170)
|
||||
}
|
||||
|
||||
# Create a bunch of "room" items which will get added to the order once somebody gets a room.
|
||||
# Map item_name -> room capacity
|
||||
ROOM_CAPACITY_MAP = {
|
||||
|
|
|
@ -1,11 +1,58 @@
|
|||
from sanic import Sanic
|
||||
from sanic.log import logger
|
||||
import ssl
|
||||
from ssl import SSLContext
|
||||
from email.mime.text import MIMEText
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from messages import ROOM_ERROR_TYPES
|
||||
import smtplib
|
||||
from messages import *
|
||||
from config import SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD
|
||||
from config import *
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
from threading import Timer, Lock
|
||||
|
||||
def killSmptClient():
|
||||
global sslLock
|
||||
global sslTimer
|
||||
global smptSender
|
||||
sslTimer.cancel()
|
||||
sslLock.acquire()
|
||||
if(smptSender is not None):
|
||||
logger.debug('[SMPT] Closing smpt client')
|
||||
smptSender.quit() # it calls close() inside
|
||||
smptSender = None
|
||||
sslLock.release()
|
||||
|
||||
async def openSmptClient():
|
||||
global sslLock
|
||||
global sslTimer
|
||||
global sslContext
|
||||
global smptSender
|
||||
sslTimer.cancel()
|
||||
sslLock.acquire()
|
||||
if(smptSender is None):
|
||||
logger.debug('[SMPT] Opening smpt client')
|
||||
client : smtplib.SMTP = smtplib.SMTP(SMTP_HOST, SMTP_PORT)
|
||||
client.starttls(context=sslContext)
|
||||
client.login(SMTP_USER, SMTP_PASSWORD)
|
||||
smptSender = client
|
||||
sslLock.release()
|
||||
sslTimer = createTimer()
|
||||
sslTimer.start()
|
||||
|
||||
def createTimer():
|
||||
return Timer(SMPT_CLIENT_CLOSE_TIMEOUT, killSmptClient)
|
||||
sslLock : Lock = Lock()
|
||||
sslTimer : Timer = createTimer()
|
||||
sslContext : SSLContext = ssl.create_default_context()
|
||||
smptSender : smtplib.SMTP = None
|
||||
|
||||
async def sendEmail(message : MIMEMultipart):
|
||||
await openSmptClient()
|
||||
logger.debug(f"[SMPT] Sending mail {message['From']} -> {message['to']} '{message['Subject']}'")
|
||||
sslLock.acquire()
|
||||
smptSender.sendmail(message['From'], message['to'], message.as_string())
|
||||
sslLock.release()
|
||||
|
||||
async def send_unconfirm_message(room_order, orders):
|
||||
memberMessages = []
|
||||
|
@ -32,17 +79,15 @@ async def send_unconfirm_message (room_order, orders):
|
|||
message = MIMEMultipart("alternative")
|
||||
message.attach(plain_text)
|
||||
message.attach(html_text)
|
||||
message['Subject'] = '[Furizon] Your room cannot be confirmed'
|
||||
message['From'] = 'Furizon <no-reply@furizon.net>'
|
||||
message['Subject'] = f'[{EMAIL_SENDER_NAME}] Your room cannot be confirmed'
|
||||
message['From'] = f'{EMAIL_SENDER_NAME} <{EMAIL_SENDER_MAIL}>'
|
||||
message['To'] = f"{member.name} <{member.email}>"
|
||||
memberMessages.append(message)
|
||||
|
||||
if len(memberMessages) == 0: return
|
||||
|
||||
with smtplib.SMTP_SSL(SMTP_HOST, SMTP_PORT) as sender:
|
||||
sender.login(SMTP_USER, SMTP_PASSWORD)
|
||||
for message in memberMessages:
|
||||
sender.sendmail(message['From'], message['to'], message.as_string())
|
||||
await sendEmail(message)
|
||||
|
||||
def render_email_template(title = "", body = ""):
|
||||
tpl = Environment(loader=FileSystemLoader("tpl"), autoescape=False).get_template('email/comunication.html')
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
python3 app.py 2>&1 | tee -a log.txt
|
|
@ -0,0 +1,32 @@
|
|||
import smtplib
|
||||
import ssl
|
||||
|
||||
from email.mime.text import MIMEText
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
|
||||
from secrets import *
|
||||
|
||||
SMTP_HOST = 'smtp.office365.com'
|
||||
SMTP_USER = 'webservice@furizon.net'
|
||||
SMTP_PORT = 587
|
||||
|
||||
plain_body = "Test aaaa"
|
||||
|
||||
plain_text = MIMEText(plain_body, "plain")
|
||||
message = MIMEMultipart("alternative")
|
||||
message.attach(plain_text)
|
||||
message['Subject'] = '[Furizon] This is a test!'
|
||||
message['From'] = 'Furizon <webservice@furizon.net>'
|
||||
message['To'] = f"Luca Sorace <strdjn@gmail.com>"
|
||||
|
||||
print("Start")
|
||||
context = ssl.create_default_context()
|
||||
print("Context created")
|
||||
with smtplib.SMTP(SMTP_HOST, SMTP_PORT) as sender:
|
||||
print("Created sender obj")
|
||||
sender.starttls(context=context)
|
||||
print("Tls started")
|
||||
sender.login(SMTP_USER, SMTP_PASSWORD)
|
||||
print("Logged in")
|
||||
print(sender.sendmail(message['From'], message['to'], message.as_string()))
|
||||
print("Mail sent")
|
|
@ -10,13 +10,13 @@
|
|||
.container { max-width: 40em; padding: 1em; margin: 0 auto; }
|
||||
.title { font-size: 1.75em; margin-bottom: 1.2em; color: #e1e6eb; margin-top: 0; font-family: sans-serif; }
|
||||
.main-content { margin-top: 0; font-style: normal; font-weight: 400; font-family: sans-serif;}
|
||||
.con-logo { height:2em;}
|
||||
.con-logo { height:3em;}
|
||||
.link { text-decoration: none; background-color: #1095c1; color: #fff; padding: 1em; border-radius: 5px; font-weight: 600; }
|
||||
</style>
|
||||
</head>
|
||||
<div class="body">
|
||||
<div class="container">
|
||||
<img src="https://reg.furizon.net/res/furizon.png" class="con-logo">
|
||||
<img src="https://reg.furizon.net/res/furizon.png" alt="con_logo" title="con_logo" class="con-logo">
|
||||
<div>
|
||||
<h2 class="title">{{title}}</h2>
|
||||
<p class="main-content">{{body}}</p>
|
||||
|
|
Loading…
Reference in New Issue