Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EHorseCallbackInterrupted retornando 404. #376

Closed
MaxNstk opened this issue Jan 22, 2024 · 2 comments
Closed

EHorseCallbackInterrupted retornando 404. #376

MaxNstk opened this issue Jan 22, 2024 · 2 comments

Comments

@MaxNstk
Copy link

MaxNstk commented Jan 22, 2024

Bom dia, estou criando um CallBack personalizado para validar alguns tipos de API que precisam que o usuário seja Administrador. Para isso estou utilizando o JWT Token em conjunto com os Claims para captura do token e recuperação de usuário. Tudo funciona perfeitamente, entretanto, ao criar a excessão EHorseCallbackInterrupted passando minha mensagem, ele retorna um 404 Not found no retorno da API. Ps, tenho outros callbacks que funcionam perfeitamente. (Com propósitos diferentes). O código a seguir é a implementação do meu CallBack. A lógica dentro dele funciona perfeitamente. Em seguida o código do callback do jwt, do qual usei como base para minha suposição.

function SupervisorRequest: THorseCallback;
begin
Result := procedure(Req: THorseRequest; Res: THorseResponse; Next: {$IF DEFINED(FPC)}TNextProc{$ELSE}TProc{$ENDIF})
begin
try
if not TUsuarioController.CriarComCodigoOuNome(
Req.Session.IdUsuario
).GetUsuario.Supervisor then
begin
Res.Send('Não autorizado, é necessário um usuário supervisor').Status(THTTPStatus.Unauthorized);
raise EHorseCallbackInterrupted.Create('Unauthorized');
end
else
Next;
except
on E: EHorseCallbackInterrupted do
raise;
on E: Exception do
begin
TLog.Log('Exception em SupervisorRequest: '+E.Message, Req);
raise EHorseCallbackInterrupted.Create('Unauthorized');
end;
end;
end;
end;

Dentro do Middleware, Horse.JTW ele tem o seguinte retorno em diversos locais, entretanto, a resposta deles é 401 e com a mensagem criada:
except
on E: EHorseCallbackInterrupted do
raise;
on E: Exception do
begin
AHorseResponse.Send('Invalid token authorization. ' + E.Message).Status(THTTPStatus.Unauthorized);
raise EHorseCallbackInterrupted.Create;
end;
end;

Ps. Delphi 10.4
stock_app_ws:
├── horse-logger@2.0.7
│ ├── horse-utils-clientip@0.0.8
│ │ └── horse@3.1.5
│ └── horse@3.1.5
├── jhonson@1.1.8
│ └── horse@3.1.5
├── handle-exception@0.1.9
│ ├── horse@3.1.5
│ └── jhonson@1.1.8
│ └── horse@3.1.5
├── horse@3.1.5
├── horse-compression@1.1.11
│ └── horse@3.1.5
└── horse-jwt@2.0.14
├── horse@3.1.5
├── delphi-jose-jwt@v3.3.0
└── hashlib4pascal@1.0.0

@MaxNstk
Copy link
Author

MaxNstk commented Jan 26, 2024

Descobri, o meu problema era a sequencia em que os Middlewares eram vinculados. HandleException deveria vir antes do meu middleware.

@MaxNstk MaxNstk closed this as completed Jan 26, 2024
@viniciussanchez
Copy link
Member

@MaxNstk desculpa a demora... e obrigado por dar o feedback de como resolveu... pode ajudar outros que tiverem problema com isso... vlw

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants