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 App-Level Config File > Settings > Situation PageIDs.
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)