Commit c98b6b98 authored by jan.koester's avatar jan.koester
Browse files

check session exists

parent 23e7396f
Loading
Loading
Loading
Loading
+15 −17
Original line number Diff line number Diff line
@@ -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();
@@ -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);
+19 −0
Original line number Diff line number Diff line
@@ -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;
+2 −0
Original line number Diff line number Diff line
@@ -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();