// Returns true for correct credentials for a demo installation. // Else returns false. bool demo_acl (string user, string pass) { if (strcmp (DEMO, "yes") == 0) { if (user == session_admin_credentials ()) { if ((pass == session_admin_credentials ()) || (pass == md5 (session_admin_credentials ()))) { return true; } } } return false; }
// Cleans and resets the data in the Bibledit installation. void demo_clean_data () { Database_Logs::log ("Cleaning up the demo data"); Webserver_Request request; // Set user to the demo credentials (admin) as this is the user who is always logged-in in a demo installation. request.session_logic ()->setUsername (session_admin_credentials ()); // Delete empty stylesheet that may have been there. request.database_styles()->revokeWriteAccess ("", styles_logic_standard_sheet ()); request.database_styles()->deleteSheet (""); styles_sheets_create_all (); // Set the export stylesheet to "Standard" for all Bibles and the admin. vector <string> bibles = request.database_bibles()->getBibles (); for (auto & bible : bibles) { Database_Config_Bible::setExportStylesheet (bible, styles_logic_standard_sheet ()); } request.database_config_user()->setStylesheet (styles_logic_standard_sheet ()); // Set the site language to "Default" Database_Config_General::setSiteLanguage (""); // Ensure the default users are there. map <string, int> users = { make_pair ("guest", Filter_Roles::guest ()), make_pair ("member", Filter_Roles::member ()), make_pair ("consultant", Filter_Roles::consultant ()), make_pair ("translator", Filter_Roles::translator ()), make_pair ("manager", Filter_Roles::manager ()), make_pair (session_admin_credentials (), Filter_Roles::admin ()) }; for (auto & element : users) { if (!request.database_users ()->usernameExists (element.first)) { request.database_users ()->addNewUser(element.first, element.first, element.second, ""); } request.database_users ()->updateUserLevel (element.first, element.second); } // Create / update sample Bible. demo_create_sample_bible (); // Create sample notes. demo_create_sample_notes (&request); // Create samples for the workbenches. demo_create_sample_workbenches (&request); // Set navigator to John 3:16. Ipc_Focus::set (&request, 43, 3, 16); // Set and/or trim resources to display. // Too many resources crash the demo: Limit the amount. vector <string> resources = request.database_config_user()->getActiveResources (); bool reset_resources = false; if (resources.size () > 25) reset_resources = true; vector <string> defaults = demo_logic_default_resources (); for (auto & name : defaults) { if (!in_array (name, resources)) reset_resources = true; } if (reset_resources) { resources = demo_logic_default_resources (); request.database_config_user()->setActiveResources (resources); } // No flipped basic <> advanded mode. request.database_config_user ()->setFlipInterfaceMode (false); }
string client_index (void * webserver_request) { Webserver_Request * request = (Webserver_Request *) webserver_request; Assets_View view; if (request->query.count ("disable")) { client_logic_enable_client (false); client_index_remove_all_users (request); Database_Config_General::setRepeatSendReceive (0); Database_Config_General::setUnsentBibleDataTime (0); Database_Config_General::setUnreceivedBibleDataTime (0); } bool connect = request->post.count ("connect"); bool demo = request->query.count ("demo"); if (connect || demo) { string address; if (connect) address = request->post ["address"]; if (demo) address = demo_address (); if (address.find ("http") == string::npos) address = filter_url_set_scheme (address, false); Database_Config_General::setServerAddress (address); int port = convert_to_int (config_logic_http_network_port ()); if (connect) port = convert_to_int (request->post ["port"]); if (demo) port = demo_port (); Database_Config_General::setServerPort (port); string user; if (connect) user = request->post ["user"]; if (demo) user = session_admin_credentials (); string pass; if (connect) pass = request->post ["pass"]; if (demo) pass = session_admin_credentials (); string response = client_logic_connection_setup (user, md5 (pass)); int iresponse = convert_to_int (response); if ((iresponse >= Filter_Roles::guest ()) && (iresponse <= Filter_Roles::admin ())) { // Enable client mode upon a successful connection. client_index_enable_client (request, user, pass, iresponse); // Feedback. view.set_variable ("success", translate("Connection is okay.")); } else { view.set_variable ("error", translate ("Could not create a connection with Bibledit Cloud") + ": " + response); } } if (client_logic_client_enabled ()) view.enable_zone ("clienton"); else view.enable_zone ("clientoff"); string address = Database_Config_General::getServerAddress (); view.set_variable ("address", address); int port = Database_Config_General::getServerPort (); view.set_variable ("port", convert_to_string (port)); view.set_variable ("url", client_logic_link_to_cloud ("", "")); vector <string> users = request->database_users ()->getUsers (); for (auto & user : users) { int level = request->database_users()->get_level (user); view.set_variable ("role", Filter_Roles::text (level)); } view.set_variable ("demo", demo_client_warning ()); string page; // Since the role of the user may change after a successful connection to the server, // the menu generation in the header should be postponed till when the actual role is known. page = Assets_Page::header (translate ("Server"), webserver_request); page += view.render ("client", "index"); page += Assets_Page::footer (); return page; }