Commit Graph

17 Commits

Author SHA1 Message Date
Stefan Hardegger
a3f2801696 Fix author URL saving issue in multipart form submission
Changed frontend to send multiple URL parameters with same name ('urls')
instead of indexed parameters ('urls[0]', 'urls[1]'). Spring Boot expects
list parameters in multipart forms to use the same parameter name, not
array-style indexed naming.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-24 09:45:57 +02:00
Stefan Hardegger
8580d660e9 Update of documentation 2025-07-24 08:51:45 +02:00
Stefan Hardegger
77ad643eac configurable url 2025-07-24 08:03:56 +02:00
Stefan Hardegger
4bbc14d165 html sanitation adjustment 2025-07-23 16:52:19 +02:00
Stefan Hardegger
d489078721 Improve RichTextEditor to preserve formatting on paste
**Enhanced Visual Mode:**
- Add paste event handler that preserves HTML formatting when pasting
- Integrate with shared sanitization configuration for consistent filtering
- Preload sanitization config for optimal performance
- Support for bold, italic, and other basic formatting in visual mode

**Updated Sanitization Config:**
- Add more useful HTML tags: kbd, samp, var, details, summary, colgroup, col
- Add attributes for better table support: start, type for ol
- Add style attributes for more elements: table, ul, ol, li, blockquote, pre, code
- Maintain security while allowing richer content formatting

**User Experience:**
- Users can now paste formatted content (bold, italic, lists, etc.) in visual mode
- Content is automatically sanitized using backend configuration
- Updated help text to reflect new capabilities
- Maintains backward compatibility with plain text input

**Technical Improvements:**
- Async clipboard API support with fallbacks
- Error handling for paste operations
- Consistent sanitization between manual input and paste operations

Resolves issue where pasted formatted content was stripped to plain text in visual mode.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-23 16:51:50 +02:00
Stefan Hardegger
030aac7846 j 2025-07-23 16:21:39 +02:00
Stefan Hardegger
5a48ebcfeb Implement shared HTML sanitization configuration
**Backend Changes:**
- Add html-sanitization-config.json with allowedTags, allowedAttributes, and allowedCssProperties
- Create HtmlSanitizationConfigDto for configuration data transfer
- Update HtmlSanitizationService to load configuration from JSON file with fallback
- Add HtmlSanitizationController with public API endpoint at /api/config/html-sanitization
- Update SecurityConfig to allow public access to /api/config/** endpoints

**Frontend Changes:**
- Add configApi.getHtmlSanitizationConfig() to fetch backend configuration
- Create sanitization.ts utility with sanitizeHtml() and sanitizeHtmlSync() functions
- Update story reading page to use shared sanitization configuration
- Add preloadSanitizationConfig() for early configuration loading
- Handle TrustedHTML type conversion and DOMPurify config compatibility

**Benefits:**
- Consistent HTML sanitization rules between frontend and backend
- Centralized configuration in JSON file for easy maintenance
- Automatic fallback to safe defaults if configuration loading fails
- API-driven approach allows runtime configuration updates
- Maintains security while providing flexibility for content formatting

Resolves HTML sanitization inconsistencies and provides foundation for configurable content safety rules.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-23 16:18:03 +02:00
Stefan Hardegger
f2001e0d0c Add CORS support for production domain
- Add STORYCOVE_CORS_ALLOWED_ORIGINS environment variable to docker-compose.yml
- Include production domain https://storycove.sharyavin.synology.me in allowed origins
- Update SecurityConfig to read from environment variable with fallback
- Maintains localhost support for development while enabling production access
- Fixes "Invalid CORS request" error on deployed application

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-23 14:58:59 +02:00
Stefan Hardegger
23f31defde Escape nginx variables in docker-compose.yml for Portainer
- Double all $ characters in nginx config ($$host, $$http_upgrade, etc.)
- Prevents Docker Compose from interpreting nginx vars as environment variables
- Fixes "invalid number of arguments in proxy_set_header directive" error
- Ensures proper nginx variable passing in embedded config

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-23 14:44:55 +02:00
Stefan Hardegger
9f3bee826b Fix nginx configuration for Portainer deployment
- Remove quotes from Connection header value to fix nginx parsing error
- Simplify Cache-Control header to avoid argument parsing issues
- Clean up embedded nginx config formatting for better compatibility
- Resolves "invalid number of arguments in proxy_set_header directive" error

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-23 14:38:50 +02:00
Stefan Hardegger
c0a2c68d94 trying to fix the nginx config in docker 2025-07-23 14:24:22 +02:00
Stefan Hardegger
f86fbc39d8 isolate network in docker 2025-07-23 14:15:09 +02:00
Stefan Hardegger
ff31bb219f Set Port 2025-07-23 13:57:21 +02:00
Stefan Hardegger
d69bed00a2 MVP Version 2025-07-23 12:28:48 +02:00
Stefan Hardegger
59d29dceaf inital working version 2025-07-22 21:49:40 +02:00
Stefan Hardegger
bebb799784 Backend implementation 2025-07-21 10:46:11 +02:00
Stefan Hardegger
68c7c8115f Intial Setup 2025-07-21 08:47:52 +02:00