From 7c89df545d94e2331cf75369cabca2eaf9995c0e Mon Sep 17 00:00:00 2001 From: Daniele Teti Date: Mon, 23 Dec 2019 18:37:28 +0100 Subject: [PATCH] Middleware Trace --- README.md | 2 + delphimvcframework_handbook_cover.png | Bin 0 -> 73092 bytes sources/MVCFramework.Middleware.Trace.pas | 102 ++++++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 delphimvcframework_handbook_cover.png create mode 100644 sources/MVCFramework.Middleware.Trace.pas diff --git a/README.md b/README.md index 2e2dff56..14d04316 100644 --- a/README.md +++ b/README.md @@ -249,6 +249,8 @@ end; - Fixed! [issue232](https://github.com/danieleteti/delphimvcframework/issues/232) (Thanks to [João Antônio Duarte](https://github.com/joaoduarte19)) +- Fixed! [issue312](https://github.com/danieleteti/delphimvcframework/issues/312) + - New Installation procedure! - Open the project group (select the correct one from the following table) diff --git a/delphimvcframework_handbook_cover.png b/delphimvcframework_handbook_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..e4d9652bad9086f74dcd85e1ff6c8c3e0f3b5f4a GIT binary patch literal 73092 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

u*h}~T{ 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 literal 0 HcmV?d00001 diff --git a/sources/MVCFramework.Middleware.Trace.pas b/sources/MVCFramework.Middleware.Trace.pas new file mode 100644 index 00000000..70a35a30 --- /dev/null +++ b/sources/MVCFramework.Middleware.Trace.pas @@ -0,0 +1,102 @@ +// *************************************************************************** +// +// Delphi MVC Framework +// +// Copyright (c) 2010-2019 Daniele Teti and the DMVCFramework Team +// +// https://github.com/danieleteti/delphimvcframework +// +// *************************************************************************** +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// *************************************************************************** } + +unit MVCFramework.Middleware.Trace; + +{$I dmvcframework.inc} + +interface + +uses + MVCFramework, + MVCFramework.Logger; + +type + TMVCTraceMiddleware = class(TInterfacedObject, IMVCMiddleware) + protected + procedure OnAfterControllerAction(Context: TWebContext; const AActionNAme: string; + const Handled: Boolean); + procedure OnBeforeRouting(Context: TWebContext; var Handled: Boolean); + procedure OnBeforeControllerAction(Context: TWebContext; + const AControllerQualifiedClassName: string; const AActionNAme: string; var Handled: Boolean); + end; + +implementation + +uses + System.SysUtils, + System.ZLib, + System.Classes, + MVCFramework.Commons, Web.HTTPApp; + +{ TMVCSalutationMiddleware } + +procedure TMVCTraceMiddleware.OnAfterControllerAction(Context: TWebContext; + const AActionNAme: string; const Handled: Boolean); +var + lContentStream: TStringStream; +begin + lContentStream := TStringStream.Create; + try + Log.Debug('[RESPONSE][HEADERS] ' + string.Join(' | ', Context.Response.CustomHeaders.ToStringArray), 'trace'); + if Assigned(Context.Response.RawWebResponse.ContentStream) then + begin + lContentStream.CopyFrom(Context.Response.RawWebResponse.ContentStream, 0); + Context.Response.RawWebResponse.ContentStream.Position := 0; + end + else + begin + lContentStream.WriteString(Context.Response.RawWebResponse.Content); + end; + Log.Debug('[RESPONSE][BODY] ' + lContentStream.DataString, 'trace'); + finally + lContentStream.Free; + end; +end; + +procedure TMVCTraceMiddleware.OnBeforeControllerAction(Context: TWebContext; + const AControllerQualifiedClassName, AActionNAme: string; var Handled: Boolean); +begin + Log.Debug('[BEFORE ACTION][CONTROLLER: %s][ACTION: %s]', + [AControllerQualifiedClassName, AActionNAme], 'trace'); +end; + +procedure TMVCTraceMiddleware.OnBeforeRouting(Context: TWebContext; var Handled: Boolean); +var + lContentStream: TStringStream; +begin + lContentStream := TStringStream.Create; + try + Context.Request.RawWebRequest.ReadTotalContent; + Log.Debug('[REQUEST][URL] ' + Context.Request.RawWebRequest.PathInfo, 'trace'); + Log.Debug('[REQUEST][QUERYSTRING] ' + Context.Request.RawWebRequest.QueryFields.DelimitedText, 'trace'); + lContentStream.WriteString(EncodingGetString(Context.Request.Headers['content-type'], + Context.Request.RawWebRequest.RawContent)); + Log.Debug('[REQUEST][BODY] ' + lContentStream.DataString, 'trace'); + finally + lContentStream.Free; + end; +end; + +end.