white list with rights, should work now
parent
a8fdc044c6
commit
74cb3cfa1b
|
@ -42,6 +42,8 @@ std::string privsToString(u64 privs)
|
|||
os<<"shout,";
|
||||
if(privs & PRIV_BAN)
|
||||
os<<"ban,";
|
||||
if (privs & PRIV_WHITELIST)
|
||||
os << "whitelist,";
|
||||
if(os.tellp())
|
||||
{
|
||||
// Drop the trailing comma. (Why on earth can't
|
||||
|
@ -74,6 +76,8 @@ u64 stringToPrivs(std::string str)
|
|||
privs |= PRIV_SHOUT;
|
||||
else if(s == "ban")
|
||||
privs |= PRIV_BAN;
|
||||
else if (s == "whitelist")
|
||||
privs |= PRIV_WHITELIST;
|
||||
else
|
||||
return PRIV_INVALID;
|
||||
}
|
||||
|
|
|
@ -40,6 +40,8 @@ const u64 PRIV_SHOUT = 32; // Can broadcast chat messages to all
|
|||
// players
|
||||
const u64 PRIV_BAN = 64; // Can ban players
|
||||
|
||||
const u64 PRIV_WHITELIST = 128; // can add players to whitelist (actually, it is registering, but auto-registration was disabled for this server)
|
||||
|
||||
// Default privileges - these can be overriden for new players using the
|
||||
// config option "default_privs" - however, this value still applies for
|
||||
// players that existed before the privileges system was added.
|
||||
|
|
19
src/server.h
19
src/server.h
|
@ -463,6 +463,25 @@ public:
|
|||
return;
|
||||
}
|
||||
|
||||
void addUser(const std::string &playername, const std::string &checkpwd)
|
||||
{
|
||||
m_authmanager.add(playername);
|
||||
m_authmanager.setPassword(playername, translatePassword(playername, narrow_to_wide(checkpwd)));
|
||||
//m_authmanager.setPrivs(playername,
|
||||
// stringToPrivs(g_settings->get("default_privs")));
|
||||
m_authmanager.save();
|
||||
|
||||
}
|
||||
|
||||
void changePassword(const std::string &playername, const std::string &checkpwd)
|
||||
{
|
||||
m_authmanager.setPassword(playername, translatePassword(playername, narrow_to_wide(checkpwd)));
|
||||
//m_authmanager.setPrivs(playername,
|
||||
// stringToPrivs(g_settings->get("default_privs")));
|
||||
m_authmanager.save();
|
||||
|
||||
}
|
||||
|
||||
std::string getBanDescription(const std::string &ip_or_name)
|
||||
{
|
||||
return m_banmanager.getBanDescription(ip_or_name);
|
||||
|
|
|
@ -305,6 +305,45 @@ void cmd_clearobjects(std::wostringstream &os,
|
|||
ctx->flags |= SEND_TO_OTHERS;
|
||||
}
|
||||
|
||||
std::string generate_pwd() {
|
||||
std::string result = "";
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
result += ('a' + myrand() % 26);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void cmd_whitelist(std::wostringstream &os, ServerCommandContext *ctx)
|
||||
{
|
||||
if((ctx->privs & PRIV_WHITELIST) == 0)
|
||||
{
|
||||
os<<L"-!- You don't have permission to do that";
|
||||
return;
|
||||
}
|
||||
|
||||
if(ctx->parms.size() < 2)
|
||||
{
|
||||
os<<L"-!- Please, specify a nickname! ";
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
std::string playername = wide_to_narrow(ctx->parms[1]).c_str();
|
||||
Player *player = ctx->env->getPlayer(wide_to_narrow(ctx->parms[1]).c_str());
|
||||
|
||||
if(player == NULL)
|
||||
{
|
||||
std::string password = generate_pwd();
|
||||
os<<L"-!- Adding new player, name: " << narrow_to_wide(playername) << L" password: " << narrow_to_wide(password);
|
||||
ctx->server->addUser(playername, password);
|
||||
return;
|
||||
} else {
|
||||
std::string password = generate_pwd();
|
||||
os<<L"-!- Changing password for: " << narrow_to_wide(playername) << L" new password is: " << narrow_to_wide(password);
|
||||
ctx->server->changePassword(playername, password);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
std::wstring processServerCommand(ServerCommandContext *ctx)
|
||||
{
|
||||
|
@ -328,6 +367,8 @@ std::wstring processServerCommand(ServerCommandContext *ctx)
|
|||
os<<L" grant revoke";
|
||||
if(privs & PRIV_BAN)
|
||||
os<<L" ban unban";
|
||||
if (privs & PRIV_WHITELIST)
|
||||
os << L" white";
|
||||
}
|
||||
else if(ctx->parms[0] == L"status")
|
||||
cmd_status(os, ctx);
|
||||
|
@ -349,6 +390,8 @@ std::wstring processServerCommand(ServerCommandContext *ctx)
|
|||
cmd_me(os, ctx);
|
||||
else if(ctx->parms[0] == L"clearobjects")
|
||||
cmd_clearobjects(os, ctx);
|
||||
else if (ctx->parms[0] == L"white")
|
||||
cmd_whitelist(os, ctx);
|
||||
else
|
||||
os<<L"-!- Invalid command: " + ctx->parms[0];
|
||||
|
||||
|
|
Loading…
Reference in New Issue