62f550c373
Selbstgehostete Web-Cloud mit Dateiverwaltung, Kalender, Kontakte, Email-Webclient, Office-Viewer und Passwort-Manager. Backend (Flask/Python): - JWT-Auth mit Access/Refresh Tokens, Benutzerverwaltung - Dateien: Upload/Download, Ordner, Berechtigungen, Share-Links - Kalender: CRUD, Teilen, iCal-Export, CalDAV well-known URLs - Kontakte: Adressbuecher, vCard-Export, Teilen - Email: IMAP/SMTP-Proxy, Multi-Account - Office-Viewer: DOCX/XLSX/PPTX/PDF Vorschau - Passwort-Manager: AES-256-GCM clientseitig, KeePass-Import - Sync-API fuer Desktop/Mobile-Clients - SQLite mit WAL-Modus Frontend (Vue 3 + PrimeVue): - Datei-Explorer mit Breadcrumbs und Share-Dialogen - Monatskalender mit Event-Verwaltung - Kontaktliste mit Adressbuch-Sidebar - Email-Client mit 3-Spalten-Layout - Passwort-Manager mit TOTP und Passwort-Generator - Admin-Panel, Settings, oeffentliche Share-Seite Docker: Multi-Stage Build, Bind Mounts (keine Volumes) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
42 lines
1.7 KiB
Python
42 lines
1.7 KiB
Python
from datetime import datetime, timezone
|
|
|
|
from app.extensions import db
|
|
|
|
|
|
class EmailAccount(db.Model):
|
|
__tablename__ = 'email_accounts'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False, index=True)
|
|
display_name = db.Column(db.String(100), nullable=False) # e.g. "Arbeit", "Privat"
|
|
email_address = db.Column(db.String(255), nullable=False)
|
|
imap_host = db.Column(db.String(255), nullable=False)
|
|
imap_port = db.Column(db.Integer, default=993)
|
|
imap_ssl = db.Column(db.Boolean, default=True)
|
|
smtp_host = db.Column(db.String(255), nullable=False)
|
|
smtp_port = db.Column(db.Integer, default=587)
|
|
smtp_ssl = db.Column(db.Boolean, default=True) # STARTTLS
|
|
username = db.Column(db.String(255), nullable=False)
|
|
password_encrypted = db.Column(db.LargeBinary, nullable=False)
|
|
is_default = db.Column(db.Boolean, default=False)
|
|
sort_order = db.Column(db.Integer, default=0)
|
|
created_at = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc))
|
|
updated_at = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc),
|
|
onupdate=lambda: datetime.now(timezone.utc))
|
|
|
|
def to_dict(self):
|
|
return {
|
|
'id': self.id,
|
|
'display_name': self.display_name,
|
|
'email_address': self.email_address,
|
|
'imap_host': self.imap_host,
|
|
'imap_port': self.imap_port,
|
|
'imap_ssl': self.imap_ssl,
|
|
'smtp_host': self.smtp_host,
|
|
'smtp_port': self.smtp_port,
|
|
'smtp_ssl': self.smtp_ssl,
|
|
'username': self.username,
|
|
'is_default': self.is_default,
|
|
'sort_order': self.sort_order,
|
|
}
|