1 /**
2  * Модуль общих абстракций middleware web приложения
3  *
4  * Copyright: (c) 2015-2020, Milofon Project.
5  * License: Subject to the terms of the BSD 3-Clause License, as written in the included LICENSE.md file.
6  * Author: <m.galanin@milofon.pro> Maksim Galanin
7  * Date: 2020-04-30
8  */
9 
10 module dango.web.middleware;
11 
12 public
13 {
14     import uniconf.core : UniConf;
15     import vibe.http.server : HTTPServerRequest, HTTPServerResponse,
16             HTTPServerRequestDelegate, HTTPMethod;
17     import dango.inject : DependencyContainer;
18 }
19 
20 private
21 {
22     import vibe.http.server;
23 
24     import dango.inject : ComponentFactory;
25 }
26 
27 
28 /// Функция регистрации обработчика
29 alias RegisterHandlerCallback = void delegate(HTTPMethod, string,
30         HTTPServerRequestDelegate) @safe;
31 
32 /// Фабрика web middleware
33 alias WebMiddlewareFactory = ComponentFactory!(WebMiddleware, DependencyContainer, UniConf);
34 
35 
36 /**
37  * Интерфейс для Middleware HTTP
38  * Позволяет производить предобработку входязих запросов
39  */
40 interface WebMiddleware
41 {
42     /**
43      * Обработка запроса
44      */
45     void handleRequest(scope HTTPServerRequest req, scope HTTPServerResponse res,
46             HTTPServerRequestDelegate next) @safe;
47 
48     /**
49      * Регистрация цепочек маршрутов middleware
50      * На каждый обработчик формируется вызов dg
51      * Params:
52      * dg = Функция регистрации цепочки
53      */
54     void registerHandlers(HTTPMethod method, string path, RegisterHandlerCallback dg) @safe;
55 }
56