|  |  |  | @@ -2395,10 +2395,10 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  |                                                             Poco::Logger & L, RESTAPI_GenericServer & S); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	class RESTAPI_server : public SubSystemServer { | 
		
	
		
			
				|  |  |  |  | 	class RESTAPI_ExtServer : public SubSystemServer { | 
		
	
		
			
				|  |  |  |  | 	public: | 
		
	
		
			
				|  |  |  |  | 	    static RESTAPI_server *instance() { | 
		
	
		
			
				|  |  |  |  | 	        static RESTAPI_server *instance_ = new RESTAPI_server; | 
		
	
		
			
				|  |  |  |  | 	    static RESTAPI_ExtServer *instance() { | 
		
	
		
			
				|  |  |  |  | 	        static RESTAPI_ExtServer *instance_ = new RESTAPI_ExtServer; | 
		
	
		
			
				|  |  |  |  | 	        return instance_; | 
		
	
		
			
				|  |  |  |  | 	    } | 
		
	
		
			
				|  |  |  |  | 	    int Start() override; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -2412,7 +2412,7 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	    inline void reinitialize(Poco::Util::Application &self) override; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	    inline Poco::Net::HTTPRequestHandler *CallServer(const char *Path) { | 
		
	
		
			
				|  |  |  |  | 	    inline Poco::Net::HTTPRequestHandler *CallServer(const char *Path, uint64_t Id) { | 
		
	
		
			
				|  |  |  |  | 	        RESTAPIHandler::BindingMap Bindings; | 
		
	
		
			
				|  |  |  |  | 	        return RESTAPI_external_server(Path, Bindings, Logger_, Server_); | 
		
	
		
			
				|  |  |  |  | 	    } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -2422,19 +2422,19 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  | 	    Poco::ThreadPool	    Pool_; | 
		
	
		
			
				|  |  |  |  | 	    RESTAPI_GenericServer   Server_; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	    RESTAPI_server() noexcept: | 
		
	
		
			
				|  |  |  |  | 	    RESTAPI_ExtServer() noexcept: | 
		
	
		
			
				|  |  |  |  | 	    SubSystemServer("RESTAPIServer", "RESTAPIServer", "openwifi.restapi") | 
		
	
		
			
				|  |  |  |  |             { | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  | 	}; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	inline RESTAPI_server * RESTAPI_server() { return RESTAPI_server::instance(); }; | 
		
	
		
			
				|  |  |  |  | 	inline RESTAPI_ExtServer * RESTAPI_ExtServer() { return RESTAPI_ExtServer::instance(); }; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	class RequestHandlerFactory : public Poco::Net::HTTPRequestHandlerFactory { | 
		
	
		
			
				|  |  |  |  | 	class ExtRequestHandlerFactory : public Poco::Net::HTTPRequestHandlerFactory { | 
		
	
		
			
				|  |  |  |  | 	public: | 
		
	
		
			
				|  |  |  |  | 	    RequestHandlerFactory(RESTAPI_GenericServer & Server) : | 
		
	
		
			
				|  |  |  |  | 	    Logger_(RESTAPI_server::instance()->Logger()), | 
		
	
		
			
				|  |  |  |  | 	    Server_(Server) | 
		
	
		
			
				|  |  |  |  | 	  	explicit ExtRequestHandlerFactory(RESTAPI_GenericServer & Server) : | 
		
	
		
			
				|  |  |  |  | 			Logger_(RESTAPI_ExtServer::instance()->Logger()), | 
		
	
		
			
				|  |  |  |  | 			Server_(Server) | 
		
	
		
			
				|  |  |  |  | 	    { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	    } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -2442,15 +2442,16 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  | 	    inline Poco::Net::HTTPRequestHandler *createRequestHandler(const Poco::Net::HTTPServerRequest &Request) override { | 
		
	
		
			
				|  |  |  |  | 	        Poco::URI uri(Request.getURI()); | 
		
	
		
			
				|  |  |  |  | 	        auto *Path = uri.getPath().c_str(); | 
		
	
		
			
				|  |  |  |  | 	        return RESTAPI_server()->CallServer(Path); | 
		
	
		
			
				|  |  |  |  | 	        return RESTAPI_ExtServer()->CallServer(Path, TransactionId_++); | 
		
	
		
			
				|  |  |  |  | 	    } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	private: | 
		
	
		
			
				|  |  |  |  | 	    Poco::Logger            &Logger_; | 
		
	
		
			
				|  |  |  |  | 	    RESTAPI_GenericServer   &Server_; | 
		
	
		
			
				|  |  |  |  | 		static inline std::atomic_uint64_t  TransactionId_ = 1; | 
		
	
		
			
				|  |  |  |  | 	    Poco::Logger            			&Logger_; | 
		
	
		
			
				|  |  |  |  | 	    RESTAPI_GenericServer   			&Server_; | 
		
	
		
			
				|  |  |  |  | 	}; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	inline int RESTAPI_server::Start() { | 
		
	
		
			
				|  |  |  |  | 	inline int RESTAPI_ExtServer::Start() { | 
		
	
		
			
				|  |  |  |  | 	    Logger_.information("Starting."); | 
		
	
		
			
				|  |  |  |  | 	    Server_.InitLogging(); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @@ -2469,7 +2470,7 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  | 	        Params->setMaxQueued(200); | 
		
	
		
			
				|  |  |  |  | 	        Params->setKeepAlive(true); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	        auto NewServer = std::make_unique<Poco::Net::HTTPServer>(new RequestHandlerFactory(Server_), Pool_, Sock, Params); | 
		
	
		
			
				|  |  |  |  | 	        auto NewServer = std::make_unique<Poco::Net::HTTPServer>(new ExtRequestHandlerFactory(Server_), Pool_, Sock, Params); | 
		
	
		
			
				|  |  |  |  | 	        NewServer->start(); | 
		
	
		
			
				|  |  |  |  | 	        RESTServers_.push_back(std::move(NewServer)); | 
		
	
		
			
				|  |  |  |  | 	    } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -2477,11 +2478,11 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  | 	    return 0; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	class RESTAPI_InternalServer : public SubSystemServer { | 
		
	
		
			
				|  |  |  |  | 	class RESTAPI_IntServer : public SubSystemServer { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	public: | 
		
	
		
			
				|  |  |  |  | 	    static RESTAPI_InternalServer *instance() { | 
		
	
		
			
				|  |  |  |  | 	        static RESTAPI_InternalServer *instance_ = new RESTAPI_InternalServer; | 
		
	
		
			
				|  |  |  |  | 	    static RESTAPI_IntServer *instance() { | 
		
	
		
			
				|  |  |  |  | 	        static RESTAPI_IntServer *instance_ = new RESTAPI_IntServer; | 
		
	
		
			
				|  |  |  |  | 	        return instance_; | 
		
	
		
			
				|  |  |  |  | 	    } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @@ -2490,12 +2491,13 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  | 	        Logger_.information("Stopping "); | 
		
	
		
			
				|  |  |  |  | 	        for( const auto & svr : RESTServers_ ) | 
		
	
		
			
				|  |  |  |  | 	            svr->stop(); | 
		
	
		
			
				|  |  |  |  | 	        Pool_.stopAll(); | 
		
	
		
			
				|  |  |  |  | 			Pool_.joinAll(); | 
		
	
		
			
				|  |  |  |  | 			RESTServers_.clear(); | 
		
	
		
			
				|  |  |  |  | 	    } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	    inline void reinitialize(Poco::Util::Application &self) override; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	    inline Poco::Net::HTTPRequestHandler *CallServer(const char *Path) { | 
		
	
		
			
				|  |  |  |  | 	    inline Poco::Net::HTTPRequestHandler *CallServer(const char *Path, uint64_t Id) { | 
		
	
		
			
				|  |  |  |  | 	        RESTAPIHandler::BindingMap Bindings; | 
		
	
		
			
				|  |  |  |  | 	        return RESTAPI_internal_server(Path, Bindings, Logger_, Server_); | 
		
	
		
			
				|  |  |  |  | 	    } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -2504,30 +2506,31 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  | 	    Poco::ThreadPool	    Pool_; | 
		
	
		
			
				|  |  |  |  | 	    RESTAPI_GenericServer   Server_; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	    RESTAPI_InternalServer() noexcept: SubSystemServer("RESTAPIInternalServer", "REST-ISRV", "openwifi.internal.restapi") | 
		
	
		
			
				|  |  |  |  | 	    RESTAPI_IntServer() noexcept: SubSystemServer("RESTAPIInternalServer", "REST-ISRV", "openwifi.internal.restapi") | 
		
	
		
			
				|  |  |  |  | 	    { | 
		
	
		
			
				|  |  |  |  | 	    } | 
		
	
		
			
				|  |  |  |  | 	}; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	inline RESTAPI_InternalServer * RESTAPI_InternalServer() { return RESTAPI_InternalServer::instance(); }; | 
		
	
		
			
				|  |  |  |  | 	inline RESTAPI_IntServer * RESTAPI_IntServer() { return RESTAPI_IntServer::instance(); }; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	class InternalRequestHandlerFactory : public Poco::Net::HTTPRequestHandlerFactory { | 
		
	
		
			
				|  |  |  |  | 	class IntRequestHandlerFactory : public Poco::Net::HTTPRequestHandlerFactory { | 
		
	
		
			
				|  |  |  |  | 	public: | 
		
	
		
			
				|  |  |  |  | 	    InternalRequestHandlerFactory(RESTAPI_GenericServer & Server) : | 
		
	
		
			
				|  |  |  |  | 	    Logger_(RESTAPI_InternalServer()->Logger()), | 
		
	
		
			
				|  |  |  |  | 	  	explicit IntRequestHandlerFactory(RESTAPI_GenericServer & Server) : | 
		
	
		
			
				|  |  |  |  | 	    Logger_(RESTAPI_IntServer()->Logger()), | 
		
	
		
			
				|  |  |  |  | 	    Server_(Server){} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	    inline Poco::Net::HTTPRequestHandler *createRequestHandler(const Poco::Net::HTTPServerRequest &Request) override { | 
		
	
		
			
				|  |  |  |  | 	        Poco::URI uri(Request.getURI()); | 
		
	
		
			
				|  |  |  |  | 	        auto *Path = uri.getPath().c_str(); | 
		
	
		
			
				|  |  |  |  | 	        return RESTAPI_InternalServer()->CallServer(Path); | 
		
	
		
			
				|  |  |  |  | 	        return RESTAPI_IntServer()->CallServer(Path, TransactionId_++); | 
		
	
		
			
				|  |  |  |  | 	    } | 
		
	
		
			
				|  |  |  |  | 	private: | 
		
	
		
			
				|  |  |  |  | 		static inline std::atomic_uint64_t  TransactionId_ = 1; | 
		
	
		
			
				|  |  |  |  | 	    Poco::Logger    & Logger_; | 
		
	
		
			
				|  |  |  |  | 	    RESTAPI_GenericServer   & Server_; | 
		
	
		
			
				|  |  |  |  | 	}; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	inline int RESTAPI_InternalServer::Start() { | 
		
	
		
			
				|  |  |  |  | 	inline int RESTAPI_IntServer::Start() { | 
		
	
		
			
				|  |  |  |  | 	    Logger_.information("Starting."); | 
		
	
		
			
				|  |  |  |  | 	    Server_.InitLogging(); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @@ -2545,7 +2548,7 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  | 	        Params->setMaxQueued(200); | 
		
	
		
			
				|  |  |  |  | 	        Params->setKeepAlive(true); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	        auto NewServer = std::make_unique<Poco::Net::HTTPServer>(new InternalRequestHandlerFactory(Server_), Pool_, Sock, Params); | 
		
	
		
			
				|  |  |  |  | 	        auto NewServer = std::make_unique<Poco::Net::HTTPServer>(new IntRequestHandlerFactory(Server_), Pool_, Sock, Params); | 
		
	
		
			
				|  |  |  |  | 	        NewServer->start(); | 
		
	
		
			
				|  |  |  |  | 	        RESTServers_.push_back(std::move(NewServer)); | 
		
	
		
			
				|  |  |  |  | 	    } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -2826,8 +2829,8 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  | 	    // add the default services | 
		
	
		
			
				|  |  |  |  | 	    SubSystems_.push_back(KafkaManager()); | 
		
	
		
			
				|  |  |  |  | 	    SubSystems_.push_back(ALBHealthCheckServer()); | 
		
	
		
			
				|  |  |  |  | 	    SubSystems_.push_back(RESTAPI_server()); | 
		
	
		
			
				|  |  |  |  | 	    SubSystems_.push_back(RESTAPI_InternalServer()); | 
		
	
		
			
				|  |  |  |  | 	    SubSystems_.push_back(RESTAPI_ExtServer()); | 
		
	
		
			
				|  |  |  |  | 	    SubSystems_.push_back(RESTAPI_IntServer()); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	    Poco::Net::initializeSSL(); | 
		
	
		
			
				|  |  |  |  | 	    Poco::Net::HTTPStreamFactory::registerFactory(); | 
		
	
	
		
			
				
					
					|  |  |  | @@ -3397,14 +3400,14 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  | 	    Consumer.unsubscribe(); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	inline void RESTAPI_server::reinitialize(Poco::Util::Application &self) { | 
		
	
		
			
				|  |  |  |  | 	inline void RESTAPI_ExtServer::reinitialize(Poco::Util::Application &self) { | 
		
	
		
			
				|  |  |  |  | 	    MicroService::instance().LoadConfigurationFile(); | 
		
	
		
			
				|  |  |  |  | 	    Logger_.information("Reinitializing."); | 
		
	
		
			
				|  |  |  |  | 	    Stop(); | 
		
	
		
			
				|  |  |  |  | 	    Start(); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	void RESTAPI_InternalServer::reinitialize(Poco::Util::Application &self) { | 
		
	
		
			
				|  |  |  |  | 	void RESTAPI_IntServer::reinitialize(Poco::Util::Application &self) { | 
		
	
		
			
				|  |  |  |  | 	    MicroService::instance().LoadConfigurationFile(); | 
		
	
		
			
				|  |  |  |  | 	    Logger_.information("Reinitializing."); | 
		
	
		
			
				|  |  |  |  | 	    Stop(); | 
		
	
	
		
			
				
					
					|  |  |  | @@ -3728,7 +3731,7 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  |             if (AuthClient()->IsAuthorized( SessionToken_, UserInfo_, Expired)) { | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  |                 if(Server_.LogIt(Request->getMethod(),true)) { | 
		
	
		
			
				|  |  |  |  |                     Logger_.debug(Poco::format("X-REQ-ALLOWED(%s): User='%s@%s' Method='%s' Path='%s", | 
		
	
		
			
				|  |  |  |  |                     Logger_.debug(Poco::format("X-REQ-ALLOWED(%s): User='%s@%s' Method='%s' Path='%s'", | 
		
	
		
			
				|  |  |  |  |                                                UserInfo_.userinfo.email, | 
		
	
		
			
				|  |  |  |  |                                                Utils::FormatIPv6(Request->clientAddress().toString()), | 
		
	
		
			
				|  |  |  |  |                                                Request->clientAddress().toString(), | 
		
	
	
		
			
				
					
					|  |  |  | @@ -3738,7 +3741,7 @@ namespace OpenWifi { | 
		
	
		
			
				|  |  |  |  |                 return true; | 
		
	
		
			
				|  |  |  |  |             } else { | 
		
	
		
			
				|  |  |  |  |                 if(Server_.LogBadTokens(true)) { | 
		
	
		
			
				|  |  |  |  |                     Logger_.debug(Poco::format("X-REQ-DENIED(%s): Method='%s' Path='%s", | 
		
	
		
			
				|  |  |  |  |                     Logger_.debug(Poco::format("X-REQ-DENIED(%s): Method='%s' Path='%s'", | 
		
	
		
			
				|  |  |  |  |                                                Utils::FormatIPv6(Request->clientAddress().toString()), | 
		
	
		
			
				|  |  |  |  |                                                Request->getMethod(), Request->getURI())); | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
	
		
			
				
					
					|  |  |  |   |