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
from datetime import datetime
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__)

View File

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

View File

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

View File

@@ -6,7 +6,7 @@ import dns.resolver
import smtplib
import logging
from datetime import datetime
from models import Session, EmailLog
from .models import Session, EmailLog
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 datetime import datetime
import bcrypt
from config import DATABASE_URL
from .config import DATABASE_URL
# SQLAlchemy setup
Base = declarative_base()

View File

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

View File

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

View File

@@ -6,7 +6,7 @@ import ssl
import os
import logging
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__)

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)