Loading src/blogi.cpp +15 −17 Original line number Diff line number Diff line Loading @@ -293,13 +293,9 @@ void blogi::Blogi::RequestEvent(libhttppp::HttpRequest *curreq,const int tid,ULO std::cout << std::endl; RETRY_REQUEST: const char *sessid=nullptr; try{ /*blogi internal pages and redirections*/ if(strcmp(curreq->getRequestURL(),"/")==0 || strcmp(curreq->getRequestURL(),PlgArgs->config->getprefix())==0){ libhttppp::HttpResponse curres; libhttppp::HttpCookie cookie; libhttppp::HttpResponse curres; const char *sessid=nullptr; try{ cookie.parse(curreq); for(libhttppp::HttpCookie::CookieData *curcookie=cookie.getfirstCookieData(); Loading @@ -307,13 +303,15 @@ RETRY_REQUEST: if(curcookie->getKey() && strcmp(curcookie->getKey(),"sessionid")==0) sessid=curcookie->getValue(); } if(!sessid) if(!sessid || !PlgArgs->session->exists(sessid) ) throw; }catch(...){ sessid=PlgArgs->session->createSession(); cookie.setcookie(&curres, "sessionid", sessid,nullptr,nullptr,-1, nullptr,false,"1","Lax"); } try{ /*blogi internal pages and redirections*/ if(strcmp(curreq->getRequestURL(),"/")==0 || strcmp(curreq->getRequestURL(),PlgArgs->config->getprefix())==0){ curres.setState(HTTP307); curres.setVersion(HTTPVERSION(1.1)); *curres.setData("Location") << PlgArgs->config->buildurl("content/tag",url,512); Loading src/session.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,25 @@ void blogi::Session::getSessionData(const char *sessionid,const char *key,std::s throw excep; }; bool blogi::Session::exists(const char* sessionid){ uuid_t sin; if(uuid_parse(sessionid,sin)!=0){ libhttppp::HTTPException excep; excep[libhttppp::HTTPException::Error] << "exists Session: sessionid empty !"; throw excep; } for(SessionData *curses=_firstSessionData; curses; curses=curses->_nextSessionData){ if(uuid_compare(curses->_sessionid,sin)==0){ return true; } } return false; } blogi::Session::SessionData::SessionData(){ _firstData=nullptr; _lastData=nullptr; Loading src/session.h +2 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,8 @@ namespace blogi { void addSessionData(const char *sessionid,const char *key,const char *value,size_t size); void getSessionData(const char *sessionid,const char *key,std::string &value); bool exists(const char *sessionid); private: struct SessionData{ SessionData(); Loading Loading
src/blogi.cpp +15 −17 Original line number Diff line number Diff line Loading @@ -293,13 +293,9 @@ void blogi::Blogi::RequestEvent(libhttppp::HttpRequest *curreq,const int tid,ULO std::cout << std::endl; RETRY_REQUEST: const char *sessid=nullptr; try{ /*blogi internal pages and redirections*/ if(strcmp(curreq->getRequestURL(),"/")==0 || strcmp(curreq->getRequestURL(),PlgArgs->config->getprefix())==0){ libhttppp::HttpResponse curres; libhttppp::HttpCookie cookie; libhttppp::HttpResponse curres; const char *sessid=nullptr; try{ cookie.parse(curreq); for(libhttppp::HttpCookie::CookieData *curcookie=cookie.getfirstCookieData(); Loading @@ -307,13 +303,15 @@ RETRY_REQUEST: if(curcookie->getKey() && strcmp(curcookie->getKey(),"sessionid")==0) sessid=curcookie->getValue(); } if(!sessid) if(!sessid || !PlgArgs->session->exists(sessid) ) throw; }catch(...){ sessid=PlgArgs->session->createSession(); cookie.setcookie(&curres, "sessionid", sessid,nullptr,nullptr,-1, nullptr,false,"1","Lax"); } try{ /*blogi internal pages and redirections*/ if(strcmp(curreq->getRequestURL(),"/")==0 || strcmp(curreq->getRequestURL(),PlgArgs->config->getprefix())==0){ curres.setState(HTTP307); curres.setVersion(HTTPVERSION(1.1)); *curres.setData("Location") << PlgArgs->config->buildurl("content/tag",url,512); Loading
src/session.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,25 @@ void blogi::Session::getSessionData(const char *sessionid,const char *key,std::s throw excep; }; bool blogi::Session::exists(const char* sessionid){ uuid_t sin; if(uuid_parse(sessionid,sin)!=0){ libhttppp::HTTPException excep; excep[libhttppp::HTTPException::Error] << "exists Session: sessionid empty !"; throw excep; } for(SessionData *curses=_firstSessionData; curses; curses=curses->_nextSessionData){ if(uuid_compare(curses->_sessionid,sin)==0){ return true; } } return false; } blogi::Session::SessionData::SessionData(){ _firstData=nullptr; _lastData=nullptr; Loading
src/session.h +2 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,8 @@ namespace blogi { void addSessionData(const char *sessionid,const char *key,const char *value,size_t size); void getSessionData(const char *sessionid,const char *key,std::string &value); bool exists(const char *sessionid); private: struct SessionData{ SessionData(); Loading