diff --git a/compose/production/django/start b/compose/production/django/start index 80e9786..297e610 100644 --- a/compose/production/django/start +++ b/compose/production/django/start @@ -5,6 +5,6 @@ set -o pipefail set -o nounset -python /app/manage.py compress python /app/manage.py collectstatic --noinput +python /app/manage.py compress /usr/local/bin/gunicorn config.wsgi --bind 0.0.0.0:5000 --chdir=/app diff --git a/config/settings/base.py b/config/settings/base.py index a7d9a5f..9edcc14 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -142,6 +142,8 @@ STATIC_ROOT = str(ROOT_DIR("staticfiles")) STATIC_URL = "/static/" # https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS STATICFILES_DIRS = [str(APPS_DIR.path("static"))] +STATICFILES_STORAGE = 'schickmacher.storage.WhiteNoiseStaticFilesStorage' + # https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-finders STATICFILES_FINDERS = [ "django.contrib.staticfiles.finders.FileSystemFinder", diff --git a/schickmacher/renderer/templatetags/__init__.py b/schickmacher/renderer/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/schickmacher/renderer/templatetags/extra_filters.py b/schickmacher/renderer/templatetags/extra_filters.py new file mode 100644 index 0000000..b05ae2e --- /dev/null +++ b/schickmacher/renderer/templatetags/extra_filters.py @@ -0,0 +1,8 @@ +from django import template +import re + +register = template.Library() + +@register.filter +def escape_css_content(value): + return re.sub(r'''['"\n\\]''', lambda m: '\{:06X}'.format(ord(m.group())), value) diff --git a/schickmacher/renderer/tests/test_extra_filters.py b/schickmacher/renderer/tests/test_extra_filters.py new file mode 100644 index 0000000..6c4925d --- /dev/null +++ b/schickmacher/renderer/tests/test_extra_filters.py @@ -0,0 +1,12 @@ +from schickmacher.renderer.templatetags.extra_filters import escape_css_content + +# we use the padded 6 digit css escape sequences +# https://www.w3.org/International/questions/qa-escapes +def test_css_content(): + assert escape_css_content("head\"tail") == "head\\000022tail" + assert escape_css_content("head\'tail") == "head\\000027tail" + assert escape_css_content("head\\tail") == "head\\00005Ctail" + assert escape_css_content("head\ntail") == "head\\00000Atail" + assert escape_css_content("\"\"") == "\\000022\\000022" + assert escape_css_content("\\\\") == "\\00005C\\00005C" + assert escape_css_content("ABCD1234
  • ") == "ABCD1234
  • " diff --git a/schickmacher/static/images/banner.jpg b/schickmacher/static/images/banner.jpg index 8d7aab8..a81a37e 100644 Binary files a/schickmacher/static/images/banner.jpg and b/schickmacher/static/images/banner.jpg differ diff --git a/schickmacher/static/images/banner.svg b/schickmacher/static/images/banner.svg deleted file mode 100644 index d5d62ef..0000000 --- a/schickmacher/static/images/banner.svg +++ /dev/null @@ -1,700 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/schickmacher/static/images/favicons/favicon.ico b/schickmacher/static/images/favicons/favicon.ico index a40e91d..33f5cbc 100644 Binary files a/schickmacher/static/images/favicons/favicon.ico and b/schickmacher/static/images/favicons/favicon.ico differ diff --git a/schickmacher/static/images/logo.png b/schickmacher/static/images/logo.png deleted file mode 100644 index 1c1086a..0000000 Binary files a/schickmacher/static/images/logo.png and /dev/null differ diff --git a/schickmacher/static/images/qabel-kl.png b/schickmacher/static/images/qabel-kl.png deleted file mode 100644 index 5164222..0000000 Binary files a/schickmacher/static/images/qabel-kl.png and /dev/null differ diff --git a/schickmacher/static/sass/colors.scss b/schickmacher/static/sass/colors.scss index 3631571..191c1d6 100644 --- a/schickmacher/static/sass/colors.scss +++ b/schickmacher/static/sass/colors.scss @@ -1,2 +1,2 @@ -$orange: rgb(255, 105, 15); +$orange: rgb(74, 60, 255); diff --git a/schickmacher/static/sass/project.scss b/schickmacher/static/sass/project.scss index bf4ec76..787c6a5 100644 --- a/schickmacher/static/sass/project.scss +++ b/schickmacher/static/sass/project.scss @@ -3,7 +3,7 @@ // project specific CSS goes here //////////////////////////////// - //Variables// +//Variables// //////////////////////////////// // Alert colors @@ -16,7 +16,7 @@ $dark-pink: #eed3d7; $red: #b94a48; //////////////////////////////// - //Alerts// +//Alerts// //////////////////////////////// // bootstrap alert CSS, translated to the django-standard levels of @@ -34,6 +34,16 @@ $red: #b94a48; color: $red; } +.markdownx { + display: flex; + column-gap: 2.5em; +} + +.markdownx-editor { + width: 50%; +} + .markdownx-preview { + width: 50%; @import 'render'; } diff --git a/schickmacher/static/sass/render.scss b/schickmacher/static/sass/render.scss index 193da10..d4babcd 100644 --- a/schickmacher/static/sass/render.scss +++ b/schickmacher/static/sass/render.scss @@ -12,7 +12,7 @@ } @bottom-center { - content: 'qabel.de'; + content: ''; font-weight: bold; color: $orange; } diff --git a/schickmacher/storage.py b/schickmacher/storage.py new file mode 100644 index 0000000..a89f6e9 --- /dev/null +++ b/schickmacher/storage.py @@ -0,0 +1,5 @@ +from whitenoise.storage import CompressedManifestStaticFilesStorage + + +class WhiteNoiseStaticFilesStorage(CompressedManifestStaticFilesStorage): + manifest_strict = False \ No newline at end of file diff --git a/schickmacher/templates/renderer/render_form.html b/schickmacher/templates/renderer/render_form.html index f0db677..cb7e8b0 100644 --- a/schickmacher/templates/renderer/render_form.html +++ b/schickmacher/templates/renderer/render_form.html @@ -17,7 +17,5 @@ {% csrf_token %} {{ form|crispy }} -
    {{ form.media }} -
    {% endblock %} diff --git a/schickmacher/templates/renderer/rendered.html b/schickmacher/templates/renderer/rendered.html index 2ca154b..d3f0198 100644 --- a/schickmacher/templates/renderer/rendered.html +++ b/schickmacher/templates/renderer/rendered.html @@ -1,4 +1,4 @@ -{% load static compress tz %} +{% load extra_filters %}{% load static compress tz %} @@ -16,7 +16,7 @@ content: "{{ date | date:'d.m.Y' }}"; } @top-left { - content: "{{ title }}" + content: "{{ title | escape_css_content | safe }}" } @top-right-corner { } diff --git a/test.md b/test.md index a9b6a6d..6acc5a5 100644 --- a/test.md +++ b/test.md @@ -1,167 +1,3 @@ -# Lead Developer - - Jahrgang: 1988 - - Ausbildung: Bachelor of Science Informatik, Leibniz Universität Hannover - -## Fachkenntnisse -### Softwareentwicklung -#### Kernkompetenzen - - Agile Development, Test-Driven-Development - - Reactive Design, Microservices - - Clean Architecture, Domain Driven Development - - OpenSource Lizenzen im kommerziellen Einsatz - -#### Tiefgreifende Erfahrung - - Testmanagement und -automatisierung (xUnit, Selenium, pytest, Espresso, etc) - - Logisches Datenbankdesign, relational und NoSQL (PostgreSQL, MySQL / MariaDB, SQLite, MongoDB, Redis, Elasticsearch) - - Android App-Entwicklung (RxJava, MVVM, Jetpack, Architecture Components, USB-CDC) - - Python (Django, Django-Rest-Framework, Tornado), Kotlin, Java (Spring Boot), PHP (Yii, Zend Framework 3), Ruby (Rails) - - Web-Frontends mit Angular (Material Design, Redux), jQuery, TypeScript, JavaScript - -#### Grundlegende Erfahrung - - Oracle DB, C++ (embedded development), .NET, C#, Haskell, Go - -### Infrastruktur - - Deployment und Integration bei Amazon Web Services (S3, EC2) und Firebase - - Git, SVN, Mercurial - - JetBrains Toolchain (Hub, YouTrack, Teamcity, Upsource), Jenkins, Jira, GoCD, Redmine - - Linux Server, nginx, Docker, Docker-Compose - -### Datenschutz/Datensicherheit - - Privacy by Design in der Praxis, DSGVO-Zusammenhänge - - Implementation intern entwickelter Kryptographieprotokolle, Entwicklung und Review von Kryptographieprotokollen - - Auditierung von Full-Stack Webanwendungen - -### Wissensvermittlung - - Konzeption von Präsentationen und Vorträgen, Durchführung von Präsentationen und Vorträgen - - Entwicklerschulungen, Beratung für Software-Architektur, Security by Design und Teamleitung - -## Weitere Kenntnisse -### Branchen - - Universitäten - - Veranstaltungsbranche - - Medizinbranche - - Büroelektronik - - Telekommunikationsbranche - -### Sprachen - - Deutsch (Muttersprache) - - Englisch (fließend) - -## Ausgewählte Projekte -### 2019 -#### Niedersächsische Tierseuchenkasse, Hannover -Diverse Module einer Website mit Integration von Services Dritter - -Technologien - - PHP 7.2, Zend Framework 3, PHPUnit - - Bootstrap 3, jQuery - - Docker - - MySQL/MariaDB - - -### 2019 -#### Arconic Fastening Systems, Hildesheim -Informationsflussanalyse und Erarbeitung von Optimierungspotenzialen im Kontext von Industrie 4.0 in einem -Hauptfertigungsstandort anhand von Interviews und bestehender Dokumentation - - Interdisziplinäre Zusammenarbeit mit dem Institut für Integrierte Produktion Hannover - -### 2018 -#### Büroelektronik Konzern, Hannover -Implementierung eines Mock-Ups zur Demonstration eines neuen kryptographischen -Konzepts und seiner Anwendungsmöglichkeiten - - Entwicklung eines Mock-Ups -Technologien - - Angular, Clarity Design - -#### Büroelektronik Konzern, Hannover -Privacy Firewall zur Einstufung personenbezogener Daten in -Unternehmensnetzwerken als Teil eines Großprojekts - - Entwicklung einer Server Applikation - - Beratung in den Bereichen Natural Language Processing und KI - - Review der Gesamtarchitektur mit Bezug auf IT-Security und Performance / Skalierung - -Technologien - - Python, MQTT - - spaCy - Industrial Streng Natural Language Processing - -### 2017 - 2018 -#### Softwareentwicklungsbranche, Hannover -Entwicklung einer sicheren Telekommikationslösung mit IoT-Komponenten - - Software-Entwicklung (Android, Embedded, Webserver) - - Leitung eines verteilten und interdisziplinären Teams - -Technologien - - C++ auf ARM32 - - Kotlin, Python, Django - - Angular, Typescript, Clarity Design - - WebSockets, WebRTC - - USB-CDC mit Android Device als USB-Host - - Protobuf, serielle Protokolle - - Docker - -### 2017 -#### Frankiermaschinenhersteller, Berlin -Auditing einer umfangreichen online Software für digitale Signaturen - - Durchführung der Auditierung - - Coaching der Teamleitung (insb. Testing, Teamführung und Kommunikation -mit der Projektleitung) - - Beratung bzgl. Verbesserung der vorhanden Entwicklungsprozesse -hinsichtlich agile Development - -#### Büroelektronik Konzern, Hannover -Entwicklung eines Demonstrators für eine smarte Arbeitsumgebung unter -Berücksichtigung von Privacy-by-design and default Vorgaben - - Software Entwicklung - -Technologien - - MQTT, IoT - - Windows 10 C# .NET App - -#### Büroelektronik Konzern, Hannover -Entwicklung eines Demonstrators zum Einsatz von Attribute-Based-Credentials zur anonymen Authentifizierung und Authorisierung von Mitarbeitern mithilfe von Smart Devices - - Software-Entwicklung - - Konzept-Entwicklung - Attribute-Based-Credentials im Enterprise Umfeld - -Technologien - - Python, Flask - - Angular, Material Design - - Android, Kotlin, AndroidWear (Smartwatches), NFC - -### 2015 - 2016 -#### Qabel GmbH (internes Projekt), Hannover -Kryptographie-Plattform zur sicheren Kommunikation mit Ende-zu-Ende Verschlüsselung und Dokumentenablage in der Amazon Cloud mit Client-Anwendungen für Android und Windows/Mac/Linux - -Technologien - - Java, Kotlin, Android - - Python, Django - - Docker - - Angular - - PostgreSQL, SQLite - -### 2011 - 2014 -#### Event Software Hersteller, Hannover -Entwicklung einer modularen und skalierbaren Webanwendung zur Organisation von Veranstaltungen wie beispielsweise Messen - - Performance-optimiertes ORM auf Basis von MongoDB und Redis - - Massen-Email-Versand in Hintergrundprozessen - -Technologien - - Python - - PHP, Yii-Framework - - MongoDB, Redis - - HTML 5, CSS3, jQuery, DataTables - -### 2008 - 2012 -#### Juristische Fakultät, Leibniz Universität Hannover -Administration, Webentwicklung und Druck-Layouting - -Technologien - - PHP - - Python - - LaTeX - - MySQL - -*** - # Markdown Test Page * [Headings](#Headings)