The `sqlpage.variables()` function previously allowed duplicate keys
when GET, POST, and SET variables of the same name were present. This
commit ensures that the returned JSON object contains only unique keys,
with precedence given to SET variables, then POST, then GET.
* Checkpoint before follow-up message
Co-authored-by: contact <contact@ophir.dev>
* Checkpoint before follow-up message
Co-authored-by: contact <contact@ophir.dev>
* Checkpoint before follow-up message
Co-authored-by: contact <contact@ophir.dev>
* Checkpoint before follow-up message
Co-authored-by: contact <contact@ophir.dev>
* feat: Add OIDC logout functionality
This commit introduces the `oidc_logout_url` function, allowing users to securely log out of OIDC-authenticated applications. It includes CSRF protection and handles redirection to the OIDC provider's logout endpoint.
Co-authored-by: contact <contact@ophir.dev>
* Refactor OIDC logout cookie removal
Co-authored-by: contact <contact@ophir.dev>
* feat: Implement OIDC logout with CSRF protection
This commit implements secure OIDC logout by:
- Using sqlpage.oidc_logout_url() to generate the logout URL.
- Ensuring CSRF protection during the logout process.
- Redirecting to the OIDC provider's logout endpoint.
- Redirecting back to the homepage after logout.
- Adding absolute URI for post logout redirect URI.
* refactor: Enhance build_absolute_uri function to accept scheme parameter
This commit modifies the build_absolute_uri function to include a scheme parameter, allowing for more flexible URL construction. The function now dynamically sets the URL scheme based on the request context, improving compatibility with different environments.
* refactor: Simplify OIDC logout processing and enhance logout token handling
This commit refactors the OIDC logout process by introducing a new function, `parse_logout_params`, to streamline the extraction of logout parameters from the request. It also updates the logout token creation and verification logic, improving security by ensuring the signature is computed correctly. Additionally, the `create_logout_url` function is modified to include a timestamp and signature in the generated URL, enhancing the logout flow's integrity.
* refactor: Improve logout URL generation and parameter parsing
This commit refines the `create_logout_url` function to utilize a query string builder for constructing the logout URL, enhancing readability and maintainability. Additionally, the `parse_logout_params` function is updated to use `Query::into_inner`, streamlining the extraction of logout parameters from the request.
* refactor: Streamline cookie removal in OIDC logout process
This commit simplifies the removal of authentication and nonce cookies during the OIDC logout process by consolidating the cookie removal logic into a single method call for each cookie, enhancing code clarity and maintainability.
* refactor: Enhance cookie removal logic in OIDC logout process
This commit updates the cookie removal process during OIDC logout by utilizing the `Cookie::build` method to specify cookie attributes, improving clarity and ensuring proper cookie handling.
* chore: Update CHANGELOG for version 0.40.1
- Added new function `sqlpage.oidc_logout_url(redirect_uri)` to generate secure logout URLs for OIDC users, supporting RP-Initiated Logout.
- Fixed compatibility issues with Auth0 for OpenID-Connect authentication.
* Support JSON responses via Accept header
* no update in migrations
* No UPDATE in official site migrations
- Updated the JSON component description to clarify its integration with external services and the ability to serve both HTML and JSON based on the HTTP Accept header.
- Added examples demonstrating how to request JSON responses using `curl`.
- Removed the obsolete migration file that documented the JSON response format feature, consolidating information into the main documentation.
* revert stupid docs example change
stupid bot
* simplify tests
* avoid string then json in tests, parse as json directly
* changelog
* feat: Add sqlpage.set_variable function
Co-authored-by: contact <contact@ophir.dev>
* Refactor: Fix set_variable serialization and update tests
Co-authored-by: contact <contact@ophir.dev>
* fix tests: no json_extract on mssql
* Refactor: Update URLParameters handling in set_variable function
- Replaced serde_json::Map with a custom URLParameters struct for better management of URL parameters.
- Introduced methods for handling single and vector values in URLParameters.
- Updated tests to reflect changes in the set_variable function's behavior.
* cargo fmt
* clippy
* retsore set var test
* remove redundant test
* ensure set_variable only takes into account GET variables, not SET
* factor url parameter setting code
* v0.40
* sqlpage.set_variable links to "?" when no parameter is present
- Renamed URLParameters module for clarity and removed the deprecated url_parameter_deserializer.
- Updated the set_variable function to return parameters directly instead of appending to a URL.
- Adjusted related function calls to reflect changes in URL parameter management.
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* Pagination component
* New pagination component
* Some changes
* Adding a warning about the use of LIMIT and OFFSET in the blog post
* Use icon_img for icons
* Correction of the icons size
* enhance pagination docs examples
* update pagination docs
---------
Co-authored-by: Olivier Auverlot <olivier.auverlot@icloud.com>
Co-authored-by: lovasoa <contact@ophir.dev>
* Adding an alias named contents to the html property of the shell-empty component
* Changes for the shell-empty documentation
* improve shell comoonent description
* shell-empty docs clarification
---------
Co-authored-by: Olivier Auverlot <olivier.auverlot@icloud.com>
Co-authored-by: lovasoa <contact@ophir.dev>
* Make URL and POST parameters immutable, separate from SET variables
- URL and POST parameters are now immutable after request initialization
- SET command creates user-defined variables in separate namespace
- Variable lookup: SET variables shadow request parameters
- Added sqlpage.variables('set') to inspect user-defined variables
- Simplified API: most functions now use &RequestInfo instead of &mut
- All tests passing (151 total)
* Restore deprecation warning for SET on POST variable names
* Restore deprecation warnings for $var accessing POST variables
- Warn when both URL and POST have same variable name
- Warn when $var is used for POST-only variable (should use :var)
* Simplify run_sql: always use clone_without_variables
No need to branch on whether variables are provided since we clone in both cases anyway.
* Revert "Simplify run_sql: always use clone_without_variables"
This reverts commit 60f5a05446.
* Fix cross-database test compatibility for immutable variables
Renamed test to run only on SQLite since json_extract() is SQLite-specific.
Other databases (PostgreSQL, MySQL, MSSQL) have different JSON functions.
* Fix test to work across all databases without json_extract
PostgreSQL doesn't have json_extract, so compare the full JSON string instead.
* Document variable system improvements in CHANGELOG
* Make CHANGELOG more explicit about breaking changes with examples
* Fix CHANGELOG: SET overwrites GET parameters, not POST
* Add database-specific examples for accessing original URL parameters
* wip: perf guide
* update guide
* Add materialized views section to performance guide
- Introduced a new section on materialized views, explaining their purpose and benefits for optimizing analytical queries.
- Added an example SQL statement for creating a materialized view to compute total sales per store.
- Provided guidance on refreshing materialized views manually or via external scripts.
* Document nginx streaming and compression for sqlpage (#1080)
* Docs: Add Nginx streaming and compression configuration
Co-authored-by: contact <contact@ophir.dev>
* Add NGINX streaming and compression configuration
Co-authored-by: contact <contact@ophir.dev>
* Refactor NGINX proxy settings documentation for clarity
Co-authored-by: contact <contact@ophir.dev>
* Refine NGINX proxy buffering recommendations for streaming
Co-authored-by: contact <contact@ophir.dev>
* Update NGINX proxy buffering settings for improved streaming performance
Revised the documentation to clarify the impact of enabling and disabling proxy buffering in NGINX for SQLPage. Added concise recommendations for handling slow SQL queries and emphasized the importance of adjusting `compress_responses` in `sqlpage.json` when using a reverse proxy.
Co-authored-by: contact <contact@ophir.dev>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* Update dependencies and version for sqlpage to 0.39.1
- Bump versions of several dependencies including `aho-corasick`, `cc`, `clap`, `icu_collections`, and others to their latest releases.
- Update `Cargo.toml` to reflect the new version of sqlpage.
- Ensure compatibility with updated dependencies and improve overall project stability.
* fix handling of one-element arrays in doc code generator
see https://github.com/sqlpage/SQLPage/issues/1079
* In the table component, allow simple objects in custom_actions instead of requiring arrays of objects.
fix https://github.com/sqlpage/SQLPage/issues/1079
* Implement faster icon loading by inlining icons from the Tabler sprite. The previous method required downloading and parsing a large file, causing delays in icon rendering. Now, icons are generated and cached, improving page load times. Update the icon helper to utilize the new inline method.
* Update tabler icons to version 3.35 and refactor icon extraction logic for improved performance
* icon image helper: logging and error handling
- Changed debug logs to warning logs for invalid icon names and missing icons in the IconImgHelper.
- Updated the way icons are retrieved from the ICON_MAP for better clarity and performance.
* IconImgHelper: use raw string literals for SVG output
* Refactor icon extraction logic in build.rs to improve performance and memory usage. The download_tabler_icons function now directly processes sprite content in memory, eliminating the need for temporary file storage. Updated extract_icons_from_sprite to handle byte slices instead of strings, enhancing efficiency.
* build.rs: raise on missing icon id
* Simlplify icon generation in build.rs
* simplify icon _img helper
* update input field docs
fixes https://github.com/sqlpage/SQLPage/discussions/1081
* better form documentation
* fix ipv6 notation (#1084)
On Mac OS, when localhost:8080 is defined and sqlpage config file, the SocketAddr is resolved with ipv6 address if ip V6 is available on the internal network.
```json
{
"listen_on": "localhost:8080"
}
```
On the terminal we can Ctrl + Click, but the URL is incorrect (ipV6 notation use bracket)
Actually we have
```shell
View your website at:
🔗http://::1:8080
```
Instead of
```
View your website at:
🔗http://[::1]:8080
```
Regards,
* Update dependencies in Cargo.lock to latest versions
* Fix github pr ci cache warnings (#1086)
* feat: Add shared-key to cargo cache action
Co-authored-by: contact <contact@ophir.dev>
* Refactor: Use matrix-specific cache key in CI
Co-authored-by: contact <contact@ophir.dev>
* feat: Cache Rust build artifacts only on main branch
Co-authored-by: contact <contact@ophir.dev>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* Enhance SQL performance guidance in migration script
- Added detailed recommendations for using primary and foreign keys, including examples for product and sales tables.
- Introduced best practices for indexing, query performance debugging, and database maintenance commands.
- Included advice on lazy loading and reducing the number of queries to optimize SQLPage applications.
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Christophe CHAUVET <christophe.chauvet@gmail.com>
* Docs: Add Nginx streaming and compression configuration
Co-authored-by: contact <contact@ophir.dev>
* Add NGINX streaming and compression configuration
Co-authored-by: contact <contact@ophir.dev>
* Refactor NGINX proxy settings documentation for clarity
Co-authored-by: contact <contact@ophir.dev>
* Refine NGINX proxy buffering recommendations for streaming
Co-authored-by: contact <contact@ophir.dev>
* Update NGINX proxy buffering settings for improved streaming performance
Revised the documentation to clarify the impact of enabling and disabling proxy buffering in NGINX for SQLPage. Added concise recommendations for handling slow SQL queries and emphasized the importance of adjusting `compress_responses` in `sqlpage.json` when using a reverse proxy.
Co-authored-by: contact <contact@ophir.dev>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
- Clarify the execution flow of SQL statements in SQLPage, detailing the decision-making process for handling statements.
- Expand on the role of `sqlpage.*` functions and their execution context.
- Improve explanations and examples to illustrate the differences between local handling and database execution.
- Update section titles for better readability and understanding.
- Refactor content for better clarity on how SQLPage processes SQL statements.
- Introduce sections on static simple selects, variable handling, and the execution of `sqlpage.*` functions.
- Improve examples to illustrate the differences between handled and sent queries.
- Enhance explanations regarding performance and data types in SQLPage.
Add complete example with database schema, credential processing, and page protection. Update authentication migration to reference new login component. Enhance login template with default icons and autocomplete attributes. Make validate parameter optional with sensible default.
- Updated SQL queries in `create_session_token.sql` and `login.sql` to use consistent parameter naming conventions.
- Enhanced the login form in `login.sql` to include an error message for failed login attempts.
- Added a new parameter `error_message` in the migration file for better user feedback.
- Modified the Handlebars template to display the error message when applicable, improving user experience during authentication.