Skip to content

Commit

Permalink
Merge pull request #225 from H2-invent/development
Browse files Browse the repository at this point in the history
Development
  • Loading branch information
holzi1005 authored Jan 14, 2025
2 parents d0cbfe0 + 51a5967 commit b1100fc
Show file tree
Hide file tree
Showing 442 changed files with 20,019 additions and 14,164 deletions.
8 changes: 8 additions & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,16 @@ OAUTH_KEYCLOAK_REALM=addHere

###> demo ###
demo_installation=prod #demo
APP_DEMO=0
###< demo ###

###> LaF ###
laF_version=2.0.0-dev
###< LaF ###

### Group Mapper API ###
GROUP_API_URI=http://localhost
GROUP_API_KEY=CHANGEME
GROUP_API_ROLES=CHANGEME,CHANGEME,...
GROUP_API_USER_ID=CHANGEME
GROUP_API_GRANT_ADMIN=false
58 changes: 57 additions & 1 deletion .github/workflows/pipeline-development.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,64 @@ name: Run Development Build and Tests
env:
GITHUB_TOKEN: ${{ secrets.token }}

on: push
on:
push:
branches:
- development

jobs:
artifact:
uses: h2-invent/open-datenschutzcenter/.github/workflows/task-artifact.yml@master

create_dev_release:
needs:
- artifact
runs-on: ubuntu-latest
steps:

- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0

- uses: paulhatch/semantic-version@v5.0.2
id: version
with:
tag_prefix: ""
major_pattern: "(MAJOR)"
minor_pattern: "(MINOR)"
change_path: .
version_format: "${major}.${minor}.${patch}-${increment}"

- uses: actions/download-artifact@v3
with:
name: artifact_${{github.run_number}}

- run: unzip -qq artifact_${{github.run_number}}.zip -d artifact

- name: Write semantic Version in .env.local
uses: jacobtomlinson/gha-find-replace@v3
with:
find: "laF_version=2.0.0-dev"
replace: "laF_version=${{ steps.version.outputs.version }}"
regex: false
include: "artifact/.env"

- name: Archive Release for application
uses: thedoctor0/zip-release@0.7.1
with:
type: 'zip'
filename: 'application.zip'
exclusions: '*.git* *.github* /*node_modules/* /*var/* .editorconfig'
directory: artifact

- name: Create new Release with semantic-version tag
uses: ncipollo/release-action@v1
id: create_release
with:
prerelease: true
name: DEV Release ${{ steps.version.outputs.version }}
tag: ${{ steps.version.outputs.version }}
artifacts: artifact/application.zip
artifactContentType: application/zip
bodyFile: RELEASE_NOTE.md
1 change: 0 additions & 1 deletion .github/workflows/pipeline-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ jobs:
uses: ncipollo/release-action@v1
id: create_release
with:
draft: true
prerelease: false
name: Release ${{ steps.version.outputs.version }}
tag: ${{ steps.version.outputs.version }}
Expand Down
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,9 @@ yarn-error.log
docker.conf

/documentation_jitsi_admin/node_modules/
/secretStorage/.Halite*
/secretStorage/.Halite*
###> phpstan/phpstan ###
phpstan.neon
###< phpstan/phpstan ###

.php-version
90 changes: 58 additions & 32 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,33 +1,59 @@
FROM thecodingmachine/php:8.2-v4-apache-node16
ENV PHP_EXTENSION_LDAP=1
ENV PHP_EXTENSION_INTL=1
ENV TZ=Europe/Berlin
ENV COMPOSER_ALLOW_SUPERUSER=1
USER root
RUN usermod -a -G www-data docker
#Do npm install
COPY package.json /var/www/html
COPY package-lock.json /var/www/html
COPY webpack.config.js /var/www/html
RUN npm install
#do npm build
COPY assets /var/www/html/assets
COPY public /var/www/html/public
RUN mkdir -m 777 -p public/build
RUN npm run build
RUN rm -rf node_modules/
#copy all the rest of the app
COPY . /var/www/html
#install all php dependencies

RUN chown -R docker:docker secretStorage
USER docker
RUN composer install
ARG PHP_IMAGE_VERSION=3.20.6
FROM git.h2-invent.com/public-system-design/alpine-php8-webserver:${PHP_IMAGE_VERSION}

ARG VERSION
ARG SUPERCRONIC_VERSION=0.2.33

LABEL version="${VERSION}" \
Maintainer="H2 invent GmbH" \
Description="Docker Image for Open Datenschutzcenter" \
org.opencontainers.version="${VERSION}" \
org.opencontainers.image.title="Open Datenschutzcenter" \
org.opencontainers.image.license="AGPLv3" \
org.opencontainers.image.vendor="H2 invent GmbH" \
org.opencontainers.image.authors="Andreas Holzmann <support@h2-invent.com>" \
org.opencontainers.image.source="https://github.com/h2-invent/open-datenschutzcenter" \
org.opencontainers.image.documentation="https://open-datenschutzcenter.de" \
org.opencontainers.image.url="https://open-datenschutzcenter.de"

USER root
#do all the directory stuff
RUN chmod -R 775 public/build
RUN mkdir -p var/cache
RUN chown -R docker:docker var
RUN chmod -R 777 var
RUN chown -R docker:docker var/
USER docker

RUN apk --no-cache add \
unzip \
&& rm -rf /var/cache/apk/*

RUN mkdir /etc/service/cron \
&& echo "#!/bin/sh" > /etc/service/cron/run \
&& echo "exec 2>&1 /supercronic /var/crontab" >> /etc/service/cron/run \
&& chown -R nobody:nobody /etc/service/cron \
&& chmod -R +x /etc/service/cron

RUN wget https://github.com/aptible/supercronic/releases/download/v${SUPERCRONIC_VERSION}/supercronic-linux-amd64 -O /supercronic \
&& chmod +x /supercronic

RUN wget https://git.h2-invent.com/Public-System-Design/Public-Helperscripts/raw/branch/main/distributed_cron.sh -O /distributed_cron.sh \
&& chmod +x /distributed_cron.sh

RUN echo "# Docker Cron Jobs" > /var/crontab \
&& echo "SHELL=/bin/sh" >> /var/crontab \
&& echo "* * * * * date" >> /var/crontab \
&& echo "0 1 * * * curl https://open-datenschutzcenter.de/health/check" >> /var/crontab \
&& echo "0 9 * * 1-5 /bin/sh /distributed_cron.sh 'data/cron_log' 'php /var/www/html/bin/console app:cron'" >> /var/crontab \
&& echo "" >> /var/crontab

RUN echo "#!/bin/sh" > /docker-entrypoint-init.d/01-symfony.sh \
&& echo "php bin/console cache:clear" >> /docker-entrypoint-init.d/01-symfony.sh \
&& echo "php bin/console doc:mig:mig --no-interaction" >> /docker-entrypoint-init.d/01-symfony.sh \
&& echo "php bin/console cache:clear" >> /docker-entrypoint-init.d/01-symfony.sh \
&& chmod +x /docker-entrypoint-init.d/01-symfony.sh

USER nobody

RUN wget https://github.com/H2-invent/open-datenschutzcenter/releases/download/${VERSION}/application.zip -O artifact.zip \
&& unzip artifact.zip \
&& mkdir data \
&& rm -r var/cache \
&& rm artifact.zip

ENV nginx_root_directory=/var/www/html/public \
upload_max_filesize=10M
30 changes: 29 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Open-Datenschutzcenter 2.0
# Open-Datenschutzcenter
__Open Source Datenschutzmanagement System__

[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](code_of_conduct.md)
Expand All @@ -10,6 +10,24 @@ Helfen Sie mit den Open Datenschutz Center noch besser zu machen. Wir suchen jed
Übersetzungen werden über Crowdin organisiert und können dort einfach und unkompliziert Übersetzt werden.
https://crowdin.com/project/open-datenschutz-center

# Neue Funktionen in Version 3.0

## Vererbung / Hierarchie

Der ODC ermöglicht nun die hierarchische Verwaltung von Dokumenten. Basierend auf den Bedürfnissen einer bundesweiten Organisation mit untergeordneten Landes- und Kreisverbänden können alle Dokumente besser und zentraler verwaltet werden. Bundesweit geltende Regelungen werden auf Bundesebene verwaltet und gelten dann auch auf allen darunter liegenden Ebenen. Die Landes- oder Kreisverbände haben lesenden Zugriff auf die Bundesdokumente und gleichzeitig die Möglichkeit, individuell geltende Regelungen auf ihrer Ebene zu dokumentieren.

## Anbindung der Hierarchie an Keycloak

Die beschriebene Struktur aus Bundes-, Landes- und Kreisverbänden lässt sich auch direkt mit dem Keycloak verbinden, so dass die Berechtigungen direkt von dort übernommen werden.

## Assistent

Ein Assistent unterstützt bei der Anlage von VVT und führt die Nutzenden durch die Formulare.

## Neue Oberfläche

ODC wurde auf Symphony 6 umgesetllt und hat eine modernere Oberfläche

# Funktionen
Folgende Funktionen sind bereits im Open Datenschutzcenter integriert:
* Datenschutzakademie für interne Datenschutzschulungen zum Nachweis der kontinuierlichen Datenschutzweiterbildung der Beschäftigten.
Expand Down Expand Up @@ -75,6 +93,16 @@ In Kooperation mit der [Professur "Datenschutz und Compliance"](https://www.unib

Durch die Mitarbeitenden von @verdigado wurde der VVT Assistent und die Vererbung implemntiert.

# Dev Setup

1. Abhängigkeiten installieren mit `composer install` und `npm install`
1. Starte docker container für Datenbank und Keycloak `docker compose -f docker-compose.dev.yml up -d`
1. Mit Account `admin` und Passwort `admin` im Keycloak anmelden
1. Unter `http://localhost:8080/admin/master/console/#/opendatenschutzcenter/users/add-user` Nutzer für open-datenschutzcenter realm anlegen
1. Passwort für neuen Nutzer festlegen und die beiden opendatenschutzcenter client roles `uma_protection` und `odc-super-admin` zuweisen
1. Führe Migrationen der Datenbank aus `symfony console doctrine:migrations:migrate`
1. Starte den dev Server mit `symfony serve -d`

# Lizenz
Die aktuelle Version von Open Datenschutzcenter wird unter der AGPL-3.0 License bereitgestellt. Weitere Informationen finden Sie in der LICENSE Datei in diesem Repo.
Copyright (c) 2020 H2 invent
14 changes: 12 additions & 2 deletions RELEASE_NOTE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
# RELEASE NOTE
# Release 4.0.0

* Fix Downlaod of Documents
## Neue Funktionen und Verbesserungen
* In den TOM Formularen können jetzt die technischen und organisatorischen Maßnahmen mit einem WYSIWYG Editor beschrieben werden. (https://github.com/H2-invent/open-datenschutzcenter/pull/217)
* Der neue Assistent unterstützt beim Erstellen von Verarbeitungen und allen notwendigen Datensätzen. Dieser Assistent erleichtert die Erfassung von neuen Verarbeitungen. (https://github.com/H2-invent/open-datenschutzcenter/pull/204)
* Ab sofort können Datenschutzelemente von einem Team in Kinderteams vererbt werden. (https://github.com/H2-invent/open-datenschutzcenter/pull/205)
* Add new Dockerfile for the ODC

## Bug fixes


## Update Anleitung
* Die Anleitung zum Installieren des ODCs mit hilfe Docker Compose wurde angepasst (https://github.com/H2-invent/open-datenschutzcenter/wiki/Get-Started)
32 changes: 32 additions & 0 deletions assets/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import './bootstrap.js';
import "trix";
import './scripts/tailmater.js';
import './scripts/datatables.js';

import 'trix/dist/trix.css';
import './styles/materialDesignIcons.css';
import './styles/tailmater.css';
import './styles/colors.css';
import './styles/dataTablesTailwind.css';
import './styles/dataTablesApp.css';
import './styles/app.css';

import $ from 'jquery';
global.$ = global.jQuery = $;
import {initFreeFields} from "./scripts/freeField";

document.getElementById('snackbar-trigger')?.click();

(function() {
addEventListener("trix-initialize", function(e) {
const file_tools = document.querySelector(".trix-button-group--file-tools");
file_tools?.remove();
})
addEventListener("trix-file-accept", function(e) {
e.preventDefault();
})
})();

$(document).ready(function() {
initFreeFields();
});
10 changes: 10 additions & 0 deletions assets/bootstrap.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { startStimulusApp } from '@symfony/stimulus-bridge';

// Registers Stimulus controllers from controllers.json and in the controllers/ directory
export const app = startStimulusApp(require.context(
'@symfony/stimulus-bridge/lazy-controller-loader!./controllers',
true,
/\.[jt]sx?$/
));
// register any custom, 3rd party controllers here
// app.register('some_controller_name', SomeImportedController);
4 changes: 4 additions & 0 deletions assets/controllers.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"controllers": [],
"entrypoints": []
}
84 changes: 84 additions & 0 deletions assets/controllers/appUi_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import { Controller } from '@hotwired/stimulus';

export default class extends Controller {
connect() {
this.initTabs();
this.initClickListeners();
this.initDisabledForms();
}

initDisabledForms() {
Array.prototype.forEach.call(document.querySelectorAll('form[disabled]'), function (form) {
Array.prototype.forEach.call(form.querySelectorAll('input, textarea, select, button'), function (element) {
element.disabled = true;
});
Array.prototype.forEach.call(form.querySelectorAll('button[type=submit]'), function (button) {
button.remove();
});
});
}

initClickListeners() {
const selectorConfirm = '.text-danger, .btn-danger, .btw-warning, [data-click-confirm]';
Array.prototype.forEach.call(document.querySelectorAll(selectorConfirm), function (element) {
element.addEventListener('click', function(event) {
if (confirm(window.translations.confirmAction)) {
return true;
}
event.preventDefault();
return false;
});
});
}

initTabs() {
self = this;
Array.prototype.forEach.call(document.querySelectorAll('[data-type="tabs"]'), function (element) {
element.addEventListener('click', function(event) {
event.preventDefault();
//window.location.hash = self.getAttributeFromElementOrParents(event.target, 'data-target');
history.replaceState(null, null, self.getAttributeFromElementOrParents(event.target, 'data-target'));
});
});
if (document.location.toString().match('#')) {
document.querySelector('[data-target="#' + document.location.toString().split('#')[1] + '"]')?.click();
}
}

loadContentModal(event) {
event.preventDefault();
const url = event.target.getAttribute('href');
const modal = document.getElementById('modal-remote-content');
const contentContainer = modal.querySelector('.modal-inner');
contentContainer.innerHTML = '<p class="p-10 italic">Loading ...</p>'

fetch(url)
.then(response => response.text())
.then(data => { contentContainer.innerHTML = data; })
.catch(error => console.error(error));
}

getAttributeFromElementOrParents(element, attribute, i = 1) {
if (5 == i) { // max 5 recursive calls
return null;
}

if (element.getAttribute(attribute)) {
return element.getAttribute(attribute);
} else if (element.parentNode) {
return this.getAttributeFromElementOrParents(element.parentNode, attribute, ++i);
}

return null;
}

toggle(event) {
event.preventDefault();
const containerShow = document.getElementById(this.getAttributeFromElementOrParents(event.target, 'data-show'));
const containerHide = document.getElementById(this.getAttributeFromElementOrParents(event.target, 'data-hide'));
const containerToggle = document.getElementById(this.getAttributeFromElementOrParents(event.target, 'data-toggle'));
containerShow?.classList.remove('hidden');
containerHide?.classList.add('hidden');
containerToggle?.classList.toggle('hidden');
}
}
Loading

0 comments on commit b1100fc

Please sign in to comment.