SNode.C
Loading...
Searching...
No Matches
VHost.cpp
Go to the documentation of this file.
1/*
2 * SNode.C - a slim toolkit for network communication
3 * Copyright (C) Volker Christian <me@vchrist.at>
4 * 2020, 2021, 2022, 2023, 2024, 2025
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include "express/middleware/VHost.h"
21
22#ifndef DOXYGEN_SHOULD_SKIP_THIS
23
24#endif /* DOXYGEN_SHOULD_SKIP_THIS */
25
26namespace express::middleware {
27
28 VHost::VHost(const std::string& host)
29 : host(host) {
30 use([&host = this->host] MIDDLEWARE(req, res, next) {
31 if (req->get("Host") == host) {
32 next();
33 } else {
34 next("router");
35 }
36 });
37 }
38
39 class VHost& VHost::instance(const std::string& host) {
40 // Keep all created vhost middlewares alive
41 static std::map<std::string, std::shared_ptr<class VHost>> vHostMiddlewares;
42
43 if (!vHostMiddlewares.contains(host)) {
44 vHostMiddlewares[host] = std::shared_ptr<VHost>(new VHost(host));
45 }
46
47 return *vHostMiddlewares[host];
48 }
49
50 // "Constructor" of StaticMiddleware
51 class VHost& VHost(const std::string& host) {
52 return VHost::instance(host);
53 }
54
55} // namespace express::middleware
#define MIDDLEWARE(req, res, next)
Definition Router.h:40
VHost(const std::string &host)
Definition VHost.cpp:28