Releases: HashLoad/horse
3.1.6
⭐ e52a0b2 Adicionado o "detail" em EHorseException.ToJSONObject
Added "detail" on EHorseException.ToJSONObject
⭐ 95ed98c Adicionado o middleware Horse-XMLDoc
Add new middleware Horse-XMLDoc
⭐ 2679601 Adicionado MaxConnections no módulo Apache
Added MaxConnections on Apache mode
⭐ 815933a Adicionado métodos virtuais
Added virtual methods
🔺fbe9025 Correção de memory leaks
Bug fix: memory leak
🔺e53c485 Correção na opção Apache Module
Bug fix: Apache module option
🔺abf8c10 Correção de erro mime types
Bug fix: horse mime types
3.1.5
3.1.4
-
⭐ 26ca310 Overload do método construtor com opção para informar o erro
Created a overload constructor with string parameter -
⭐ 24dc9b2 3589a8d Adicionado Contains, StartsWith e EndsWith no LHS Brackets
Add new LHS Brackets: Contains, StartsWith and EndsWith -
⭐ 5b7065a Adicionado a property Detail e adicionado o método ToJsonObject
Added Detail property and ToJsonObject method -
🔺 a63094c Hotfix Correção do Get Environment Variables usando Delphi para Linux
Get Environment Variables using Delphi for Linux -
🔺 0d839f9 Correção de erro no provider VCL (Alexandre Magno)
Bug fix VCL provider (Alexandre Magno) -
🔺 8e26696 Correção do uses na unit Horse.Exception para FPC
Fix uses clause of Horse.Exception when FPC is defined
3.1.3
3.1.2
3.1.1
-
⭐ b0bea0f #330 Horse.Exception - Preencher propriedade Message
Horse.Exception - Populate Message property -
🔺 e99d380 #332 - Alterando a comparação de String.IsEmpty para igual a EmptyStr, para compatibilidade com Delphi 10 Seattle
Changing comparison of String.IsEmpty to equal EmptyStr, for compatibility with Delphi 10 Seattle
3.1.0
Horse 3.1.0
-
⭐ b917126 Nova unit Horse.Mime que implementa a classe THorseMimeTypes responsável por retornar o tipo MIME associado à extensão de um arquivo
New Horse.Mime unit that implements the THorseMimeTypes class responsible for returning the MIME type associated with a file extension -
⭐ 7d2e174 Adicionado a opção de poder trabalhar com regex nas rotas
Added the option to work with regex on routes
THorse.Get('/(discussion|page)/:id',
procedure(Req: THorseRequest; Res: THorseResponse)
begin
Res.Send('Hello - ID: ' + Req.Params.Items['id']);
end);
THorse.Get('/(\d{5})',
procedure(Req: THorseRequest; Res: THorseResponse)
begin
Res.Send('Hello - ID: ' + Req.RawWebRequest.PathInfo);
end);
- ⭐ ed21e21 Adicionado o KeepAlive no provider VCL, LCL e DAEMON
Added KeepAlive in VCL, LCL and DAEMON provider
THorse.KeepConnectionAlive := True;
- ⭐ c235bca Adicionado as propriedades CipherList e DHParamsFile (Diffie–Hellman) na IOHandleSSL
Added Cipher List and DHParams File (Diffie–Hellman) properties in IOHandleSSL
THorse.IOHandleSSL
.DHParamsFile('')
.CipherList('');
- ⭐ a95e9b7 Adição do campo Hint na classe de exceção EHorseException, para descrever a solução do erro
Added a Hint field in the EHorseException exception class to describe the error solution
raise EHorseException.New.Hint('');
- ⭐ e5dc69c Possibilidade de excluir um header do response
Possibility to exclude a response header
Res.RemoveHeader('');
- ⭐ 413a104 Endpoint genérico para responder a qualquer chamada não registrada
Generic endpoint to answer any unregistered call
THorse.All('*',
procedure(Req: THorseRequest; Res: THorseResponse)
begin
Res.Send(Req.PathInfo);
end);
- ⭐ ae4b30f Adicionada as funções Host, PathInfo e ContentType na THorseRequest
Added Host, PathInfo and ContentType functions in THorseRequest
Req.Host;
Req.PathInfo;
Req.ContentType;
-
✔ f29a9f9 Refatoração da unit Horse.Core.Files para utilização da classe THorseMimeTypes da unit Horse.Mime
Refactoring of the Horse.Core.Files unit to use the THorseMimeTypes class of the Horse.Mime unit -
✔ 73b6bd0 Refatoração da unit Horse.Response para utilização da classe THorseMimeTypes da unit Horse.Mime
Refactoring of the Horse.Response unit to use the THorseMimeTypes class of the Horse.Mime unit -
✔ 378af0a Melhorias no código
Code improvements -
✔ dcb1b63 Agora o Horse vai definir o position igual a zero por padrão na função SendFile e a passagem do nome do arquivo se tornou opcional
Now Horse will set position equal to zero by default in the SendFile function and passing the file name has become optional -
✔ b15e333 Agora o Horse vai definir o position igual a zero por padrão na função Download
Now Horse will set the position equal to zero by default in the Download function -
✔ 6c6be4f Implementação da interface IHorseProviderIOHandleSSL e refatoração do código
Implementing the IHorseProviderIOHandleSSL interface and refactoring the code
// Antes / Old
THorse.IOHandleSSL.KeyFile := leKey.Text;
THorse.IOHandleSSL.CertFile := leCrt.Text;
THorse.IOHandleSSL.OnGetPassword := Self.OnGetPassword;
THorse.IOHandleSSL.SSLVersions := [sslvTLSv1_2];
THorse.IOHandleSSL.Active := True;
// Agora / New
THorse.IOHandleSSL
.KeyFile(leKey.Text)
.CertFile(leCrt.Text)
.OnGetPassword(Self.OnGetPassword)
.SSLVersions([sslvTLSv1_2])
.Active(True);
-
✔ 14e88c6 Adicionado um atalho para a classe THorseMimeTypes na unit principal do Horse
Added a shortcut for the THorseMimeTypes class in the main Horse unit -
✔ b0bea0f Preenchimento da propriedade Message ao definir o erro de uma exceção do Horse
Completion of the Message property when defining the error of a Horse exception -
✔ 8794e0f Ajustes dos exemplos e remoção de hints e warnings do Horse no lazarus
Example tweaks and removal of Horse hints and warnings in lazarus -
✔ be629fb Remoção de Hints
Removing Hints -
✔ 8684650 Remoção do parâmetro no callback do THorse.Listen
Removal of the parameter in the THorse.Listen callback
// Antes / Old
THorse.Listen(9000,
procedure(Horse: THorse)
begin
Writeln(Format('Server is runing on %s:%d', [Horse.Host, Horse.Port]));
Readln;
end);
// Agora / New
THorse.Listen(9000,
procedure
begin
Writeln(Format('Server is runing on %s:%d', [THorse.Host, THorse.Port]));
Readln;
end);
-
✔ ee33a2a eb995d4 Alterações referentes ao novo FPC
Changes related to the new FPC -
🔺 9678960 Ajustes na unit Horse.Provider.FPC.LCL para não congelar a tela quando executar (Contribuição do Alexandre Magno)
Adjustments in the Horse.Provider.FPC.LCL unit to not freeze the screen when running (Contributed by Alexandre Magno) -
🔺 76dc02e Correção da falha ao ler os headers no Apache com Delphi
Fixed crash when reading headers in Apache with Delphi -
🔺 d69190e Ajustes para compilação no Lazarus
Lazarus build tweaks -
🔺 cc35d4d Correção do erro ao ler os parâmetros do formulário no Delphi Seattle
Fixed error when reading form parameters in Delphi Seattle -
🔺 039bbe0 118dcc1 Correção no exemplo para definição das rotas
Correction in the example for defining routes -
🔺 be376bc 5d43ba6 Correção do erro ao ler os headers no CGI
Fixed error when reading headers in CGI -
🔺 b6e3ea5 f63e3db 2251914 Correção na leitura do PathInfo com CGI quando o PathInfo estiver vazio
Fix for reading PathInfo with CGI when PathInfo is empty
Jhonson
- 🔺 8d6b590280d9237b82db059b8055d8098665a0ce Correção na verificação do ContentType
Fixed ContentType check
Basic Authentication
- 🔺 0cd4d3f7feadaaafb255a667f1182e121fae6d9c O header de autenticação no módulo Apache deve ser lido de "Raw WebRequest"
The authentication Header under Apache Module must be readed from "RawWebRequest"
JWT
-
⭐ 3849b9ca43ca3373b81809e98a43a35bf3780cb8 Exemplo do Lazarus para criar assinatura JWT
Lazarus sample to create JWT signature -
⭐ 24f1f43166291f08e1c2cf02000ec9b93680bfbf 2e45888efa022fac5a554c1eab0d46c74ef67311 JWT com multichamada
JWT with multicall -
⭐ 14f5b7f130938b5bb36883459622dc6354cdade8 Compatibilidade com o novo FPC
Mode switch function references for new FPC -
⭐ c70f3fb358211a5b53f1bbacfcddc18ac29a9159 edb53ec107d2f6028a350367b3da3e8d781eccea Validação para várias rotas
Validation for multiples routes -
✔ 5d34226ce6f0cbd64908db892a47b8fd6870bb08 37daa990f44720d4b32de130affcc3fa81191e6f 450a4572c8008b6774cdac34e22d9bfca0a32b45 be02a6d5ad127251b9c54037bfebbcb980f90a19 dddd919f246ba473783171f4dae54033ed4aa517 Refatoração
Refactoring -
✔ 4dcd37abf53d5568a47b35c38db84a26ba8197e2 b1ecfa5e588e3a5b0ad1cd5b703543567c360f45 Remoção de linhas em branco
Removing some blank lines -
✔ aa5d3f9c3d600234b2fae471d6a26584e9e4d69a Exemplo de sessão
Session example -
🔺 2b457baa4d614e8ef67332029e77ed1c6081cfff Revertendo o código-fonte para compatibilidade com Lazarus, correção de vazamento e refatoração de código
Rolling back source code for lazarus compatibility, leak fix and code refactoring
Exception
- ✔ [c2186f9d78310aa8ebb864401ac8ead008d85bb2](https://git...
3.0.2
Horse 3.0.2
- ⭐ f6cbe82 Suporte ao LHS Brackets
LHS Brackets support
Example: http://localhost:9000/ping?test[eq]=1234&test[lt]=321&test[ne]=111
procedure GetPing(Req: THorseRequest; Res: THorseResponse);
var
LPong: TJSONArray;
LLhsBracketType: TLhsBracketsType;
LJson: TJSONObject;
begin
THorseCoreParamConfig.GetInstance.CheckLhsBrackets(True);
LPong := TJSONArray.Create;
for LLhsBracketType in Req.Query.Field('test').LhsBrackets.Types do
begin
LJson := TJSONObject.Create;
LJson.Add(Format('test %s =', [LLhsBracketType.ToString]) , Req.Query.Field('test').LhsBrackets.GetValue(LLhsBracketType));
LPong.Add(LJson);
end;
Res.Send(LPong.AsJSON);
end;
- ⭐ f3650b7 Opção para pegar o ContentField como Stream
Option to get ContentField as Stream
Req.ContentFields.Field('paramName').AsStream;
- ⭐ 6777a47 Opção para salvar ContentField como arquivo
Option to save ContentField as file
Req.ContentFields.Field('paramName').SaveToFile('C:\file.txt');
- ⭐ 9a11717 Possibilidade de adicionar um Header sem acessar o RawWebResponse
Possibility to add a Header without accessing RawWebResponse
// before
Res.RawWebResponse.SetCustomHeader('', '');
// after
Res.AddHeader('', '');
- ⭐ c415c52 Possibilidade de passar apenas os parâmetros necessários no callback dos endpoints no Lazarus
Possibility to pass only the necessary parameters in the callback of the endpoints in Lazarus
procedure GetPing(Req: THorseRequest; Res: THorseResponse; Next: TNextProc);
begin
Res.Send('Req, Res, Next');
end;
procedure GetPing1(Req: THorseRequest; Res: THorseResponse);
begin
Res.Send('Req, Res');
end;
procedure GetPing2(Req: THorseRequest);
begin
WriteLn('Req');
end;
begin
THorse.Get('/ping', GetPing);
THorse.Get('/ping1', GetPing1);
THorse.Get('/ping2', GetPing2);
THorse.Listen(9000);
end.
- ⭐ 81ef2b6 Método "All" (Equivale a todos os verbos HTTP)
"All" method (Equivalent to all HTTP verbs)
THorse.All('/users', DoUsers);
- ⭐ b4151dd Novos métodos de retorno
New return methods
Res.SendFile('E:\temp\foto.jpg');
Res.Download('E:\temp\foto.jpg');
Res.Render('E:\Temp\Client.html');
- 🔺 edfc02c Correção da falha no SkipRoutes dos middlewares Basic Auth e JWT
Fixed SkipRoutes crash in Basic Auth and JWT middleware
3.0.1
Horse 3.0.1
- ⭐ 8f46ee3 Adicionado uma função para pegar a versão atual do framework Horse
Added a function to get the current version of the Horse framework
THorse.Version;
- ⭐ 0861472 Adicionado a opção de adicionar mais de um callback por rota
Added the option to add more than one callback per route
THorse
.AddCallbacks([Callback1, Callback2, Callback3])
.Get('/users', DoListUsers);
- ⭐ 079c9e6 Agora o THorse.Group aceita a passagem de callbacks sem a necessidade de informar todos os parâmetros (Req, Res e Next)
Now THorse.Group accepts passing callbacks without having to inform all parameters (Req, Res and Next) - ⭐ eab6232 Agora o THorse.Route aceita a passagem de callbacks sem a necessidade de informar todos os parâmetros (Req, Res e Next)
Now THorse.Route accepts passing callbacks without having to inform all parameters (Req, Res and Next) - ⭐ ecc1af6 #240 Adicionado os métodos TryGetSession e Contains na classe THorseSessions
Added TryGetSession and Contains methods in THorseSessions class - ✔️ b80baae 2c52506 Melhorias no código
Code improvements - ✔️ f40b1a0 Remoção da função GetDefaultInstance
Removed GetDefaultInstance function
3.0.0
Horse 3.0.0
Live de lançamento em português: Youtube
Launch live in Portuguese: Youtube
- ⭐#230 Adicionado um exemplo de como visualizar os memory leaks em uma aplicação console
Added an example of how to view memory leaks in a console application - ⭐Adicionado uma função para pegar a lista de headers enviados na requisição
Added a function to get the list of headers sent in the request
THorse.Get('/headers',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
LData: TJSONObject;
LHeader: TPair<string, string>;
begin
LData := TJSONObject.Create;
for LHeader in Req.Headers.ToArray do
LData.AddPair(LHeader.Key, LHeader.Value);
Res.Send(LData);
end);
- ⭐#178 Implementado uma classe de sessão (antigamente só tinha uma variável de sessão)
Implemented a session class (previously only had a session variable) - ⭐#225 Adicionado uma opção para pegar a instância do WebModule
Added an option to grab the WebModule instance - ⭐8f46ee3 Adicionado uma função que retorna a versão atual do Horse
Added a function that returns the current version of Horse - ✔️Alterado a forma de passar um middleware para uma rota específica
Changed the way to pass a middleware to a specific route - ✔️facab07 Remoção de deprecated (THorseHackRequest, THorseHackResponse)
Removal of deprecated (THorseHackRequest, THorseHackResponse) - ✔️Os parâmetros (path, query e headers) não são mais case sensitive
Parameters (path, query and headers) are no longer case sensitive - ✔️Os parâmetros (path, query e headers) não são mais do tipo THorseList
Parameters (path, query and headers) are no longer of type THorseList - ✔️Possibilidade de informar no callback do Horse, em projetos Delphi, apenas o que for usar
Possibility to inform in the Horse callback, in Delphi projects, only what to use
THorse.Get('/requests',
procedure(Req: THorseRequest)
begin
// default status code 204 NoContent
end);
THorse.Get('/responses',
procedure(Res: THorseResponse)
begin
Res.Send('ok');
end);
THorse.Get('/requests/responses',
procedure(Req: THorseRequest; Res: THorseResponse)
begin
Res.Send('ok');
end);
- ✔️a490433 Alteração na classe EHorseException
Change in the EHorseException class - 🔺Erro quando na requisição vinha dois parâmetros com o mesmo nome
Error when the request came with two parameters with the same name
http://localhost:9000/ping?nome=vinicius&nome=sanchez
Jhonson
- ✔️HashLoad/jhonson#12 Tratamento para verificar se o JSON é um JSON válido
Handling to check if JSON is valid JSON
horse-basic-auth
- ⭐HashLoad/horse-basic-auth@3180ae9 Exemplo rodando no Lazarus
Example running on Lazarus - ⭐HashLoad/horse-basic-auth@d3513cc Implementado a opção para ignorar rotas
Implemented option to ignore routes - 🔺HashLoad/horse-basic-auth@bdd7153 Ajustado erro no ISAPI
Fixed error in ISAPI - 🔺HashLoad/horse-basic-auth@3dbe145 Quando o usuário tinha um espaço, a autenticação apresentava erro
When the user had a space, authentication got an error - 🔺HashLoad/horse-basic-auth#10 Authentication not found in Apache 2.2.x
Authentication not found in Apache 2.2.x
horse-octet-stream
- ✔️Melhoria na documentação (Github)
Improved documentation (Github)
horse-cors
- ⭐HashLoad/horse-cors#6 Exemplo rodando no Lazarus
Example running on Lazarus - ⭐HashLoad/horse-cors#5 Exemplo rodando no Delphi
Example running in Delphi - ✔️Melhoria na documentação (Github)
Improved documentation (Github)
horse-logger
- ✔️Melhoria na documentação (Github)
Improved documentation (Github)
horse-logger-provider-logfile
- ⭐HashLoad/horse-logger#10 Adicionado a opção para pegar o content da requisição e da resposta na geração do log
Added option to get request and response content in log generation - ✔️Melhoria na documentação (Github)
Improved documentation (Github) - ✔️HashLoad/horse-logger-provider-logfile@a756640 Criação do diretório para salvar o arquivo de forma automática caso não exista
Creating the directory to automatically save the file if it does not exist
horse-logger-provider-console
- ⭐HashLoad/horse-logger#10 Adicionado a opção para pegar o content da requisição e da resposta na geração do log
Added option to get request and response content in log generation - ✔️Melhoria na documentação (Github)
Improved documentation (Github)
handle-exception
- ⭐HashLoad/handle-exception@aa6c992 Exemplo rodando no Lazarus
Example running on Lazarus - ✔️Melhoria na documentação (Github)
Improved documentation (Github) - 🔺HashLoad/handle-exception@5f21d3c Manter o status code quando informado
Maintain status code when informed
horse-compression
- ⭐HashLoad/horse-compression@72d05bc Exemplo rodando no Lazarus
Example running on Lazarus - ⭐HashLoad/horse-compression@64dce70 Compressão de strings
String compression - ✔️Melhoria na documentação (Github)
Improved documentation (Github) - 🔺HashLoad/horse-compression@4ed28e0 Verificação se existe o header Accept-Encoding
Check if Accept-Encoding header exists
horse-jwt
- ⭐HashLoad/horse-jwt@243fa47 Implementado a opção para ignorar rotas
Implemented option to ignore routes - ⭐HashLoad/horse-jwt#23 Implementado a compatibilidade com Lazarus
Implemented support for Lazarus - ✔️HashLoad/horse-jwt@6baf5d5 Alteração na interface IHorseConfigJWT
Change in the IHorseConfigJWT interface - ✔️Melhoria na documentação (Github)
Improved documentation (Github) - 🔺HashLoad/horse-jwt@1e678ad Quando informado mais de um espaço entre o Bearer e o Token
When informed more than one space between the Bearer and the Token