/************************************************************************* * UrBackup - Client/Server backup system * Copyright (C) 2011-2014 Martin Raiber * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . **************************************************************************/ #include "helper.h" #include "../../stringtools.h" #include "../database.h" #include #include extern std::string server_identity; Helper::Helper(THREAD_ID pTID, str_map *pGET, str_nmap *pPARAMS) { session=NULL; update(pTID,pGET,pPARAMS); } void Helper::update(THREAD_ID pTID, str_map *pGET, str_nmap *pPARAMS) { tid=pTID; GET=pGET; PARAMS=pPARAMS; if(GET==NULL) { return; } if( session==NULL ) { session=Server->getSessionMgr()->getUser( (*GET)[L"ses"], widen((*PARAMS)["REMOTE_ADDR"]+(*PARAMS)["HTTP_USER_AGENT"]) ); } //Get language from ACCEPT_LANGUAGE str_map::iterator lit=GET->find(L"lang"); if(lit!=GET->end() && lit->second!=L"-") { language=wnarrow(lit->second); } else { std::wstring langs=(*GET)[L"langs"]; std::vector clangs; Tokenize(langs, clangs, L","); for(size_t j=0;jfind("ACCEPT_LANGUAGE"); if(al==PARAMS->end()) al=PARAMS->find("HTTP_ACCEPT_LANGUAGE"); if(al!=PARAMS->end()) { std::vector toks; Tokenize(al->second, toks, ","); for(size_t i=0;igetDatabase(tid, TRANSLATIONDB); ITemplate *tmpl=Server->createTemplate("urbackup/templates/"+name); /*if( db!=NULL ) { tmpl->addValueTable(db, "translation_"+language ); }*/ if( invalid_session==true ) tmpl->setValue(L"INVALID_SESSION",L"true"); else if(session!=NULL) tmpl->setValue(L"SESSION", session->session); if( session!=NULL && session->id==-1 ) tmpl->setValue(L"INVALID_ID",L"true"); templates.push_back( tmpl ); return tmpl; } Helper::~Helper(void) { if( session!=NULL ) Server->getSessionMgr()->releaseUser(session); for(size_t i=0;idestroy( templates[i] ); } } void Helper::Write(std::string str) { Server->Write( tid, str ); } void Helper::WriteTemplate(ITemplate *tmpl) { Server->Write( tid, tmpl->getData() ); } IDatabase *Helper::getDatabase(void) { return Server->getDatabase(tid, URBACKUPDB_SERVER); } std::wstring Helper::generateSession(std::wstring username) { return Server->getSessionMgr()->GenerateSessionIDWithUser( username, widen((*PARAMS)["REMOTE_ADDR"]+(*PARAMS)["HTTP_USER_AGENT"]) ); } std::string Helper::getRights(const std::string &domain) { if(session==NULL) return "none"; if(session->id==0) return "all"; if(getRightsInt("all")=="all") return "all"; return getRightsInt(domain); } std::string Helper::getRightsInt(const std::string &domain) { if(session==NULL) return "none"; IQuery *q=getDatabase()->Prepare("SELECT t_right FROM settings_db.si_permissions WHERE clientid=? AND t_domain=?"); q->Bind(session->id); q->Bind(domain); db_results res=q->Read(); q->Reset(); if(!res.empty()) { return wnarrow(res[0][L"t_right"]); } else { return "none"; } } void Helper::releaseAll(void) { if(session!=NULL) { Server->getSessionMgr()->releaseUser(session); session=NULL; } } std::string Helper::getTimeFormatString(void) { return "%Y-%m-%d %H:%M"; } std::string Helper::getLanguage(void) { return language; } std::vector Helper::getRightIDs(std::string rights) { std::vector clientid; if(rights!="all" && rights!="none" ) { std::vector s_clientid; Tokenize(rights, s_clientid, ","); for(size_t i=0;i right_ids) { bool r_ok=false; if(rights!="all") { for(size_t i=0;iPrepare("SELECT id, name, password_md5 FROM settings_db.si_users WHERE name=?"); q->Bind(username); db_results res=q->Read(); if(!res.empty()) { std::wstring password_md5=res[0][L"password_md5"]; std::string ui_password=wnarrow(password); std::string r_password=Server->GenerateHexMD5(Server->ConvertToUTF8(session->mStr[L"rnd"]+password_md5)); if(r_password!=ui_password) { return false; } else { if(user_id!=NULL) { *user_id=watoi(res[0][L"id"]); } return true; } } return false; } std::vector Helper::clientRights(const std::string& right_name, bool& all_client_rights) { std::string rights=getRights(right_name); std::vector clientid; if(rights!="all" && rights!="none" ) { std::vector s_clientid; Tokenize(rights, s_clientid, ","); for(size_t i=0;i3) { if(next(ret, 0, "#I")) { ret=ret.substr(2); } if(ret[ret.size()-1]=='#') { ret=ret.substr(0, ret.size()-1); } } return ret; } void Helper::sleep(unsigned int ms) { if(session!=NULL) { Server->getSessionMgr()->releaseUser(session); } Server->wait(ms); if(session!=NULL) { Server->getSessionMgr()->lockUser(session); } }