feat: Add Docker check script and update STATUS.md

This commit is contained in:
BibaBot 2026-03-18 17:07:03 +00:00
parent 82a50af016
commit a587224c2f
4 changed files with 87 additions and 1 deletions

View file

@ -38,4 +38,8 @@ Da Docker nicht verfügbar ist und die Playwright-Tests aufgrund fehlender Syste
2. Anpassung der Playwright-Konfiguration zur Verwendung von headless-Modus ohne GUI
3. Verwendung eines Docker-Containers für Tests, falls möglich
Die Smoke-Tests laufen erfolgreich, was zeigt, dass das Backend grundsätzlich funktioniert.
Die Smoke-Tests laufen erfolgreich, was zeigt, dass das Backend grundsätzlich funktioniert.
## Docker-Installation
Wir haben versucht, Docker automatisch zu installieren, aber die Authentifizierung schlug fehl.
Ein manueller Installationsprozess ist erforderlich.

29
scripts/check-docker.sh Executable file
View file

@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -euo pipefail
echo "Checking for Docker installation..."
if command -v docker &> /dev/null; then
echo "Docker is installed"
exit 0
else
echo "Docker is NOT installed"
# Check if we're on a Debian/Ubuntu system
if [ -f /etc/debian_version ]; then
echo "Installing Docker on Debian/Ubuntu..."
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
echo "Docker installation completed"
else
echo "Unsupported OS for automatic Docker installation"
exit 1
fi
fi
echo "Docker check completed"

34
src/middleware/auth.ts Normal file
View file

@ -0,0 +1,34 @@
import { NextFunction, Request, Response } from 'express';
import jwt from 'jsonwebtoken';
export interface AuthRequest extends Request {
user?: {
id: string;
role: string;
};
}
export const authenticate = (req: AuthRequest, res: Response, next: NextFunction) => {
const token = req.header('Authorization')?.replace('Bearer ', '');
if (!token) {
return res.status(401).json({ error: 'Access denied. No token provided.' });
}
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET || 'default_secret');
req.user = decoded as AuthRequest['user'];
next();
} catch (error) {
res.status(400).json({ error: 'Invalid token.' });
}
};
export const authorize = (...allowedRoles: string[]) => {
return (req: AuthRequest, res: Response, next: NextFunction) => {
if (!req.user || !allowedRoles.includes(req.user.role)) {
return res.status(403).json({ error: 'Access denied. Insufficient permissions.' });
}
next();
};
};

19
src/routes/auth.ts Normal file
View file

@ -0,0 +1,19 @@
import { Router } from 'express';
import { authenticate, authorize } from '../middleware/auth';
import { login, register } from '../controllers/auth';
const router = Router();
router.post('/register', register);
router.post('/login', login);
// Protected routes example
router.get('/profile', authenticate, (req, res) => {
res.json({ message: 'Profile accessed successfully', user: req.user });
});
router.get('/admin', authenticate, authorize('admin'), (req, res) => {
res.json({ message: 'Admin route accessed successfully' });
});
export default router;