0476315322
* feat(security): implement CSRF protection * chore: clean up CSRF implementation - Remove unused generateCsrfToken export from security.ts - Remove redundant /csrf-token path check (GET already exempt) - Restore defineConfig wrapper in vitest.config.ts for type safety * add K8S note in README, fix broken e2e * feat/upload-bar (#30) * feat/upload-bar: add a upload bar when user upload file, indicate the upload process * feat/save-loading-status: add save status when click back button from editor * fix: address PR review issues in upload and save features - Replace deprecated substr() with substring() in UploadContext - Fix broken error handling that checked stale task status - Fix missing useEffect dependency in UploadStatus - Fix CSS class conflict in progress bar styling - Add error recovery for save state in Editor (reset on failure) - Use .finally() instead of .then() to ensure refresh on upload failure - Fix inconsistent indentation in UploadContext * fix e2e tests --------- Co-authored-by: Zimeng Xiong <zxzimeng@gmail.com> * chore: pre-release v0.2.1-dev * Update backend/src/security.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix filename/math random UUID generation --------- Co-authored-by: AdrianAcala <adrianacala017@gmail.com> Co-authored-by: adamant368 <60790941+Yiheng-Liu@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
58 lines
1.3 KiB
YAML
58 lines
1.3 KiB
YAML
services:
|
|
backend:
|
|
image: zimengxiong/excalidash-backend:latest
|
|
container_name: excalidash-backend
|
|
environment:
|
|
- DATABASE_URL=file:/app/prisma/dev.db
|
|
- PORT=8000
|
|
- NODE_ENV=production
|
|
# Required for horizontal scaling (k8s): uncomment and set to same value on all instances
|
|
# - CSRF_SECRET=${CSRF_SECRET}
|
|
volumes:
|
|
- backend-data:/app/prisma
|
|
networks:
|
|
- excalidash-network
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test:
|
|
[
|
|
"CMD",
|
|
"node",
|
|
"-e",
|
|
"require('http').get('http://localhost:8000/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))",
|
|
]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
|
|
frontend:
|
|
image: zimengxiong/excalidash-frontend:latest
|
|
container_name: excalidash-frontend
|
|
ports:
|
|
- "6767:80"
|
|
depends_on:
|
|
- backend
|
|
networks:
|
|
- excalidash-network
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test:
|
|
[
|
|
"CMD",
|
|
"wget",
|
|
"--quiet",
|
|
"--tries=1",
|
|
"--spider",
|
|
"http://localhost:80",
|
|
]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
|
|
networks:
|
|
excalidash-network:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
backend-data:
|