[ 
https://issues.apache.org/jira/browse/FINERACT-2735?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Terence Monteiro updated FINERACT-2735:
---------------------------------------
    Description: 
Currently, the {{order}} query parameter accepted by the datatables read 
endpoints ({{{}GET /datatables/\{datatable}/\{apptableId}{}}} and {{{}GET 
/datatables/\{datatable}/\{apptableId}/\{datatableId}{}}}) is passed through 
without sufficient validation. This ticket proposes validating {{order}} 
against the datatable's actual column list before it's used to build the query, 
consistent with how sorting is already restricted on the offices endpoint.

*Proposed behavior:*
 * {{order}} must reference a single column that exists on the target datatable 
(verified against the table's resolved column metadata).
 * An optional {{ASC}} / {{DESC}} direction token may follow the column name 
(case-insensitive).
 * Column names containing spaces or other characters must be quoted, using 
either double quotes ({{{}"Column Name"{}}}) or backticks ({{{}`Column 
Name`{}}}) — consistent with standard SQL identifier-quoting conventions across 
PostgreSQL, MySQL, and MariaDB. Quoting is optional for column names that don't 
require it.
 * Multiple columns (comma-separated) are not supported, matching the existing 
convention on the offices endpoint.
 * Requests with an {{order}} value that doesn't resolve to a real column, or 
that use invalid syntax, will be rejected with a clear error rather than 
silently ignored or passed through.
 * This behavior applies consistently to both affected endpoints, since they 
share the same underlying validation.

*Motivation:*
 * Brings datatables sorting behavior in line with the existing, simpler 
convention already used elsewhere (offices endpoint).
 * Improves input validation and predictability of API behavior.
 * Removes ambiguity around how column names containing spaces are interpreted 
in the {{order}} parameter.

*Acceptance criteria:*
 * Valid single-column {{order}} values (quoted or unquoted, with or without 
direction) return correctly sorted results on both endpoints.
 * {{order}} values referencing a non-existent column are rejected with an 
appropriate error response on both endpoints.
 * {{order}} values using unsupported syntax (multiple columns, malformed 
quoting, invalid direction token) are rejected with an appropriate error 
response on both endpoints.
 * Existing API consumers using single-column, unquoted, no-space column names 
for {{order}} continue to work unchanged.

  was:
Currently, the {{order}} query parameter accepted by the datatables read 
endpoints (e.g. {{{}GET /datatables/\{datatable}/\{apptableId}{}}}) is passed 
through without sufficient validation. This ticket proposes validating 
{{order}} against the datatable's actual column list before it's used to build 
the query, consistent with how sorting is already restricted on the offices 
endpoint.

*Proposed behavior:*
 * {{order}} must reference a single column that exists on the target datatable 
(verified against the table's resolved column metadata).
 * An optional {{ASC}} / {{DESC}} direction token may follow the column name 
(case-insensitive).
 * Column names containing spaces or other characters must be quoted, using 
either double quotes ({{{}"Column Name"{}}}) or backticks ({{{}`Column 
Name`{}}}) — consistent with standard SQL identifier-quoting conventions across 
PostgreSQL, MySQL, and MariaDB. Quoting is optional for column names that don't 
require it.
 * Multiple columns (comma-separated) are not supported, matching the existing 
convention on the offices endpoint.
 * Requests with an {{order}} value that doesn't resolve to a real column, or 
that use invalid syntax, will be rejected with a clear error rather than 
silently ignored or passed through.

*Motivation:*
 * Brings datatables sorting behavior in line with the existing, simpler 
convention already used elsewhere (offices endpoint).
 * Improves input validation and predictability of API behavior.
 * Removes ambiguity around how column names containing spaces are interpreted 
in the {{order}} parameter.

*Acceptance criteria:*
 * Valid single-column {{order}} values (quoted or unquoted, with or without 
direction) return correctly sorted results.
 * {{order}} values referencing a non-existent column are rejected with an 
appropriate error response.
 * {{order}} values using unsupported syntax (multiple columns, malformed 
quoting, invalid direction token) are rejected with an appropriate error 
response.
 * Existing API consumers using single-column, unquoted, no-space column names 
for {{order}} continue to work unchanged.


> Validate order query parameter on datatables endpoint against actual table 
> columns
> ----------------------------------------------------------------------------------
>
>                 Key: FINERACT-2735
>                 URL: https://issues.apache.org/jira/browse/FINERACT-2735
>             Project: Apache Fineract
>          Issue Type: Bug
>            Reporter: Terence Monteiro
>            Assignee: Terence Monteiro
>            Priority: Major
>             Fix For: 1.16.0
>
>
> Currently, the {{order}} query parameter accepted by the datatables read 
> endpoints ({{{}GET /datatables/\{datatable}/\{apptableId}{}}} and {{{}GET 
> /datatables/\{datatable}/\{apptableId}/\{datatableId}{}}}) is passed through 
> without sufficient validation. This ticket proposes validating {{order}} 
> against the datatable's actual column list before it's used to build the 
> query, consistent with how sorting is already restricted on the offices 
> endpoint.
> *Proposed behavior:*
>  * {{order}} must reference a single column that exists on the target 
> datatable (verified against the table's resolved column metadata).
>  * An optional {{ASC}} / {{DESC}} direction token may follow the column name 
> (case-insensitive).
>  * Column names containing spaces or other characters must be quoted, using 
> either double quotes ({{{}"Column Name"{}}}) or backticks ({{{}`Column 
> Name`{}}}) — consistent with standard SQL identifier-quoting conventions 
> across PostgreSQL, MySQL, and MariaDB. Quoting is optional for column names 
> that don't require it.
>  * Multiple columns (comma-separated) are not supported, matching the 
> existing convention on the offices endpoint.
>  * Requests with an {{order}} value that doesn't resolve to a real column, or 
> that use invalid syntax, will be rejected with a clear error rather than 
> silently ignored or passed through.
>  * This behavior applies consistently to both affected endpoints, since they 
> share the same underlying validation.
> *Motivation:*
>  * Brings datatables sorting behavior in line with the existing, simpler 
> convention already used elsewhere (offices endpoint).
>  * Improves input validation and predictability of API behavior.
>  * Removes ambiguity around how column names containing spaces are 
> interpreted in the {{order}} parameter.
> *Acceptance criteria:*
>  * Valid single-column {{order}} values (quoted or unquoted, with or without 
> direction) return correctly sorted results on both endpoints.
>  * {{order}} values referencing a non-existent column are rejected with an 
> appropriate error response on both endpoints.
>  * {{order}} values using unsupported syntax (multiple columns, malformed 
> quoting, invalid direction token) are rejected with an appropriate error 
> response on both endpoints.
>  * Existing API consumers using single-column, unquoted, no-space column 
> names for {{order}} continue to work unchanged.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to