from __future__ import annotations import markdown as markdown_lib import bleach SITE_CONTENT_IMPRESSUM = 'impressum' SITE_CONTENT_PRIVACY = 'datenschutz' DEFAULT_SITE_CONTENT_MARKDOWN = { SITE_CONTENT_IMPRESSUM: """# Impressum Bitte vor dem produktiven Einsatz im Admin-Bereich vollständig ausfüllen. ## Diensteanbieter Firmenname / Name Straße und Hausnummer PLZ Ort Land ## Kontakt E-Mail: [kontakt@example.com](mailto:kontakt@example.com) ## Verantwortlich für den Inhalt nach § 18 Abs. 2 MStV Name der verantwortlichen Person Straße und Hausnummer PLZ Ort Land """, SITE_CONTENT_PRIVACY: """# Datenschutzerklärung ## 1. Verantwortlicher Bitte vor dem produktiven Einsatz im Admin-Bereich prüfen und anpassen. Verantwortlich für die Verarbeitung personenbezogener Daten im Zusammenhang mit dieser Website und Anwendung ist: Firmenname / Name Straße und Hausnummer PLZ Ort Land E-Mail: [kontakt@example.com](mailto:kontakt@example.com) ## 2. Allgemeines zur Datenverarbeitung Ich verarbeite personenbezogene Daten nur, soweit dies zur Bereitstellung einer funktionsfähigen Website und Anwendung, zur Bearbeitung von Anfragen, zur Sicherheit des Dienstes sowie zur Erbringung der angebotenen Funktionen erforderlich ist. ## 3. Aufruf der Website Beim Aufruf der Website werden technisch erforderliche Daten verarbeitet, um die Seite auszuliefern und die Stabilität und Sicherheit des Dienstes zu gewährleisten. Dabei können insbesondere folgende Daten verarbeitet werden: - IP-Adresse - Datum und Uhrzeit des Abrufs - aufgerufene Seite bzw. Ressource - Informationen über Browser und Betriebssystem - Referrer-Informationen - Protokolldaten zu Sicherheits- und Fehlervorgängen Die Verarbeitung erfolgt zur technischen Bereitstellung, Systemsicherheit und Missbrauchserkennung. ## 4. Registrierung und Benutzerkonto Wenn du ein Benutzerkonto anlegst, verarbeite ich die von dir angegebenen Registrierungsdaten, insbesondere: - E-Mail-Adresse - Passwort in gehashter Form - von dir hinterlegte Einstellungen innerhalb der Anwendung Die Verarbeitung erfolgt zum Zweck der Einrichtung und Verwaltung deines Benutzerkontos sowie zur Nutzung der Funktionen von Stundenfuchs. ## 5. Nutzung der Anwendung Im Rahmen der Nutzung von Stundenfuchs verarbeite ich die von dir eingegebenen oder erzeugten Inhalte, insbesondere: - Arbeitszeiteinträge - Pausenangaben - Urlaubs-, Krankheits- und Feiertagseinträge - Stundenausgleich - Einstellungen zu Wochenstunden, relevanten Arbeitstagen und Auswertungen - Backup-, Export- und Importdaten - Angaben im Arbeitsstunden-Counter Diese Daten werden verarbeitet, um dir die Funktionen der Anwendung bereitzustellen. ## 6. Anmeldung, Sitzungen und Sicherheit Zur Anmeldung und sicheren Nutzung der Anwendung werden technisch notwendige Sitzungsdaten verarbeitet. Außerdem können sicherheitsrelevante Daten verarbeitet werden, insbesondere zur: - Login-Verwaltung - Erkennung missbräuchlicher Zugriffe - Durchsetzung von Sicherheitsmaßnahmen - Begrenzung fehlerhafter Login- oder Formularversuche ## 7. E-Mail-Funktionen Im Zusammenhang mit der Nutzung von Stundenfuchs können E-Mails versendet werden, insbesondere für: - E-Mail-Bestätigung - Passwort-Reset - sicherheitsrelevante Hinweise - Benachrichtigungen innerhalb der Anwendung - Kontaktanfragen bzw. Tickets Dafür werden insbesondere E-Mail-Adresse und die jeweils zur Nachricht erforderlichen Metadaten verarbeitet. ## 8. Zwei-Faktor-Authentifizierung Wenn du die Zwei-Faktor-Authentifizierung aktivierst, werden die dafür erforderlichen Sicherheitsdaten verarbeitet, um die zusätzliche Anmeldung per Authenticator-App zu ermöglichen. ## 9. Kontaktformular und Ticketsystem Wenn du das Kontaktformular nutzt oder ein Ticket erstellst, verarbeite ich die von dir übermittelten Angaben, insbesondere: - Name - E-Mail-Adresse - Kategorie der Anfrage - Betreff - Nachricht - technische Missbrauchsschutzdaten Die Verarbeitung erfolgt zur Bearbeitung deiner Anfrage, zur Kommunikation mit dir sowie zur Abwehr von Missbrauch und Spam. ## 10. Export und Backup Wenn du Export- oder Backup-Funktionen nutzt, werden die von dir innerhalb der Anwendung gespeicherten Daten zusammengestellt und zum Download bereitgestellt. Diese Verarbeitung erfolgt ausschließlich zur Durchführung der von dir ausgelösten Funktion. ## 11. Rechtsgrundlagen Soweit die Verarbeitung zur Bereitstellung und Durchführung der Funktionen von Stundenfuchs erforderlich ist, erfolgt sie auf Grundlage von Art. 6 Abs. 1 lit. b DSGVO. Soweit die Verarbeitung zur Gewährleistung der Sicherheit, Stabilität und Missbrauchsvermeidung erfolgt, beruht sie auf Art. 6 Abs. 1 lit. f DSGVO. Das berechtigte Interesse liegt in der sicheren, funktionsfähigen und wirtschaftlichen Bereitstellung des Dienstes. Soweit du mich kontaktierst, erfolgt die Verarbeitung je nach Inhalt deiner Anfrage auf Art. 6 Abs. 1 lit. b DSGVO oder Art. 6 Abs. 1 lit. f DSGVO. ## 12. Empfänger von Daten Personenbezogene Daten werden nur insoweit weitergegeben, wie dies für den Betrieb der Anwendung technisch erforderlich ist oder eine gesetzliche Verpflichtung besteht. Hosting-, E-Mail- und sonstige Empfängerangaben müssen für den konkreten Produktivbetrieb ergänzt werden. ## 13. Speicherdauer Personenbezogene Daten werden nur so lange gespeichert, wie dies für die jeweiligen Zwecke erforderlich ist oder gesetzliche Aufbewahrungspflichten bestehen. Kontodaten und in der Anwendung gespeicherte Inhalte werden grundsätzlich so lange gespeichert, wie dein Benutzerkonto besteht, sofern keine gesetzlichen Pflichten entgegenstehen. Kontaktanfragen und Tickets werden gespeichert, soweit dies zur Bearbeitung, Dokumentation und Missbrauchsabwehr erforderlich ist. ## 14. Deine Rechte Du hast nach Maßgabe der gesetzlichen Vorschriften das Recht auf: - Auskunft über die verarbeiteten personenbezogenen Daten - Berichtigung unrichtiger Daten - Löschung - Einschränkung der Verarbeitung - Datenübertragbarkeit - Widerspruch gegen Verarbeitungen auf Grundlage berechtigter Interessen Wenn eine Verarbeitung auf einer Einwilligung beruht, kannst du diese jederzeit mit Wirkung für die Zukunft widerrufen. ## 15. Beschwerderecht Du hast das Recht, dich bei einer Datenschutzaufsichtsbehörde zu beschweren. ## 16. Pflicht zur Bereitstellung von Daten Soweit personenbezogene Daten für die Registrierung, Anmeldung oder Nutzung der Anwendung erforderlich sind, ist die Bereitstellung dieser Daten notwendig. Ohne diese Daten kann Stundenfuchs ganz oder teilweise nicht genutzt werden. ## 17. Keine automatisierte Entscheidungsfindung Eine automatisierte Entscheidungsfindung einschließlich Profiling im Sinne von Art. 22 DSGVO findet nicht statt. ## 18. Keine Analyse- oder Drittinhalte Es werden keine Analyse- oder Trackingdienste eingesetzt. Es werden keine externen Schriftarten, kein externes Fehlertracking und keine eingebetteten Drittinhalte verwendet. ## 19. Stand Stand: März 2026 """, } _ALLOWED_TAGS = [ 'a', 'blockquote', 'br', 'code', 'em', 'h1', 'h2', 'h3', 'h4', 'li', 'ol', 'p', 'pre', 'strong', 'ul' ] _ALLOWED_ATTRIBUTES = { 'a': ['href', 'title', 'rel', 'target'], } _ALLOWED_PROTOCOLS = ['http', 'https', 'mailto'] def default_site_content_markdown(key: str) -> str: return DEFAULT_SITE_CONTENT_MARKDOWN.get(key, '') def render_safe_markdown(markdown_text: str) -> str: raw_html = markdown_lib.markdown( markdown_text or '', extensions=['extra', 'sane_lists'], output_format='html5', ) cleaned = bleach.clean( raw_html, tags=_ALLOWED_TAGS, attributes=_ALLOWED_ATTRIBUTES, protocols=_ALLOWED_PROTOCOLS, strip=True, ) return bleach.linkify(cleaned) def normalize_markdown_input(value: str) -> str: return (value or '').strip() def ticket_status_label(status: str) -> str: return { 'open': 'Offen', 'closed': 'Geschlossen', }.get(status, status) def ticket_category_options() -> list[dict[str, str]]: return [ {'value': 'problem', 'label': 'Problem'}, {'value': 'feature', 'label': 'Featurerequest'}, {'value': 'other', 'label': 'Sonstiges'}, ] def ticket_category_label(value: str) -> str: for item in ticket_category_options(): if item['value'] == value: return item['label'] return value