WebHub Object Pascal Components
- Dreamweaver modules OFF by default v3.263
- The dreamweaver modules are no longer compiled in by default.
- Source: uAutoDataModules, uAutoPanels
- OnBadIP n/a v3.263
- Changes of IP number within a session are no longer tracked, reported or considered to be a security breach.
There are two reasons. One: for decades, legitimate users of certain services such as AOL have consistently changed client IP number
within a session, even within a very short amount of time.
Two: with the increasing use of IPv6 and VPNs, thousands of users may share an IPv4 number
so it is a much less useful discriminator than in 1996.
- When upgrading, remove
calls to OnBadIP and
references to pWebApp.Security.CheckSurferIP
and ChangedIPPageID.
in custom code.
- In the app-level XML, the Situations/ChangedIP configuration setting is ignored and can be deleted.
- THtmlViewer n/a v3.263
- The preview panel using THtmlViewer is no longer supported. It had been available to users compiling
with full source only. THtmlViewer has not been maintained for Delphi, so it would not show HTML5 or CSS3
accurately. Testing with a modern browser is more effective.
- Source: whHtmlVw.pas (obsolete)
- FrontDoor v3.263..v3.264
- Third parameter added to OnFrontDoorTriggered event:
TwhFrontDoorEvent = procedure(Sender: TwhConnection;
const ADesiredPageID: string; var bDoFrontDoorBounce: Boolean) of object;
This parameter, bDoFrontDoorBounce, is True by default. If you set it to False, the originally requested PageID will be
allowed.
- If the FrontDoor is triggered, the surfer will be bounced to the FrontDoor page (via http status 302 Moved).
In earlier versions, the PageID changed to the FrontDoor but the URL did not reflect the change.
- The FrontDoor setting is recommended for public sites where new visitors should always start on a single page.
It is set using ZMAdmin, under
.
- FrontDoor v3.264
- Fixed: FrontDoor works when the OnFrontDoorTriggered event handler is nil.
- FrontDoor v3.265
- Fixed: FrontDoor works for a new-session request with a blank PageID.
- Example: scan demo, http://db.demos.href.com/eng/scan
- FileUploadPolicy v3.263
- New parameter added for setting the Content-Disposition which enables control such that the file downloads
using a particular name, which can differ from the storage filename.
- cWebHubVersion v3.263
- There is now a numeric constant generated for the components. This can be used in $IF expressions to conditionally compile for
various WebHub versions, for v3.263 going forward.
- The constant name is
cWebHubVersion
and it is defined in unit whBuildInfo
.
- Example syntax:
{$IF cWebHubVersion >= 3.263}
//abc
{$IFEND}
- TwhCaptcha security v3.264
- Better security: disallow passage when no captcha code has been issued. This can happen if a new captcha has not
been created for the current surfer session, either because the HTML/JS failed to request one or because the user agent
managed to submit the form with the captcha value independently.
- CodeSite Logging of Page Errors v3.264
- Line breaks in the report of page errors are preserved with unicode separators for easier readability in the
CodeSite viewer utility.
- As-App Instance Count v3.264
- When running as-app (not as-service), pWebApp.AppInstanceCounter.InstanceSequence returns 1 for first instance.
- TtpProject.InstanceSequence keeps a separate count by prepending the 'TtpProject_' classname before any AppID.
- Source: tpProj.pas and whcfg_App.pas
- CC Validation v3.266
- The new Mastercard numbers due out in October 2016 are supported.
- Source: ccValid.pas (can be licensed separately
for Delphi; does not require WebHub or TPack.)
- MAILTO v3.267
- If parentils are used in the visible phrase, the content will be expanded.
- This applies to use of the MAILTO command and when calling the pWebApp.SendMailto method.
- HTML | Decode Panel v3.267
- The Decode panel is no longer instantiated by default. It will be phased out.
- Source: whpanel_Decode.pas
- PARAMS v3.267
- If parentils are used in the tekeroID, the content will be expanded.
- Berlin 10.1.2 update 2 support v3.268
- Alert for people using D24, Delphi Berlin 10.1.
- The last version of WebHub to support Delphi Berlin update 1 is v3.267. Once you have installed
Berlin update 2, please use WebHub v3.268.
- There are zero feature changes between WebHub v3.267 and v3.268. This is purely a re-release for
compatibility with the latest patches from Embarcadero.
- Phase out all use of ShortString data type in TPack and WebHub v3.269
- Removed functions BreakShortString and SplitShortString (source: ucString.pas)
- Alias property changed from ShortString to String (source: webObjInsp.pas)
- ShortString properties not supported for D25+ nor for the NEXTGEN compiler for mobile.
They are supported through D24 for VCL, although they are no longer used in WebHub or TPack anywhere.
(source: tpRTTI.pas and tpShareBObj.pas)
- Reference:
Delphi DocWiki: ShortString retired
- NativeXml fix v3.269
- Fixed support for non-default code page string data in UTF-8 attributes, i.e. non-Windows-1252 content on an English-US system.
Source: NativeXml.pas in ZaphodsMap repo on sf.net
- Compiles for D22..D25 including LINUX64 with Delphi 10.2 Tokyo
- ZaphodsMap v3.269
- Compiles for D22..D25 including LINUX64 with Delphi 10.2
- CodeSiteInterface v3.269
- Compiles for D22..D25 including LINUX64 with Delphi 10.2 but CodeSite itself is not available for Linux as of March 2017.
Output will go to a text .log file on Linux.
- Source moved from ucCodeSiteInterface in TPack to
ZM_CodeSiteInterface.pas which is open-source and part of the ZaphodsMap project on SourceForge.
- If you wish to make your units compile in v3.268 and in v3.269 depending on which version of WebHub you have active,
consider this code, which works in any PAS but not in a DPR uses clause:
implementation
uses
whBuildInfo, // uses whBuild (DCU not PAS)
{$IF cWebHubVersion >= 3.268}
ZM_CodeSiteInterface,
{$ELSE}
ucCodeSiteInterface, // compiles in v3.268
{$IFEND}
// etc.
- Phase out AnsiString, AnsiChar, PAnsiChar where possible v3.269
- Removed AppendToLogA (source ucLogFil.pas)
- TtpSharedBuf: removed GlobalAnsiString (source tpShareB.pas)
- TSharedObj uses GlobalUTF8String not GlobalAnsiString (source tpShareBObj.pas)
- UTF8 String Utility Functions v3.269
- There were some duplicate functions in ucString.pas, ucString8.pas and UTF8StringUtils.pas. The duplicates have been removed from ucString8.pas.
This includes: UTF8Length, UTF8Trim, StripUTF8BOM. StripUTF8BOM can be used from the ZM_UTF8StringUtils unit.
- Source for ZM_UTF8StringUtils.pas is in the ZaphodsMap repository on Source Forge and licensed under Creative Commons.
- Some of the UTF8 functions are available in the WideStrUtils.pas unit published by Embarcadero. These have been removed
from ZaphodsMap, TPack and WebHub. This includes: UTF8UpperCase, UTF8LowerAZ (named UTF8LowerCase in the Embarcadero unit).
- Stream I/O v3.269
- The internal functions in TtpStream have been refactored for D24 and D25; this was optional for D24 and required in D25.
Source: tpStreams.pas
- Logging Utility Functions v3.269
- Moved to ZM_LoggingBase.pas in ZaphodsMap: DatedFilename, SetLogFolder.
- HREFTestLog is available as ZM_TextLog in ZM_LoggingBase, with the same parameters. HREFTestLog remains in ucLogFil and
calls ZM_TextLog internally.
- ExportLingvo v3.269
- Take ExportLingvo into account when making GO and JUMP links to pages with ExportURLPrefix containing Lingvo.
- Obsolete units v3.269
- Removed units: ucAnsiUtil, ucConvertStrings, ucLatin
- Change calls from ucAnsiUtil.AnsiCodePageToUTF8 to WideStrUtils.AnsiToUtf8Ex.
- Installer: Delphi Running v3.269
- Fixed: a/v during Setup of WebHub Components except in Silent mode, on some systems, when checking whether the Delphi IDE was running.
- Credit: NsProcess_plugin
- HIDE command v3.269
- Corrected long-time issue with the HIDE command when optional tags were used. Source: webApp.pas.
- Borland Database Engine "BDE" support v3.269
- WebHub v3.269 supports the BDE with compilers D22 and D25, on win32 only.
(
top)
The Hub
- Cookies v3.269
- Cookie Names are not longer forced to uppercase.
- ZMAdmin v3.269
- ZMAdmin has been recompiled with D25 and the latest ZaphodsMap source. That win64 binary is NOT included with WebHub because the treeview
icons are not perfect. Nonetheless you may download the win64 binary separately from
HREFTools-MiscUtil-ZMAdmin-v1.2.0.0-64bit-ZMAdmin.exe. ZMAdmin v1.2.0.0 scales reasonably well on HD and 4k monitors; the main GUI problem is the missing icons in the treeview.
- This version of ZMAdmin works with files on non-NTFS storage drives including but not limited to (a) CloudBerry Drive with AWS S3 and (b)
ZFS shared by VirtualBox from an Ubuntu 16.04 Host OS to a Windows 10 Pro Guest OS.
- Recent versions of ZaphodsMap and WebHub have all supported such non-NTFS drives but the older ZMAdmin.exe does not.
Notes about Using a CloudBerry Drive for "D:" with WebHub
At issue: is it worth saving money by avoiding an EC2 volume and instead using an AWS S3 bucket mounted by CloudBerry Drive?
Overall: it does not seem fast enough to warrant the cost savings and configuration difficulties.
As of 11.Apr.2017, on the demo servers, HREF Tools plans to use AWS S3 only to hold the Delphi Redist files and the WebHub libraries,
i.e. BPL and DLL files, plus the Downloads archive. Reasons follow.
- NB: AWS S3 is case-sensitive even when mounted into a Windows system.
- NB: AWS S3 has no NTFS permissions even when mounted into a Windows system.
- StreamCatcher: paths in SCConfig_Security.cfg are case-sensitive. StreamCatcher reports involve significant disk i/o and can slow IIS down
if written to a distant disk.
- SVN: TortoiseSVN must be installed on C if you want integration with Windows File Explorer.
- SVN: path to CollabNet svn.exe is case-sensitive when used in BAT files. CollabNet requires the OpenSSL libraries and those
filespecs are case-sensitive.
- It will not be possible to use MIDAS.DLL loaded from a library path on an S3 drive. Change the Delphi PAS to uses MidasLib to avoid
the problem with uppercase DLL filenames.
- LetsEncrypt does not work on AWS S3 CloudDrive. It does work if copied to C or any EC2 volume.
- IIS ping to domain with root on CloudDrive can timeout easily.
- File Rename operations frequently fail with CloudDrive yet succeed reliably with CloudBerry Explorer.
- IIS does not reliably load the Default Document when it is in a CloudDrive. IIS does not reliably implement the Directory Browse feature
when the folder is in a CloudDrive.
- Overall, AWS S3 mounted by CloudBerry Drive is not as fast as using an EC2 SSD volume, but, it can be
cheaper in the long run, depending on exactly how it is used. Details may vary significantly by use case so please
test yourself before deciding to use AWS S3 storage for a production server.
Serving large static files directly through AWS CloudFront (not CloudDrive) is preferable in most situations.
(
top)
WebHub Runners
- Stability, Speed v3.260
- Fixed: iisreset after use of pages served directly by the runner (echo, cover pages, etc) no longer times out on the reset action.
- Fixed: More than 1000 requests within the runner timeout period (e.g. 30 seconds).
- Stability v3.261
- Fixed: AppNotRunning response as first request while Hub running but app closed: no crash within Microsoft IIS.
- Stability v3.262
- Fixed: status 302 reply supported
- Fixed: super fast response by custom app before runner thread has returned control to IIS — is now supported.
This was happening on an EC2 Nano machine in the Sydney data center.
- Known Issue: File Upload v3.25x .. v3.267
- Depending on the size of files uploaded with a standard multipart form,
additional data fields may not be recognized by WebHub if they are placed
in the form after the <input type="file"_tag>. To workaround this, place all fields including hidden fields before.
- Status 301 and 302 BOUNCE v3.267
- There is no longer a need to use the advanced runner flag
hseurl
as of this release.
- Confirmation demo page: db.demos.href.com/htfs:pgBounceTestB2
- Forced AppID v3.269
- The forced AppID feature now excludes requests to 'r' such as 'r:echo'.
(
top)