diff --git a/apache/Dockerfile b/apache/Dockerfile new file mode 100644 index 0000000..469ca2e --- /dev/null +++ b/apache/Dockerfile @@ -0,0 +1,12 @@ +FROM php:8.2-apache + +# Apache Rewrite aktivieren +RUN a2enmod rewrite + +# PHP-Extensions für MariaDB +RUN docker-php-ext-install pdo pdo_mysql + +# VHost kopieren +COPY vhost.conf /etc/apache2/sites-available/000-default.conf + +WORKDIR /var/www/html diff --git a/apache/vhost.conf b/apache/vhost.conf new file mode 100644 index 0000000..dc8a038 --- /dev/null +++ b/apache/vhost.conf @@ -0,0 +1,12 @@ + + ServerAdmin webmaster@localhost + DocumentRoot /var/www/html + + + AllowOverride All + Require all granted + + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + diff --git a/db/init/001_schema.sql b/db/init/001_schema.sql new file mode 100644 index 0000000..880f6d5 --- /dev/null +++ b/db/init/001_schema.sql @@ -0,0 +1,55 @@ +-- Identitäten +CREATE TABLE identities ( + id INT AUTO_INCREMENT PRIMARY KEY, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB; + +-- Stammdaten (Key-Value) +CREATE TABLE identity_fields ( + id INT AUTO_INCREMENT PRIMARY KEY, + identity_id INT NOT NULL, + field_key VARCHAR(50) NOT NULL, + field_value TEXT NOT NULL, + FOREIGN KEY (identity_id) + REFERENCES identities(id) + ON DELETE CASCADE +) ENGINE=InnoDB; + +-- Zugriffstoken (UUIDs) +CREATE TABLE access_tokens ( + id INT AUTO_INCREMENT PRIMARY KEY, + identity_id INT NOT NULL, + uuid CHAR(36) NOT NULL UNIQUE, + expires_at DATETIME NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (identity_id) + REFERENCES identities(id) + ON DELETE CASCADE +) ENGINE=InnoDB; + +-- Feldrechte pro Token +CREATE TABLE token_permissions ( + token_id INT NOT NULL, + field_key VARCHAR(50) NOT NULL, + PRIMARY KEY (token_id, field_key), + FOREIGN KEY (token_id) + REFERENCES access_tokens(id) + ON DELETE CASCADE +) ENGINE=InnoDB; + +-- Dateien (Bilder, PDFs, etc.) +CREATE TABLE files ( + id INT AUTO_INCREMENT PRIMARY KEY, + identity_id INT NOT NULL, + token_id INT NULL, + filename VARCHAR(255) NOT NULL, + stored_name VARCHAR(255) NOT NULL, + mime_type VARCHAR(100), + uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (identity_id) + REFERENCES identities(id) + ON DELETE CASCADE, + FOREIGN KEY (token_id) + REFERENCES access_tokens(id) + ON DELETE SET NULL +) ENGINE=InnoDB; diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1af2243 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,28 @@ +version: "3.9" + +services: + web: + build: ./apache + container_name: apache_web + ports: + - "80:80" + volumes: + - ./www:/var/www/html + depends_on: + - db + + db: + image: mariadb:11 + container_name: mariadb + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: rootpass + MYSQL_DATABASE: appdb + MYSQL_USER: appuser + MYSQL_PASSWORD: apppass + volumes: + - db_data:/var/lib/mysql + - ./db/init:/docker-entrypoint-initdb.d:ro + +volumes: + db_data: diff --git a/www/.htaccess b/www/.htaccess new file mode 100644 index 0000000..d27d670 --- /dev/null +++ b/www/.htaccess @@ -0,0 +1,8 @@ +RewriteEngine On + +# Nur wenn keine echte Datei / kein echtes Verzeichnis +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d + +# UUID weiterreichen +RewriteRule ^([a-fA-F0-9-]+)$ card.php?uuid=$1 [L,QSA] diff --git a/www/card.php b/www/card.php new file mode 100644 index 0000000..64d2f08 --- /dev/null +++ b/www/card.php @@ -0,0 +1,14 @@ +