1.6 - 2025-04-23 - This module has been superseded by FU, there will likely not be much further development on TUWF after this release. - TUWF::Validate: `default` option now implies `required => false` - TUWF::Validate: Add `missing` option for hash keys - TUWF::Validate: Reject unicode numbers in num/int validations - TUWF::Validate: Perform more strict schema validation - TUWF::XML: Add support for `` - TUWF::XML: Add support for merging attributes with '+' - FastCGI: Request parameters are no longer written to `%ENV` - Add MIME types for .mjs, .avif, .jxl, .webp - Set `convert_blessed` option in tuwf->resJSON() 1.5 - 2023-01-18 - Add tuwf->req() method for storing request-local data - Add tuwf->captures() as alternative to handler arguments - Add support for Max-Age and SameSite properties in resCookie() - Add support for JSON::PP and Cpanel::JSON::PP - Add support for calling dbPage() in scalar context - Add "onerror" and "undefbool" built-in validations - Add support for subroutine arguments to 'default' validation option - Add TUWF::Validate::Interop::elm_decoder() (undocumented) - Add support for undef and concat attributes in TUWF::XML - Add TUWF::XML::xml_string() function - Add summary tag to TUWF::XML - Add "db_connect" hook - Add "fastcgi_max_requests" setting - Add support for graceful process shutdown in FastCGI mode - Add support for output compression for resJSON, resFile and resBinary - Fix handling recursion from the log_format subroutine - Fix encoding of HTTP response headers - Fix calling error_404_handler before the "after" hooks. - Fix handling of SIGCHLD when using the builtin HTTP server - Fix logging during startup - Fix input modification on TUWF::Validate with unknown=>"reject" hashes - Fix handling of HTTP DELETE requests - Fix handling for HTTP 204 responses - Remove error on resFile() path traversal, just return a 404 instead - Disallow IP address hosts as part of email validation - Use Perl built-in utf8 functions instead of Encode module 1.4 - 2019-07-06 - Version bump because CPAN doesn't like patch versions 1.3.1 - 2019-07-06 - Fix some tests (hopefully) 1.3 - 2019-06-17 - Add TUWF::Validate module for generic data structure validation - Add tuwf->compile() and tuwf->validate() interfaces for input validation - Add 'custom_validations' setting - Add setting to write emails to the log file instead of mailing them - Add (undocumented) TUWF::Validate::Interop module for JSON coercion, HTML5 validation patterns and Elm code generation. - Fix logging of JSON request body on error 1.2 - 2018-02-18 - Add tuwf() exported function as alias to $self or $TUWF::OBJ - Add TUWF::get/put/post/etc() as better alternative to TUWF::register() - Add TUWF::hook() as better alternative to (pre|post)_request_handler - Add capture() to access route captures - Add standandlone HTTP dev server (requires HTTP::Server::Simple) - Add pass() and done() methods to prematurely abort the current handler - Add 'import_modules' setting - TUWF::Request: Add reqJSON() - TUWF::Request: Disallow control characters in HTTP request data - TUWF::Response: Add resJSON() - TUWF::Response: Add resBinary() - TUWF::Response: Add resFile() + mime_types/mime_default settings - TUWF::Response: Allow setting headers before resRedirect() - TUWF::Response: resRedirect() now sets a relative 'Location' HTTP header - TUWF::DB: Add DB query logging and profiling to non-TUWF database functions - TUWF::DB: Add dbVal() - TUWF::XML: Add functional-style DSL - TUWF::XML: Add HTML5 support - TUWF::XML: Add different naming convention support - TUWF::XML: Add 'mkclass' utility function - Improved error pages - Various documentation improvements 1.1 - 2017-11-26 - Disallow exclamation mark in email address validation - Add reqProtocol() method - Add reqFCGI() method - Remove 'X-Powered-By' header - Fix handling of space character in load_recursive() 1.0 - 2015-09-17 - !! Some backwards-imcompatible changes, marked * !! - kv_validate() improvements: - Fix maxcount option - Fix non-array argument to 'func' - Added some default templates: num, int, uint, ascii, email, weburl - * Removed 'min' and 'max' options, these now require the num template - Add 'inherit' option for template definitions - Allow templates to provide default values for 'required', 'default', 'rmwhitespace', 'multi', 'mincount' and 'maxcount' - Add tests - * reqPath() now includes the leading slash - * reqGet(), reqPost(), reqParam(), reqUploadMIME() and reqUploadRaw() now only work in scalar context. - * Add plural versions of the above methods (reqGets() etc) that only work in list context. - Add reqQuery() - Fix warning with Perl 5.22 0.2 - 2012-01-19 - Fixed bug with in-place utf8_decode() in recent Perls - Lowered minimum Perl version to 5.8.0 0.1 - 2011-02-07 - Initial version