updated layout - make server as package

This commit is contained in:
nahakubuilde
2025-05-30 07:30:59 +01:00
parent 9c1f2fcc3c
commit aa7285af39
10 changed files with 41 additions and 19 deletions

9
email_server/__init__.py Normal file
View File

@@ -0,0 +1,9 @@
from .auth import *
from .dkim_manager import *
from .server_runner import *
from .tls_utils import *
from .cli_tools import *
from .email_relay import *
from .models import *
from .smtp_handler import *
from .config import *

View File

@@ -5,7 +5,7 @@ Authentication modules for the SMTP server.
import logging import logging
from datetime import datetime from datetime import datetime
from aiosmtpd.smtp import AuthResult, LoginPassword from aiosmtpd.smtp import AuthResult, LoginPassword
from models import Session, User, Domain, WhitelistedIP, AuthLog, check_password from .models import Session, User, Domain, WhitelistedIP, AuthLog, check_password
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -4,8 +4,8 @@ Command-line tools for managing the SMTP server.
import argparse import argparse
import sys import sys
from models import Session, Domain, User, WhitelistedIP, hash_password, create_tables from .models import Session, Domain, User, WhitelistedIP, hash_password, create_tables
from dkim_manager import DKIMManager from .dkim_manager import DKIMManager
import logging import logging
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)

View File

@@ -7,8 +7,8 @@ import dkim
from cryptography.hazmat.primitives import serialization, hashes from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives.asymmetric import rsa
from datetime import datetime from datetime import datetime
from models import Session, Domain, DKIMKey from .models import Session, Domain, DKIMKey
from config import DKIM_SELECTOR, DKIM_KEY_SIZE from .config import DKIM_SELECTOR, DKIM_KEY_SIZE
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -6,7 +6,7 @@ import dns.resolver
import smtplib import smtplib
import logging import logging
from datetime import datetime from datetime import datetime
from models import Session, EmailLog from .models import Session, EmailLog
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -6,7 +6,7 @@ from sqlalchemy import create_engine, Column, Integer, String, DateTime, Text, B
from sqlalchemy.orm import declarative_base, sessionmaker from sqlalchemy.orm import declarative_base, sessionmaker
from datetime import datetime from datetime import datetime
import bcrypt import bcrypt
from config import DATABASE_URL from .config import DATABASE_URL
# SQLAlchemy setup # SQLAlchemy setup
Base = declarative_base() Base = declarative_base()

View File

@@ -9,11 +9,11 @@ import sys
import os import os
# Import our modules # Import our modules
from config import SMTP_PORT, SMTP_TLS_PORT, HOSTNAME, LOG_LEVEL from .config import SMTP_PORT, SMTP_TLS_PORT, HOSTNAME, LOG_LEVEL
from models import create_tables from .models import create_tables
from smtp_handler import CustomSMTPHandler, PlainController from .smtp_handler import CustomSMTPHandler, PlainController
from tls_utils import generate_self_signed_cert, create_ssl_context from .tls_utils import generate_self_signed_cert, create_ssl_context
from dkim_manager import DKIMManager from .dkim_manager import DKIMManager
from aiosmtpd.controller import Controller from aiosmtpd.controller import Controller
from aiosmtpd.smtp import SMTP as AIOSMTP from aiosmtpd.smtp import SMTP as AIOSMTP
@@ -32,7 +32,7 @@ except RuntimeError:
# No running loop, set debug when we create one # No running loop, set debug when we create one
pass pass
async def main(): async def start_server():
"""Main server function.""" """Main server function."""
logger.info("Starting SMTP Server with DKIM support...") logger.info("Starting SMTP Server with DKIM support...")
@@ -46,7 +46,7 @@ async def main():
dkim_manager.initialize_default_keys() dkim_manager.initialize_default_keys()
# Add test data if needed # Add test data if needed
from models import Session, Domain, User, WhitelistedIP, hash_password from .models import Session, Domain, User, WhitelistedIP, hash_password
session = Session() session = Session()
try: try:
# Add example.com domain if not exists # Add example.com domain if not exists
@@ -148,7 +148,7 @@ async def main():
if __name__ == '__main__': if __name__ == '__main__':
try: try:
asyncio.run(main()) asyncio.run(start_server())
except KeyboardInterrupt: except KeyboardInterrupt:
logger.info('Server interrupted by user') logger.info('Server interrupted by user')
sys.exit(0) sys.exit(0)

View File

@@ -7,9 +7,9 @@ import uuid
from datetime import datetime from datetime import datetime
from aiosmtpd.smtp import SMTP as AIOSMTP, AuthResult from aiosmtpd.smtp import SMTP as AIOSMTP, AuthResult
from aiosmtpd.controller import Controller from aiosmtpd.controller import Controller
from auth import Authenticator, IPAuthenticator from .auth import Authenticator, IPAuthenticator
from email_relay import EmailRelay from .email_relay import EmailRelay
from dkim_manager import DKIMManager from .dkim_manager import DKIMManager
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -6,7 +6,7 @@ import ssl
import os import os
import logging import logging
from OpenSSL import crypto from OpenSSL import crypto
from config import TLS_CERT_FILE, TLS_KEY_FILE from .config import TLS_CERT_FILE, TLS_KEY_FILE
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

13
start_server.py Normal file
View File

@@ -0,0 +1,13 @@
from email_server import start_server, logger
import asyncio
import sys
if __name__ == '__main__':
try:
asyncio.run(start_server())
except KeyboardInterrupt:
logger.info('Server interrupted by user')
sys.exit(0)
except Exception as e:
logger.error(f'Server error: {e}')
sys.exit(1)