Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d12a9a3cfa | ||
|
|
2580c65074 |
+4
-3
@@ -10,13 +10,14 @@
|
|||||||
## P0 — Must Fix (blocks public release)
|
## P0 — Must Fix (blocks public release)
|
||||||
|
|
||||||
### DC-001: Fix 4 failing tests in services.routes.test.js
|
### DC-001: Fix 4 failing tests in services.routes.test.js
|
||||||
- **status:** in-progress
|
- **status:** done
|
||||||
- **owner:** hermes
|
- **owner:** hermes
|
||||||
- **details:** Credential storage tests failing since before v1.13.4. Run `cd dashcaddy-api && npx jest __tests__/routes/services.routes.test.js` to see failures. Fix the root cause, not the test.
|
- **details:** Credential storage tests failing since before v1.13.4. Run `cd dashcaddy-api && npx jest __tests__/routes/services.routes.test.js` to see failures. Fix the root cause, not the test.
|
||||||
|
- **result:** Root cause: routes used `/:serviceId/credentials` (missing `/services/` segment). All 3 credential routes (POST/DELETE/GET) in `routes/services.js` had the wrong path. Fixed to `/services/:serviceId/credentials` — matches the URL pattern used by the live frontend and all 759 tests pass.
|
||||||
|
|
||||||
### DC-002: Sync VERSION file
|
### DC-002: Sync VERSION file
|
||||||
- **status:** todo
|
- **status:** in-progress
|
||||||
- **owner:**
|
- **owner:** hermes
|
||||||
- **details:** `/root/dashcaddy/VERSION` says `1.13.0` but `package.json` says `1.13.4`. VERSION file should always match package.json. Add a pre-commit or post-version bump hook to keep them in sync.
|
- **details:** `/root/dashcaddy/VERSION` says `1.13.0` but `package.json` says `1.13.4`. VERSION file should always match package.json. Add a pre-commit or post-version bump hook to keep them in sync.
|
||||||
|
|
||||||
### DC-003: Remove stale test/debug files from repo root
|
### DC-003: Remove stale test/debug files from repo root
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ module.exports = function({
|
|||||||
// ===== SERVICE CREDENTIAL ENDPOINTS =====
|
// ===== SERVICE CREDENTIAL ENDPOINTS =====
|
||||||
|
|
||||||
// Store credentials for a service
|
// Store credentials for a service
|
||||||
router.post('/:serviceId/credentials', asyncHandler(async (req, res) => {
|
router.post('/services/:serviceId/credentials', asyncHandler(async (req, res) => {
|
||||||
const { serviceId } = req.params;
|
const { serviceId } = req.params;
|
||||||
|
|
||||||
// Validate serviceId to prevent path traversal in credential keys
|
// Validate serviceId to prevent path traversal in credential keys
|
||||||
@@ -221,7 +221,7 @@ module.exports = function({
|
|||||||
}, 'store-service-creds'));
|
}, 'store-service-creds'));
|
||||||
|
|
||||||
// Delete credentials for a service
|
// Delete credentials for a service
|
||||||
router.delete('/:serviceId/credentials', asyncHandler(async (req, res) => {
|
router.delete('/services/:serviceId/credentials', asyncHandler(async (req, res) => {
|
||||||
const { serviceId } = req.params;
|
const { serviceId } = req.params;
|
||||||
|
|
||||||
// Validate serviceId to prevent path traversal in credential keys
|
// Validate serviceId to prevent path traversal in credential keys
|
||||||
@@ -236,7 +236,7 @@ module.exports = function({
|
|||||||
}, 'delete-service-creds'));
|
}, 'delete-service-creds'));
|
||||||
|
|
||||||
// Check credential status for a service (what's stored)
|
// Check credential status for a service (what's stored)
|
||||||
router.get('/:serviceId/credentials', asyncHandler(async (req, res) => {
|
router.get('/services/:serviceId/credentials', asyncHandler(async (req, res) => {
|
||||||
const { serviceId } = req.params;
|
const { serviceId } = req.params;
|
||||||
|
|
||||||
// Validate serviceId to prevent path traversal in credential keys
|
// Validate serviceId to prevent path traversal in credential keys
|
||||||
|
|||||||
Reference in New Issue
Block a user