Fix automatic unban when user login with Warcraft 3 https://github.com/HarpyWar/pvpgn/issues/27

Extract duplicated code for output author, time, reason into a function
This commit is contained in:
HarpyWar 2014-06-15 22:04:14 +04:00
parent e5493046a2
commit 7c40b0d10c
5 changed files with 60 additions and 91 deletions

View file

@ -39,6 +39,8 @@
#include "clan.h"
#include "anongame_infos.h"
#include "team.h"
#include "server.h"
#include "compat/snprintf.h"
#include "common/setup_after.h"
namespace pvpgn
@ -450,6 +452,42 @@ namespace pvpgn
return account_set_strattr(account, "BNET\\auth\\muteby", val);
}
/* Return text with account lock */
extern char * account_get_locktext(t_account * account, bool with_author)
{
char msgtemp[MAX_MESSAGE_LEN], msgtemp2[MAX_MESSAGE_LEN];
snprintf(msgtemp, sizeof(msgtemp), "");
// append author of ban
if (with_author)
{
if (char const * author = account_get_auth_lockby(account))
if (author && author[0] != '\0')
{
snprintf(msgtemp2, sizeof(msgtemp2), " by %s", author);
std::strcat(msgtemp, msgtemp2);
}
}
// append remaining time
if (unsigned int locktime = account_get_auth_locktime(account))
snprintf(msgtemp2, sizeof(msgtemp2), " for %.48s", seconds_to_timestr(locktime - now));
else
snprintf(msgtemp2, sizeof(msgtemp2), " permanently");
std::strcat(msgtemp, msgtemp2);
// append reason
char const * reason = account_get_auth_lockreason(account);
if (reason && reason[0] != '\0')
{
snprintf(msgtemp2, sizeof(msgtemp2), " with a reason \"%s\"", reason);
std::strcat(msgtemp, msgtemp2);
}
return msgtemp;
}
/****************************************************************/

View file

@ -93,6 +93,7 @@ namespace pvpgn
extern int account_set_auth_mutetime(t_account * account, unsigned int val);
extern int account_set_auth_mutereason(t_account * account, char const * val);
extern int account_set_auth_muteby(t_account * account, char const * val);
extern char * account_get_locktext(t_account * account, bool with_author = true);
/* profile */
extern char const * account_get_sex(t_account * account); /* the profile attributes are updated directly in bnetd.c */

View file

@ -681,36 +681,12 @@ namespace pvpgn
if (type != message_type_join && type != message_type_part)
return;
// if user muted
// if user is muted
if (account_get_auth_mute(acc) == 1)
{
char msgtemp[MAX_MESSAGE_LEN], msgtemp2[MAX_MESSAGE_LEN];
snprintf(msgtemp, sizeof(msgtemp), "You can't talk on the channel. Your account has been muted");
// append author of ban
char const * author = account_get_auth_muteby(acc);
if (author && author[0] != '\0')
{
snprintf(msgtemp2, sizeof(msgtemp2), " by %s", author);
std::strcat(msgtemp, msgtemp2);
}
// append remaining time
if (unsigned int locktime = account_get_auth_mutetime(acc))
snprintf(msgtemp2, sizeof(msgtemp2), " for %.48s", seconds_to_timestr(locktime - std::time(NULL)));
else
snprintf(msgtemp2, sizeof(msgtemp2), " permanently");
std::strcat(msgtemp, msgtemp2);
// append reason
char const * reason = account_get_auth_mutereason(acc);
if (reason && reason[0] != '\0')
{
snprintf(msgtemp2, sizeof(msgtemp2), " with a reason \"%s\"", reason);
std::strcat(msgtemp, msgtemp2);
}
snprintf(msgtemp, sizeof(msgtemp), "You can't talk on the channel. Your account has been muted%s", account_get_locktext(acc, true));
message_send_text(me, message_type_error, me, msgtemp);
return;
}

View file

@ -4298,7 +4298,6 @@ namespace pvpgn
t_account * account;
char const * username, *reason = "", *hours = "24"; // default time 24 hours
unsigned int sectime;
char msgtemp3[MAX_MESSAGE_LEN];
std::vector<std::string> args = split_command(text, 3);
if (args[1].empty())
@ -4325,28 +4324,15 @@ namespace pvpgn
account_set_auth_lockby(account, conn_get_username(c));
// append remaining time
if (sectime == 0)
snprintf(msgtemp3, sizeof(msgtemp3), " permanently");
else
snprintf(msgtemp3, sizeof(msgtemp3), " for %.48s", seconds_to_timestr(sectime - now));
// append reason
if (reason[0] != '\0')
{
snprintf(msgtemp2, sizeof(msgtemp2), " with a reason \"%s\"", reason);
std::strcat(msgtemp3, msgtemp2);
}
// send message to author
snprintf(msgtemp, sizeof(msgtemp), "Account %s is now locked%s", account_get_name(account), msgtemp3);
snprintf(msgtemp, sizeof(msgtemp), "Account %s is now locked%s", account_get_name(account), account_get_locktext(account, false));
message_send_text(c, message_type_error, c, msgtemp);
// send message to locked user
if ((user = connlist_find_connection_by_accountname(username)))
{
snprintf(msgtemp, sizeof(msgtemp), "Your account has just been locked by %s%s", conn_get_username(c), msgtemp3);
message_send_text(user, message_type_info, user, msgtemp);
snprintf(msgtemp, sizeof(msgtemp), "Your account has just been locked%s", account_get_locktext(account, true));
message_send_text(user, message_type_error, user, msgtemp);
}
return 0;
@ -4372,7 +4358,10 @@ namespace pvpgn
}
if ((user = connlist_find_connection_by_accountname(text)))
message_send_text(user, message_type_info, user, "Your account has just been unlocked by an admin.");
{
snprintf(msgtemp, sizeof(msgtemp), "Your account has just been unlocked by %s", conn_get_username(c));
message_send_text(user, message_type_info, user, msgtemp);
}
account_set_auth_lock(account, 0);
message_send_text(c, message_type_error, c, "That user's account is now unlocked.");
@ -4386,7 +4375,6 @@ namespace pvpgn
t_account * account;
char const * username, *reason = "", *hours = "1"; // default time 1 hour
unsigned int sectime;
char msgtemp3[MAX_MESSAGE_LEN];
std::vector<std::string> args = split_command(text, 3);
if (args[1].empty())
@ -4413,28 +4401,15 @@ namespace pvpgn
account_set_auth_mutereason(account, reason);
account_set_auth_muteby(account, conn_get_username(c));
// append remaining time
if (sectime == 0)
snprintf(msgtemp3, sizeof(msgtemp3), " permanently");
else
snprintf(msgtemp3, sizeof(msgtemp3), " for %.48s", seconds_to_timestr(sectime - now));
// append reason
if (reason[0] != '\0')
{
snprintf(msgtemp2, sizeof(msgtemp2), " with a reason \"%s\"", reason);
std::strcat(msgtemp3, msgtemp2);
}
// send message to author
snprintf(msgtemp, sizeof(msgtemp), "Account %s is now muted%s", account_get_name(account), msgtemp3);
snprintf(msgtemp, sizeof(msgtemp), "Account %s is now muted%s", account_get_name(account), account_get_locktext(account, false));
message_send_text(c, message_type_error, c, msgtemp);
// send message to muted user
if ((user = connlist_find_connection_by_accountname(username)))
{
snprintf(msgtemp, sizeof(msgtemp), "Your account has just been muted by %s%s", conn_get_username(c), msgtemp3);
message_send_text(user, message_type_info, user, msgtemp);
snprintf(msgtemp, sizeof(msgtemp), "Your account has just been muted%s", account_get_locktext(account, true));
message_send_text(user, message_type_error, user, msgtemp);
}
return 0;
@ -4460,7 +4435,10 @@ namespace pvpgn
}
if ((user = connlist_find_connection_by_accountname(text)))
message_send_text(user, message_type_info, user, "Your account has just been unmuted by an admin.");
{
snprintf(msgtemp, sizeof(msgtemp), "Your account has just been unmuted by %s", conn_get_username(c));
message_send_text(user, message_type_info, user, msgtemp);
}
account_set_auth_mute(account, 0);
message_send_text(c, message_type_error, c, "That user's account is now unmuted.");

View file

@ -1687,34 +1687,9 @@ namespace pvpgn
eventlog(eventlog_level_info, __FUNCTION__, "[%d] login for \"%s\" refused (this account is locked)", conn_get_socket(c), username);
if (supports_locked_reply)
{
char msgtemp[MAX_MESSAGE_LEN], msgtemp2[MAX_MESSAGE_LEN];
snprintf(msgtemp, sizeof(msgtemp), "This account has been locked");
// append author of ban
if (char const * author = account_get_auth_lockby(account))
if (author && author[0] != '\0')
{
snprintf(msgtemp2, sizeof(msgtemp2), " by %s", author);
std::strcat(msgtemp, msgtemp2);
}
// append remaining time
if (unsigned int locktime = account_get_auth_locktime(account))
snprintf(msgtemp2, sizeof(msgtemp2), " for %.48s", seconds_to_timestr(locktime - now));
else
snprintf(msgtemp2, sizeof(msgtemp2), " permanently");
std::strcat(msgtemp, msgtemp2);
// append reason
char const * reason = account_get_auth_lockreason(account);
if (reason && reason[0] != '\0')
{
snprintf(msgtemp2, sizeof(msgtemp2), " with a reason \"%s\"", reason);
std::strcat(msgtemp, msgtemp2);
}
bn_int_set(&rpacket->u.server_loginreply1.message, SERVER_LOGINREPLY2_MESSAGE_LOCKED);
char msgtemp[MAX_MESSAGE_LEN];
snprintf(msgtemp, sizeof(msgtemp), "This account has been locked%s", account_get_locktext(account, true));
packet_append_string(rpacket, msgtemp);
}
else {
@ -2137,7 +2112,9 @@ namespace pvpgn
else if (account_get_auth_lock(account) == 1) { /* default to false */
eventlog(eventlog_level_info, __FUNCTION__, "[%d] login for \"%s\" refused (this account is locked)", conn_get_socket(c), username);
bn_int_set(&rpacket->u.server_logonproofreply.response, SERVER_LOGONPROOFREPLY_RESPONSE_CUSTOM);
packet_append_string(rpacket, "This account has been locked.");
char msgtemp[MAX_MESSAGE_LEN];
snprintf(msgtemp, sizeof(msgtemp), "This account has been locked%s", account_get_locktext(account, true));
packet_append_string(rpacket, msgtemp);
}
else {
t_hash serverhash;
@ -5329,7 +5306,6 @@ namespace pvpgn
eventlog(eventlog_level_info, __FUNCTION__, "[%d] get password for account \"%s\" to email \"%s\"", conn_get_socket(c), account_get_name(account), email);
return 0;
}
}
}