#pragma once #include #include #include #include #include #include namespace rublon::method { class WebsocketBasedAuth : public AuthenticationStep { public: const char * _name = ""; const bool _autopushPrompt = true; WebsocketBasedAuth(std::string systemToken, std::string tid, const char * name, bool autopushPrompt = true) : AuthenticationStep(std::move(systemToken), std::move(tid)), _name{name}, _autopushPrompt{autopushPrompt} {} template < typename Hander_t > tl::expected< AuthenticationStatus, Error > verify(const CoreHandlerInterface< Hander_t > & coreHandler, const Pam_t & pam) const { log(LogLevel::Info, "starting WS"); auto listener = coreHandler.listen(); if(not _autopushPrompt) pam.print("Autopush"); else pam.scan([](const auto /*ignored userinput*/) { return ""; }, "Rublon authentication initiated. Complete the authentication and press Enter to proceed"); return listener->waitForEvent(); } }; } // namespace rublon::method