diff options
-rw-r--r-- | gentoobrowse/src/test.cpp | 2 | ||||
-rw-r--r-- | gentoobrowse/src/user.cpp | 62 |
2 files changed, 52 insertions, 12 deletions
diff --git a/gentoobrowse/src/test.cpp b/gentoobrowse/src/test.cpp index 79d3d42..cd613ff 100644 --- a/gentoobrowse/src/test.cpp +++ b/gentoobrowse/src/test.cpp @@ -111,7 +111,7 @@ BOOST_FIXTURE_TEST_SUITE(ta, CoreWithDefaultRouter); BOOST_AUTO_TEST_CASE( endpointCount ) { - BOOST_REQUIRE_EQUAL(24, AdHoc::PluginManager::getDefault()->getAll<IceSpider::RouteHandlerFactory>().size()); + BOOST_REQUIRE_EQUAL(25, AdHoc::PluginManager::getDefault()->getAll<IceSpider::RouteHandlerFactory>().size()); BOOST_REQUIRE_EQUAL(5, routes.size()); } diff --git a/gentoobrowse/src/user.cpp b/gentoobrowse/src/user.cpp index 27d49d4..e98de2c 100644 --- a/gentoobrowse/src/user.cpp +++ b/gentoobrowse/src/user.cpp @@ -105,14 +105,36 @@ namespace GentooBrowse { IceSpider::XsltStreamSerializer::IceSpiderFactory _serializer_text_html; }; + class verificationHandler { + protected: + verificationHandler(const IceSpider::Core * core) : + prx0(core->getProxy<IceSpider::SessionManager>()), + prx1(core->getProxy<Gentoo::Users>()) + { + } + + void execute(IceSpider::IHttpRequest * request, const std::string & _p_username, const std::string & _p_guid) const + { + auto user = prx1->verify(_p_username, _p_guid, request->getContext()); + auto s = prx0->createSession(); + s->variables[USERID] = boost::lexical_cast<std::string>(user->userid); + prx0->updateSession(s); + request->setCookie(SESSIONID, s->id, IceUtil::None, "/"); + request->responseRedirect("/user/home", "Verified, welcome!"); + } + + private: + const IceSpider::SessionManagerPrx prx0; + const Gentoo::UsersPrx prx1; + }; + // Route name: verification post // path: /user/verification - class verificationPost : public IceSpider::IRouteHandler { + class verificationPost : public IceSpider::IRouteHandler, verificationHandler { public: verificationPost(const IceSpider::Core * core) : IceSpider::IRouteHandler(IceSpider::HttpMethod::POST, "/user/verification"), - prx0(core->getProxy<IceSpider::SessionManager>()), - prx1(core->getProxy<Gentoo::Users>()), + verificationHandler(core), _pn_username("username"), _pn_guid("guid") { @@ -125,21 +147,38 @@ namespace GentooBrowse { [this]() { return requiredParameterNotFound<::std::string>("Body", _pn_username); }); auto _p_guid(request->getBodyParam<::std::string>(_pbody, _pn_guid) / [this]() { return requiredParameterNotFound<::std::string>("Body", _pn_guid); }); - auto user = prx1->verify(_p_username, _p_guid, request->getContext()); - auto s = prx0->createSession(); - s->variables[USERID] = boost::lexical_cast<std::string>(user->userid); - prx0->updateSession(s); - request->setCookie(SESSIONID, s->id, IceUtil::None, "/"); - request->responseRedirect("/user/home", "Verified, welcome!"); + verificationHandler::execute(request, _p_username, _p_guid); } private: - const IceSpider::SessionManagerPrx prx0; - const Gentoo::UsersPrx prx1; const std::string _pn_username; const std::string _pn_guid; }; + // Route name: verification post + // path: /user/verification/{guid}/{username} + class verificationGet : public IceSpider::IRouteHandler, verificationHandler { + public: + verificationGet(const IceSpider::Core * core) : + IceSpider::IRouteHandler(IceSpider::HttpMethod::GET, "/user/verification/{guid}/{username}"), + verificationHandler(core), + _pi_guid(2), + _pi_username(3) + { + } + + void execute(IceSpider::IHttpRequest * request) const + { + auto _p_guid(request->getURLParam<::std::string>(_pi_guid)); + auto _p_username(request->getURLParam<::std::string>(_pi_username)); + verificationHandler::execute(request, _p_username, _p_guid); + } + + private: + const ::Ice::Int _pi_guid; + const ::Ice::Int _pi_username; + }; + // Route name: home // path: /user/home class home : public IceSpider::IRouteHandler, @@ -244,5 +283,6 @@ FACTORY(GentooBrowse::logout, IceSpider::RouteHandlerFactory); FACTORY(GentooBrowse::signup, IceSpider::RouteHandlerFactory); FACTORY(GentooBrowse::signupPost, IceSpider::RouteHandlerFactory); FACTORY(GentooBrowse::verification, IceSpider::RouteHandlerFactory); +FACTORY(GentooBrowse::verificationGet, IceSpider::RouteHandlerFactory); FACTORY(GentooBrowse::verificationPost, IceSpider::RouteHandlerFactory); |