void email_receive () { // Bail out when the mail storage host has not been defined, rather than giving an error message. if (Database_Config_General::getMailStorageHost () == "") return; // One email receiver runs at a time. if (config_globals_mail_receive_running) return; config_globals_mail_receive_running = true; // Once this flag is set, the coder should be careful not to exit from the function // without clearin this flag. // Email count. string error; int emailcount = email_receive_count (error); // Messages start at number 1 instead of 0. for (int i = 1; i <= emailcount; i++) { Webserver_Request request; Confirm_Worker confirm_worker = Confirm_Worker (&request); Notes_Logic notes_logic = Notes_Logic (&request); error.clear (); string body = email_receive_message (error); if (error.empty ()) { // Extract "from" and subject, and clean body. string from; string subject; email_dissect (body, from, subject); Database_Logs::log ("Processing email from " + from + " with subject " + subject); if (confirm_worker.handleEmail (from, subject, body)) { } else if (notes_logic.handleEmailComment (from, subject, body)) { } else if (notes_logic.handleEmailNew (from, subject, body)) { } else { Database_Logs::log ("Could not allocate email from " + from + ", subject " + subject); Database_Logs::log (body); } } else { Database_Logs::log ("Error retrieving mail: " + error); } } config_globals_mail_receive_running = false; }
string user_account (void * webserver_request) { Webserver_Request * request = (Webserver_Request *) webserver_request; string page; Assets_Header header = Assets_Header (translate("Account"), webserver_request); header.addBreadCrumb (menu_logic_settings_menu (), menu_logic_settings_text ()); page = header.run (); Assets_View view; string username = request->session_logic()->currentUser (); string email = request->database_users()->get_email (username); bool actions_taken = false; vector <string> success_messages; // Form submission handler. if (request->post.count ("submit")) { bool form_is_valid = true; string currentpassword = request->post ["currentpassword"]; string newpassword = request->post ["newpassword"]; string newpassword2 = request->post ["newpassword2"]; string newemail = request->post ["newemail"]; if ((newpassword != "") || (newpassword2 != "")) { if (newpassword.length () < 4) { form_is_valid = false; view.set_variable ("new_password_invalid_message", translate("Password should be at least four characters long")); } if (newpassword2.length () < 4) { form_is_valid = false; view.set_variable ("new_password2_invalid_message", translate("Password should be at least four characters long")); } if (newpassword2 != newpassword) { form_is_valid = false; view.set_variable ("new_password2_invalid_message", translate("Passwords do not match")); } if (!request->database_users()->matchUserPassword (username, currentpassword)) { form_is_valid = false; view.set_variable ("current_password_invalid_message", translate("Current password is not valid")); } if (form_is_valid) { request->database_users()->set_password (username, newpassword); actions_taken = true; success_messages.push_back (translate("The new password was saved")); } } if (newemail != "") { if (!filter_url_email_is_valid (newemail)) { form_is_valid = false; view.set_variable ("new_email_invalid_message", translate("Email address is not valid")); } if (!request->database_users()->matchUserPassword (username, currentpassword)) { form_is_valid = false; view.set_variable ("current_password_invalid_message", translate("Current password is not valid")); } if (form_is_valid) { Confirm_Worker confirm_worker = Confirm_Worker (webserver_request); string initial_subject = translate("Email address verification"); string initial_body = translate("Somebody requested to change the email address that belongs to your account."); string query = request->database_users()->updateEmailQuery (username, newemail); string subsequent_subject = translate("Email address change"); string subsequent_body = translate("The email address that belongs to your account has been changed successfully."); confirm_worker.setup (newemail, initial_subject, initial_body, query, subsequent_subject, subsequent_body); actions_taken = true; success_messages.push_back (translate("A verification email was sent to ") + newemail); } } if (!actions_taken) { success_messages.push_back (translate("No changes were made")); } } view.set_variable ("username", filter_string_sanitize_html (username)); view.set_variable ("email", filter_string_sanitize_html (email)); string success_message = filter_string_implode (success_messages, "\n"); view.set_variable ("success_messages", success_message); if (!actions_taken) view.enable_zone ("no_actions_taken"); page += view.render ("user", "account"); page += Assets_Page::footer (); return page; }