From 884e804430595a757ef7525fc14797f003489864 Mon Sep 17 00:00:00 2001 From: relesgoe <RElesgoe@users.noreply.github.com> Date: Sat, 23 May 2020 16:20:40 -0700 Subject: [PATCH] Add "verify_account_email_from_name" option in bnetd.conf to support a name in the "From" field in emails --- conf/bnetd.conf.in | 2 ++ src/bnetd/account_email_verification.cpp | 12 +++++++++-- src/bnetd/prefs.cpp | 27 ++++++++++++++++++++++++ src/bnetd/prefs.h | 1 + src/bnetd/smtp.cpp | 4 ++-- src/bnetd/smtp.h | 2 +- 6 files changed, 43 insertions(+), 5 deletions(-) diff --git a/conf/bnetd.conf.in b/conf/bnetd.conf.in index 3a7e8ce..d5b8e13 100644 --- a/conf/bnetd.conf.in +++ b/conf/bnetd.conf.in @@ -383,6 +383,8 @@ verify_account_email_expiration = 10 # Email address to use for the 'From' field in email verification emails. verify_account_email_from_address = "" +verify_account_email_from_name = "" + # # ############################################################################## diff --git a/src/bnetd/account_email_verification.cpp b/src/bnetd/account_email_verification.cpp index 15e8e4a..77e7e5b 100644 --- a/src/bnetd/account_email_verification.cpp +++ b/src/bnetd/account_email_verification.cpp @@ -41,8 +41,9 @@ namespace pvpgn static std::string message; static std::string verify_account_email_from_address; + static std::string verify_account_email_from_name; - bool account_email_verification_load(const char* filepath, const char* prefs_servername, const char* prefs_verify_account_email_from_address) + bool account_email_verification_load(const char* filepath, const char* prefs_servername, const char* prefs_verify_account_email_from_address, const char* prefs_verify_account_email_from_name) { if (filepath == nullptr) { @@ -62,6 +63,12 @@ namespace pvpgn return false; } + if (prefs_verify_account_email_from_name == nullptr) + { + eventlog(eventlog_level_error, __FUNCTION__, "got NULL prefs_verify_account_email_from_name"); + return false; + } + std::ifstream infile{ filepath }; if (!infile.is_open()) { @@ -83,6 +90,7 @@ namespace pvpgn } verify_account_email_from_address = prefs_verify_account_email_from_address; + verify_account_email_from_name = prefs_verify_account_email_from_name; return true; } @@ -177,7 +185,7 @@ namespace pvpgn std::string personalized_message = fmt::format(message, fmt::arg("account_name", account_get_name(account)), fmt::arg("account_email_verification_code", code), fmt::arg("account_email_verification_expiration", prefs_get_verify_account_email_expiration())); eventlog(eventlog_level_debug, __FUNCTION__, "Sending email verification code to {} for account uid {}", account_get_email(account), account_get_uid(account)); - smtp_send_email(account_get_email(account), verify_account_email_from_address, "Email Verification", personalized_message); + smtp_send_email(account_get_email(account), verify_account_email_from_address, verify_account_email_from_name, "Email Verification", personalized_message); return true; } diff --git a/src/bnetd/prefs.cpp b/src/bnetd/prefs.cpp index 5eb73a1..a0e5a62 100644 --- a/src/bnetd/prefs.cpp +++ b/src/bnetd/prefs.cpp @@ -160,6 +160,7 @@ namespace pvpgn unsigned int verify_account_email; unsigned int verify_account_email_expiration; char const* verify_account_email_from_address; + char const * verify_account_email_from_name; char const * supportfile; char const * allowed_clients; char const * ladder_games; @@ -664,6 +665,10 @@ namespace pvpgn static const char* conf_get_verify_account_email_from_address(void); static int conf_setdef_verify_account_email_from_address(void); + static int conf_set_verify_account_email_from_name(const char* valstr); + static const char* conf_get_verify_account_email_from_name(void); + static int conf_setdef_verify_account_email_from_name(void); + static int conf_set_allowed_clients(const char *valstr); static const char *conf_get_allowed_clients(void); static int conf_setdef_allowed_clients(void); @@ -898,6 +903,7 @@ namespace pvpgn { "verify_account_email", conf_set_verify_account_email, conf_get_verify_account_email, conf_setdef_verify_account_email }, { "verify_account_email_expiration", conf_set_verify_account_email_expiration, conf_get_verify_account_email_expiration, conf_setdef_verify_account_email_expiration }, { "verify_account_email_from_address", conf_set_verify_account_email_from_address, conf_get_verify_account_email_from_address, conf_setdef_verify_account_email_from_address }, + { "verify_account_email_from_name", conf_set_verify_account_email_from_name, conf_get_verify_account_email_from_name, conf_setdef_verify_account_email_from_name }, { "allowed_clients", conf_set_allowed_clients, conf_get_allowed_clients, conf_setdef_allowed_clients }, { "ladder_games", conf_set_ladder_games, conf_get_ladder_games, conf_setdef_ladder_games }, { "max_connections", conf_set_max_connections, conf_get_max_connections, conf_setdef_max_connections }, @@ -3468,6 +3474,27 @@ namespace pvpgn } + extern char const* prefs_get_verify_account_email_from_name(void) + { + return prefs_runtime_config.verify_account_email_from_name; + } + + static int conf_set_verify_account_email_from_name(const char* valstr) + { + return conf_set_str(&prefs_runtime_config.verify_account_email_from_name, valstr, NULL); + } + + static const char* conf_get_verify_account_email_from_name(void) + { + return prefs_runtime_config.verify_account_email_from_name; + } + + static int conf_setdef_verify_account_email_from_name(void) + { + return conf_set_str(&prefs_runtime_config.verify_account_email_from_name, NULL, NULL); + } + + extern char const * prefs_get_supportfile(void) { return prefs_runtime_config.supportfile; diff --git a/src/bnetd/prefs.h b/src/bnetd/prefs.h index 9fb7696..0773e3d 100644 --- a/src/bnetd/prefs.h +++ b/src/bnetd/prefs.h @@ -175,6 +175,7 @@ namespace pvpgn extern void prefs_set_verify_account_email(bool enable); extern unsigned int prefs_get_verify_account_email_expiration(void); extern char const* prefs_get_verify_account_email_from_address(void); + extern char const* prefs_get_verify_account_email_from_name(void); extern char const * prefs_get_supportfile(void); extern char const * prefs_get_allowed_clients(void); extern char const * prefs_get_ladder_games(void); diff --git a/src/bnetd/smtp.cpp b/src/bnetd/smtp.cpp index c9bddd7..faa3164 100644 --- a/src/bnetd/smtp.cpp +++ b/src/bnetd/smtp.cpp @@ -114,7 +114,7 @@ namespace pvpgn } } - void smtp_send_email(const std::string& to_address, const std::string& from_address, const std::string& subject, std::string message) + void smtp_send_email(const std::string& to_address, const std::string& from_address, const std::string& from_name, const std::string& subject, std::string message) { if (!is_curl_initialized) { @@ -153,7 +153,7 @@ namespace pvpgn curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback); - message.insert(0, fmt::format("MIME-Version: 1.0\r\nContent-Type: text/plain; charset=\"UTF-8\"\r\nDate: {:%a, %d %b %Y %T %z}\r\nFrom: <{}>\r\nTo: <{}>\r\nSubject: {}\r\n\r\n", *std::localtime(&now), from_address, to_address, subject)); + message.insert(0, fmt::format("MIME-Version: 1.0\r\nContent-Type: text/plain; charset=\"UTF-8\"\r\nDate: {:%a, %d %b %Y %T %z}\r\nFrom: {} <{}>\r\nTo: <{}>\r\nSubject: {}\r\n\r\n", *std::localtime(&now), from_name, from_address, to_address, subject)); read_callback_message rcbmessage = {}; rcbmessage.message = message; rcbmessage.bytes_remaining = message.length() + 1; diff --git a/src/bnetd/smtp.h b/src/bnetd/smtp.h index 8cad470..77b2d42 100644 --- a/src/bnetd/smtp.h +++ b/src/bnetd/smtp.h @@ -25,7 +25,7 @@ namespace pvpgn bool smtp_init(); bool smtp_config(const char* prefs_smtp_ca_cert_store, const char* prefs_smtp_server_url, unsigned int prefs_smtp_port, const char* prefs_smtp_username, const char* prefs_smtp_password); void smtp_cleanup(); - void smtp_send_email(const std::string& to_address, const std::string& from_address, const std::string& subject, std::string message); + void smtp_send_email(const std::string& to_address, const std::string& from_address, const std::string& from_name, const std::string& subject, std::string message); }