Commit 1f495c43 authored by Joachim Kołodziejski's avatar Joachim Kołodziejski
Browse files

Make suggested SMTP options configurable in the env variables we used...

Make suggested SMTP options configurable in the env variables we used previously, add CHANNELS_REDIS_URL env variable
parent d482920a
Loading
Loading
Loading
Loading
+51 −7
Changes for mails/models.py: 51 added lines, 7 removed lines.
Original line number Diff line number Diff line
from django.db import models
from django.settings import (
    DEFAULT_FROM_EMAIL,
    EMAIL_BATCH_SIZE,
    EMAIL_HOST,
    EMAIL_HOST_PASSWORD,
    EMAIL_HOST_USER,
    EMAIL_PORT,
    EMAIL_USE_TLS,
)
from solo.models import SingletonModel

from voters.models import Voter
@@ -37,17 +46,52 @@ class Mail(models.Model):
        default_permissions = ()
        permissions = [("can_manage_mails", "Może zarządzać wysyłaniem maili")]


class MailServerConfig(SingletonModel):
    host = models.CharField(max_length=256, default="listonosz.staszic.waw.pl", verbose_name="serwer", help_text="rekomendowany: listonosz.staszic.waw.pl")
    port = models.IntegerField(default=587, verbose_name="port", help_text="rekomendowany: 587")
    use_tls = models.BooleanField(default=True, verbose_name="tls", help_text="rekomendowane: TAK")
    host = models.CharField(
        max_length=256,
        default=EMAIL_HOST,
        verbose_name="serwer",
        help_text=f"rekomendowany: {EMAIL_HOST}",
    )
    port = models.IntegerField(
        default=EMAIL_PORT,
        verbose_name="port",
        help_text=f"rekomendowany: {EMAIL_PORT}",
    )
    use_tls = models.BooleanField(
        default=EMAIL_USE_TLS,
        verbose_name="TLS",
        help_text=f"rekomendowane: {'TAK' if EMAIL_USE_TLS else 'NIE'}",
    )

    username = models.CharField(max_length=256, default="wybory", verbose_name="login", help_text="rekomendowany: wybory")
    password = models.CharField(max_length=256, verbose_name="hasło")
    username = models.CharField(
        max_length=256,
        default=EMAIL_HOST_USER,
        verbose_name="login",
        help_text="rekomendowany: {EMAIL_HOST_USER}",
    )
    password = models.CharField(
        max_length=256,
        default=EMAIL_HOST_PASSWORD,
        verbose_name="hasło",
        help_text="rekomendowane: {EMAIL_HOST_PASSWORD}"
        if EMAIL_HOST_PASSWORD != ""
        else None,
    )

    sender = models.CharField(max_length=256, default="Samorządowy System Wyborczy <wybory@staszic.waw.pl>", verbose_name="nadawca wiadomości", help_text="Samorządowy System Wyborczy <wybory@staszic.waw.pl>")
    sender = models.CharField(
        max_length=256,
        default=DEFAULT_FROM_EMAIL,
        verbose_name="nadawca wiadomości",
        help_text=f"rekomendowany: {DEFAULT_FROM_EMAIL}",
    )

    batch_size = models.IntegerField(default=20, verbose_name="liczba wiadomości w pojedynczym pakiecie", help_text="Rekomendowana: 20")
    batch_size = models.IntegerField(
        default=20,
        verbose_name="liczba wiadomości w pojedynczym pakiecie",
        help_text=f"Rekomendowana: {EMAIL_BATCH_SIZE}",
    )

    def __str__(self):
        return "Konfiguracja SMTP"
+7 −1
Changes for sample.env: 7 added lines, 1 removed line.
Original line number Diff line number Diff line
# WARNING: non-commented options are required, change them.

# Suggested and default SMTP server URL (see django-environ environ.Env.email_url()),
EMAIL_URL="smtp+tls://wybory:password@smtp.example.com:587"

# Suggested and default email From header (see Django settings DEFAULT_FROM_EMAIL)
DEFAULT_FROM_EMAIL="Wybory <wybory@example.com>"

# SMTP blocking operations timeout (see Django settings EMAIL_TIMEOUT)
#EMAIL_TIMEOUT="20"

# Number of emails to send in one batch (connection)
# Suggested and default number of emails to send in one batch (connection)
#EMAIL_BATCH_SIZE="20"

# Public (user-facing) site URL
+25 −11
Changes for wybory/settings.py: 25 added lines, 11 removed lines.
Original line number Diff line number Diff line
@@ -30,13 +30,14 @@ env = environ.Env(
    DEFAULT_FROM_EMAIL=str,
    EMAIL_BATCH_SIZE=(int, 20),
    SITE_URL=str,
    SECRET_KEY=(str, "changeme"),
    SECRET_KEY=str,
    DEBUG=(bool, False),
    ALLOWED_HOSTS=(str, "localhost"),
    CSRF_TRUSTED_ORIGINS=(str, "http://localhost:8000"),
    DATABASE_URL=(str, "sqlite:///db.sqlite3"),
    RQ_URL=(str, "redis://localhost:6379/0"),
    CHANNELS_REDIS_URL=(str, "redis://localhost:6379/1"),
    TIME_ZONE=(str, "Etc/UTC"),
    DATABASE_URL=(str, "sqlite:///db.sqlite3"),
    SCHOOL_YEAR_MONTH=(int, 9),
    SCHOOL_YEAR_DAY=(int, 1),
    LDAP_HOST=str,
@@ -59,6 +60,18 @@ DATA_UPLOAD_MAX_NUMBER_FIELDS = 2000

# email

email_config = env.email_url()
EMAIL_FILE_PATH = email_config["EMAIL_FILE_PATH"]
EMAIL_HOST_USER = email_config["EMAIL_HOST_USER"]
EMAIL_HOST_PASSWORD = email_config["EMAIL_HOST_PASSWORD"]
EMAIL_HOST = email_config["EMAIL_HOST"]
EMAIL_PORT = email_config["EMAIL_PORT"]
EMAIL_BACKEND = email_config["EMAIL_BACKEND"]
EMAIL_USE_TLS = email_config.get("EMAIL_USE_TLS", False)
EMAIL_USE_SSL = email_config.get("EMAIL_USE_SSL", False)
EMAIL_TIMEOUT = env("EMAIL_TIMEOUT")
DEFAULT_FROM_EMAIL = env("DEFAULT_FROM_EMAIL")

EMAIL_BACKEND = "mails.backend.WyboryEmailBackend"

EMAIL_BATCH_SIZE = env("EMAIL_BATCH_SIZE")
@@ -111,6 +124,16 @@ RQ_QUEUES = {

RQ_SHOW_ADMIN_LINK = True

# channels
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [env("CHANNELS_REDIS_URL")],
        },
    },
}

# ldap
LDAP_HOST = env("LDAP_HOST")
LDAP_PORT = env("LDAP_PORT")
@@ -190,15 +213,6 @@ TEMPLATES = [

# WSGI_APPLICATION = "wybory.wsgi.application"
ASGI_APPLICATION = "wybory.asgi.application"
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("127.0.0.1", 6379)],
        },
    },
}


# Database
# https://docs.djangoproject.com/en/6.0/ref/settings/#databases