Eine moderne und sichere Copy & Paste Webseite mit Code-Generierung für die einfache Freigabe von Text und Code.
- Sichere Text- und Code-Freigabe - Teilen Sie Inhalte über 4-stellige Codes
- QR-Code-Generierung - Automatische QR-Codes für einfachen mobilen Zugriff
- Unterstützung für verschiedene Inhaltstypen - Text, Code, HTML, Markdown
- Rich Text Editor - Formatierungstools für Text (Fett, Kursiv, Unterstreichung, Code)
- Bildunterstützung - Einfügen von Bildern per Drag & Drop oder Copy & Paste
- Datei-Upload - Sichere Freigabe von Dateien (Bilder, PDFs, Dokumente)
- Responsive Design - Optimiert für Desktop, Tablet und Mobile
- Automatische Bereinigung - Maximal 100 Einträge im Speicher
- Keine dauerhafte Speicherung - Alle Daten werden nur temporär gespeichert
- Moderne Benutzeroberfläche - Elegantes Design mit Toast-Benachrichtigungen
- Keyboard Shortcuts - Schnelle Bedienung über Tastenkombinationen
- Backend: Node.js mit Express.js
- Frontend: Vanilla JavaScript, HTML5, CSS3
- Styling: Moderne CSS mit CSS Custom Properties
- Sicherheit: Helmet.js, CORS, Rate Limiting
- Performance: Compression, optimierte Assets
- QR-Codes: QRCode.js für dynamische QR-Code-Generierung
- Node.js (Version 14 oder höher)
- npm oder yarn
-
Repository klonen oder Dateien herunterladen
git clone <repository-url> cd SecureCopyAndPaste
-
Abhängigkeiten installieren
npm install
-
Server starten
Entwicklungsmodus (HTTP auf Port 8080):
npm run dev
Produktionsmodus (HTTPS auf Port 443):
npm start
Windows Entwicklungsmodus:
npm run dev:windows
-
Browser öffnen
- Entwicklung:
http://localhost:8080
- Entwicklung:
NODE_ENV: Bestimmt den Server-Modusdevelopment: HTTP Server auf Port 8080 (Standard)production: HTTPS Server auf Port 443 mit SSL-Zertifikaten
PORT: Überschreibt den Standard-Port (optional)
- Öffnen Sie die Webseite im Browser
- Wechseln Sie zum "Teilen" Tab
- Fügen Sie Ihren Text oder Code in das Eingabefeld ein
- Wählen Sie den entsprechenden Inhaltstyp
- Klicken Sie auf "Teilen"
- Kopieren Sie den generierten 4-stelligen Code oder scannen Sie den QR-Code
- Teilen Sie den Code mit dem Empfänger
- Wechseln Sie zum "Upload" Tab
- Ziehen Sie Dateien in die Upload-Zone oder wählen Sie sie aus
- Wählen Sie die Gültigkeitsdauer
- Klicken Sie auf "Dateien teilen"
- Kopieren Sie den Code oder scannen Sie den QR-Code
- Wechseln Sie zum "Abrufen" Tab
- Geben Sie den 4-stelligen Code ein
- Klicken Sie auf "Abrufen"
- Der Inhalt wird angezeigt und kann kopiert werden
- Automatische Generierung: QR-Codes werden automatisch beim Teilen erstellt
- Download: QR-Codes können als PNG-Datei heruntergeladen werden
- Mobile Nutzung: QR-Codes können mit dem Smartphone gescannt werden
Ctrl/Cmd + Enter- Inhalt teilenCtrl/Cmd + K- Inhalt löschenEscape- Modals schließen
Teilt einen Inhalt und generiert einen 4-stelligen Code.
Request Body:
{
"content": "Der zu teilende Inhalt",
"type": "text|code|html|markdown"
}Response:
{
"success": true,
"code": "1234",
"message": "Inhalt erfolgreich geteilt"
}Ruft einen Inhalt anhand des 4-stelligen Codes ab.
Response:
{
"success": true,
"content": "Der geteilte Inhalt",
"type": "text",
"views": 1,
"created": 1640995200000
}Gibt Statistiken über die gespeicherten Einträge zurück.
Response:
{
"totalEntries": 5,
"maxEntries": 100
}Setzen Sie die Umgebungsvariable PORT:
PORT=8080 npm startBearbeiten Sie die MAX_ENTRIES Konstante in server.js:
const MAX_ENTRIES = 200; // Standard: 100Die CSS-Variablen in public/styles.css können angepasst werden:
:root {
--primary-color: #3b82f6;
--background-color: #f8fafc;
/* ... weitere Variablen */
}- Rate Limiting: Maximal 100 Requests pro IP in 15 Minuten
- Content Security Policy: Schutz vor XSS-Angriffen
- CORS: Cross-Origin Resource Sharing konfiguriert
- Input Validation: Alle Eingaben werden validiert
- Keine dauerhafte Speicherung: Daten werden nur im Arbeitsspeicher gehalten
- Chrome 80+
- Firefox 75+
- Safari 13+
- Edge 80+
- Fork das Repository
- Erstellen Sie einen Feature Branch (
git checkout -b feature/AmazingFeature) - Committen Sie Ihre Änderungen (
git commit -m 'Add some AmazingFeature') - Pushen Sie zum Branch (
git push origin feature/AmazingFeature) - Öffnen Sie einen Pull Request
Dieses Projekt steht unter der MIT-Lizenz. Siehe die LICENSE Datei für Details.
- Inter Font für die Typografie
- Express.js für das Backend-Framework
- Helmet.js für Sicherheits-Header
Bei Fragen oder Problemen erstellen Sie bitte ein Issue im Repository oder kontaktieren Sie den Entwickler.
POST /api/share
Body (JSON):
{
"content": "<dein Text oder HTML>",
"expiryMinutes": 1 | 5 | 10 | 60
}
Antwort:
{
"success": true,
"code": "1234",
"message": "Inhalt erfolgreich geteilt"
}
POST /api/upload-multiple
Body (multipart/form-data):
files: Mehrere Dateien (Feldname:files)expiryMinutes: 1 | 5 | 10 | 60
Antwort:
{
"success": true,
"code": "5678",
"totalFiles": 2,
"message": "Dateien erfolgreich hochgeladen"
}
GET /api/retrieve/:code
Antwort (Text):
{
"success": true,
"type": "text",
"content": "<dein Text>",
"views": 1,
"created": 1720000000000,
"expiresAt": 1720000300000
}
Antwort (Dateien):
{
"success": true,
"type": "files",
"files": [
{
"filename": "abc123.pdf",
"originalname": "MeinDokument.pdf",
"mimetype": "application/pdf",
"size": 123456,
"downloadUrl": "/uploads/abc123.pdf"
},
...
],
"views": 1,
"created": 1720000000000,
"expiresAt": 1720000300000
}
expiryMinutesgibt die gewünschte Gültigkeit in Minuten an (1, 5, 10, 60).- Nach Ablauf sind Code und Dateien unwiderruflich gelöscht.
- Datei-Download erfolgt über die URL aus
downloadUrl. - Alle Endpunkte sind CORS-fähig und für Flutter-HTTP-Requests geeignet.
Beispiel Flutter-Request (Text-Upload):
final response = await http.post(
Uri.parse('https://<dein-server>/api/share'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({
'content': 'Mein Text',
'expiryMinutes': 10,
}),
);Beispiel Flutter-Request (Datei-Upload):
var request = http.MultipartRequest('POST', Uri.parse('https://<dein-server>/api/upload-multiple'));
request.fields['expiryMinutes'] = '10';
request.files.add(await http.MultipartFile.fromPath('files', '/pfad/zur/datei.pdf'));
final response = await request.send();Entwickelt mit ❤️ für einfache und sichere Text-Freigabe