CWebSock::EPageReqResult CWebSock::PrintTemplate(const CString& sPageName, CString& sPageRet, CModule* pModule) { SetVars(); m_Template["PageName"] = sPageName; if (pModule) { CUser* pUser = pModule->GetUser(); m_Template["ModUser"] = pUser ? pUser->GetUserName() : ""; m_Template["ModName"] = pModule->GetModName(); if (m_Template.find("Title") == m_Template.end()) { m_Template["Title"] = pModule->GetWebMenuTitle(); } } if (!m_bPathsSet) { SetPaths(pModule, true); } if (m_Template.GetFileName().empty() && !m_Template.SetFile(sPageName + ".tmpl")) { return PAGE_NOTFOUND; } if (m_Template.PrintString(sPageRet)) { return PAGE_PRINT; } else { return PAGE_NOTFOUND; } }
CWebSock::EPageReqResult CWebSock::PrintStaticFile(const CString& sPath, CString& sPageRet, CModule* pModule) { SetPaths(pModule); CString sFile = m_Template.ExpandFile(sPath.TrimLeft_n("/")); DEBUG("About to print [" + sFile+ "]"); // Either PrintFile() fails and sends an error page or it suceeds and // sends a result. In both cases we don't have anything more to do. PrintFile(sFile); return PAGE_DONE; }
void CMLua::Load() { Log("Loading lua engine"); L = luaL_newstate(); Log("Loading std modules"); luaL_openlibs(L); SetPaths(); lua_register(L, "print", luaM_print); lua_register(L, "a", luaM_toansi); lua_register(L, "u", luaM_toucs2); lua_register(L, "totable", luaM_totable); lua_atpanic(L, luaM_atpanic); Log("Loading miranda modules"); CLuaModuleLoader::Load(L); CLuaScriptLoader::Load(L); }
CWebSock::EPageReqResult CWebSock::OnPageRequestInternal(const CString& sURI, CString& sPageRet) { if (CZNC::Get().GetProtectWebSessions() && GetSession()->GetIP() != GetRemoteIP()) { DEBUG("Expected IP: " << GetSession()->GetIP()); DEBUG("Remote IP: " << GetRemoteIP()); PrintErrorPage(403, "Access denied", "This session does not belong to your IP."); return PAGE_DONE; } // Check that they really POSTed from one our forms by checking if they // know the "secret" CSRF check value. Don't do this for login since // CSRF against the login form makes no sense and the login form does a // cookies-enabled check which would break otherwise. if (IsPost() && GetParam("_CSRF_Check") != GetCSRFCheck() && sURI != "/login") { DEBUG("Expected _CSRF_Check: " << GetCSRFCheck()); DEBUG("Actual _CSRF_Check: " << GetParam("_CSRF_Check")); PrintErrorPage(403, "Access denied", "POST requests need to send " "a secret token to prevent cross-site request forgery attacks."); return PAGE_DONE; } SendCookie("SessionId", GetSession()->GetId()); if (GetSession()->IsLoggedIn()) { m_sUser = GetSession()->GetUser()->GetUserName(); m_bLoggedIn = true; } // Handle the static pages that don't require a login if (sURI == "/") { if(!m_bLoggedIn && GetParam("cookie_check", false).ToBool() && GetRequestCookie("SessionId").empty()) { GetSession()->AddError("Your browser does not have cookies enabled for this site!"); } return PrintTemplate("index", sPageRet); } else if (sURI == "/favicon.ico") { return PrintStaticFile("/pub/favicon.ico", sPageRet); } else if (sURI == "/robots.txt") { return PrintStaticFile("/pub/robots.txt", sPageRet); } else if (sURI == "/logout") { GetSession()->SetUser(NULL); SetLoggedIn(false); Redirect("/"); // We already sent a reply return PAGE_DONE; } else if (sURI == "/login") { if (GetParam("submitted").ToBool()) { m_sUser = GetParam("user"); m_sPass = GetParam("pass"); m_bLoggedIn = OnLogin(m_sUser, m_sPass); // AcceptedLogin()/RefusedLogin() will call Redirect() return PAGE_DEFERRED; } Redirect("/"); // the login form is here return PAGE_DONE; } else if (sURI.Left(5) == "/pub/") { return PrintStaticFile(sURI, sPageRet); } else if (sURI.Left(11) == "/skinfiles/") { CString sSkinName = sURI.substr(11); CString::size_type uPathStart = sSkinName.find("/"); if (uPathStart != CString::npos) { CString sFilePath = sSkinName.substr(uPathStart + 1); sSkinName.erase(uPathStart); m_Template.ClearPaths(); m_Template.AppendPath(GetSkinPath(sSkinName) + "pub"); if (PrintFile(m_Template.ExpandFile(sFilePath))) { return PAGE_DONE; } else { return PAGE_NOTFOUND; } } return PAGE_NOTFOUND; } else if (sURI.Left(6) == "/mods/" || sURI.Left(10) == "/modfiles/") { ParsePath(); // Make sure modules are treated as directories if (sURI.Right(1) != "/" && sURI.find(".") == CString::npos && sURI.TrimLeft_n("/mods/").TrimLeft_n("/").find("/") == CString::npos) { Redirect(sURI + "/"); return PAGE_DONE; } CModule *pModule = CZNC::Get().GetModules().FindModule(m_sModName); if (!pModule) { // Check if GetSession()->GetUser() is NULL and display // an error in that case if (!ForceLogin()) return PAGE_DONE; pModule = GetSession()->GetUser()->GetModules().FindModule(m_sModName); } if (!pModule) { return PAGE_NOTFOUND; } else if (pModule->WebRequiresLogin() && !ForceLogin()) { return PAGE_PRINT; } else if (pModule->WebRequiresAdmin() && !GetSession()->IsAdmin()) { PrintErrorPage(403, "Forbidden", "You need to be an admin to access this module"); return PAGE_DONE; } else if (!pModule->IsGlobal() && pModule->GetUser() != GetSession()->GetUser()) { PrintErrorPage(403, "Forbidden", "You must login as " + pModule->GetUser()->GetUserName() + " in order to view this page"); return PAGE_DONE; } else if (pModule->OnWebPreRequest(*this, m_sPage)) { return PAGE_DEFERRED; } VWebSubPages& vSubPages = pModule->GetSubPages(); for (unsigned int a = 0; a < vSubPages.size(); a++) { TWebSubPage& SubPage = vSubPages[a]; bool bActive = (m_sModName == pModule->GetModName() && m_sPage == SubPage->GetName()); if (bActive && SubPage->RequiresAdmin() && !GetSession()->IsAdmin()) { PrintErrorPage(403, "Forbidden", "You need to be an admin to access this page"); return PAGE_DONE; } } if (pModule && !pModule->IsGlobal() && (!IsLoggedIn() || pModule->GetUser() != GetSession()->GetUser())) { AddModLoop("UserModLoop", *pModule); } if (sURI.Left(10) == "/modfiles/") { m_Template.AppendPath(GetSkinPath(GetSkinName()) + "/mods/" + m_sModName + "/files/"); m_Template.AppendPath(pModule->GetModDataDir() + "/files/"); if (PrintFile(m_Template.ExpandFile(m_sPage.TrimLeft_n("/")))) { return PAGE_PRINT; } else { return PAGE_NOTFOUND; } } else { SetPaths(pModule, true); /* if a module returns false from OnWebRequest, it does not want the template to be printed, usually because it did a redirect. */ if (pModule->OnWebRequest(*this, m_sPage, m_Template)) { // If they already sent a reply, let's assume // they did what they wanted to do. if (SentHeader()) { return PAGE_DONE; } return PrintTemplate(m_sPage, sPageRet, pModule); } if (!SentHeader()) { PrintErrorPage(404, "Not Implemented", "The requested module does not acknowledge web requests"); } return PAGE_DONE; } } else { CString sPage(sURI.Trim_n("/")); if (sPage.length() < 32) { for (unsigned int a = 0; a < sPage.length(); a++) { unsigned char c = sPage[a]; if ((c < '0' || c > '9') && (c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && c != '_') { return PAGE_NOTFOUND; } } return PrintTemplate(sPage, sPageRet); } } return PAGE_NOTFOUND; }
int main (int argc, char *argv[]) { ofstream tLogFile; TScene* ptScene; char acTimeString [30]; time_t tBaseTime, tInitTime, tRenderTime, tPostProcessTime; GlobalClassManager = new TClassManager(); _tProgramName = "render"; ProcessCommandLine (argc, argv); SetPaths(); if ( !FileExists (_tLocalPath + "config") ) { cerr << "WARNING: No configuration file in " << _tLocalPath << endl; } else { if ( !ProcessConfigFile (_tLocalPath + "config", tConfigData) ) { cerr << "ERROR: Couldn't read configuration file." << endl; exit (1); } } // for (multimap<string, string>::const_iterator iter = tConfigData.begin(); ( iter != tConfigData.end() ) ;iter++) // { // cout << (*iter).first << " = " << (*iter).second << endl; // } multimap<string, string>::const_iterator iter = tConfigData.find ("PluginConfigFile"); string tPluginConfigFile = ( iter != tConfigData.end() ) ? (*iter).second : _tLocalPath + "pluginrc"; if ( !FileExists (tPluginConfigFile) ) { cerr << "ERROR: Plugin configuration file '" << tPluginConfigFile << "' does not exist." << endl; exit (1); } cout << "Loading plugins..." << endl; tPluginManager.initialize (tPluginConfigFile, 0); TGradient::_initialize(); TImageManager::_initialize(); TSceneManager::_initialize(); tImageManager.initialize(); if ( !TSceneManager::_knownFormat (_tInputFileFormat) ) { cout << "ERROR: Scene format not supported" << endl; exit (1); } cout << "Parsing..." << endl; ptScene = TSceneManager::_load (_tInputFileName, _tInputFileFormat); if ( !ptScene ) { cerr << "Error parsing input file" << endl; exit (1); } // // Uncomment next line for debug information on the whole scene. // // ptScene->printDebug(); tBaseTime = time (NULL); cout << "Initializing..." << endl; if(!ptScene->initialize()) { cerr << "Initialization failed!" << endl; exit (1); } tInitTime = time (NULL); cout << "Rendering..." << endl; ptScene->render (&FinishedLine); tRenderTime = time (NULL); cout << "Postprocessing..." << endl; ptScene->postprocess(); tPostProcessTime = time (NULL); cout << "Saving..." << endl; if ( !ptScene->saveImage() ) { cout << "Could not save image file" << endl; } ptScene->finalize(); cout << endl; cout << " Total ellapsed time : " << difftime (tPostProcessTime, tBaseTime) << " secs" << endl; cout << " - Initialization . . . " << difftime (tInitTime, tBaseTime) << " secs" << endl; cout << " - Render . . . " << difftime (tRenderTime, tInitTime) << " secs" << endl; cout << " - Postprocessing . . . " << difftime (tPostProcessTime, tRenderTime) << " secs" << endl; cout << ""; if ( _gKeepLog ) { strftime (acTimeString, 30, "%b %d %H:%M:%S", localtime (&tBaseTime)); tLogFile.open (_tLogFileName.c_str(), ios::out | ios::binary | ios::app); tLogFile << acTimeString << " " << _tInputFileName << ", " << difftime (tPostProcessTime, tBaseTime) << " seconds" << endl; tLogFile.close(); } delete GlobalClassManager; return 0; } /* main() */
CLogger::~CLogger(void) { Stop(); SetPaths(NULL,NULL); if (m_LogFormatStr) free(m_LogFormatStr); }