[stable33] fix(validation): harden unified files contract#7445
Merged
vitormattos merged 81 commits intostable33from Apr 7, 2026
Merged
[stable33] fix(validation): harden unified files contract#7445vitormattos merged 81 commits intostable33from
vitormattos merged 81 commits intostable33from
Conversation
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…ction Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…edFile Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…lidatedFile Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…gress Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…y url Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…llection Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…act guards Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
… validation Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…tries - Replace array_map with foreach to properly filter invalid signer entries - Validate signRequestId as required field (must be integer or numeric string) - Type-cast fields explicitly: displayName, email, statusText to string; status to int - Skip empty array returns for non-array inputs - Preserve identifyMethods when present - Ensures all returned summaries comply with OpenAPI schema contract Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
- Test rejection of array inputs (prevent numeric keys conversion) - Test filtering of non-string values - Test empty object and null handling - Verify proper handling of mixed string/non-string values - Covers edge cases like empty strings and various input types Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…vice
- Extract normalizeRouteRecord from Validation.vue to dedicated service
- Add explicit array rejection to prevent numeric keys (e.g., {'0': 'a', '1': 'b'})
- Type-cast string values explicitly for type safety
- Drop non-string values with logging
- Improve contract enforcement for route params/query handling
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
- Remove local normalizeRouteRecord function from Validation.vue - Import and use normalizeRouteRecord from services/routeNormalization - Improves maintainability and enables dedicated testing - No behavioral change, preserves all existing functionality Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
- Test acceptance of requested_by.displayName as null (missing profile info) - Test type validation still works (rejects non-string and missing) - Covers edge case where requester profile information is unavailable Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
- Update isRequestedBy() to allow displayName as null - Aligns with OpenAPI contract that allows null for missing profile info - Prevents rejection of valid API payloads when requester info is unavailable Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…thod Extracted the signRequestId type casting and validation logic from mapSignerDetailsToSummary() into a dedicated private method extractValidSignRequestId(). This improves code readability by: - Removing inline validation comment (code is now self-documenting) - Centralizing validation logic in a named method that clearly explains the operation (extracting a valid ID or returning null) - Making the validation testable and reusable - Simplifying the main loop by delegating validation concern The method name clearly conveys intent without requiring explanatory comments. All 178 FileServiceTest assertions pass with no regressions. Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Extracted validation and transformation logic into self-documenting helper functions: - isValidRecordInput(): Type guard clearly stating 'is object and not array' - shouldRejectAsArray(): Explains the design decision to reject arrays - buildStringOnlyRecord(): Separates string-filtering logic with clear intent Benefits: - Removed inline conditional logic that required explanatory comments - Each function name now conveys purpose without additional documentation - Improved testability of individual concerns - Simplified main normalizeRouteRecord() function body All 9 routeNormalization tests pass with no regressions. Full test suite validates: 2317 tests across 171 files. TypeScript type checking clean. Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
The method name extractValidSignRequestId() and its return type ?int already express the full contract. The comment was paraphrasing both without adding new information. Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
5ed59b0 to
fe84fea
Compare
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backport of #7442
Warning, This backport's changes differ from the original and might be incomplete⚠️
Todo
Learn more about backports at https://docs.nextcloud.com/server/stable/go.php?to=developer-backports.