From 248d7c8469f8cb37406ea0ce56d0945e38334cfb Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Mon, 16 May 2011 10:41:19 +0100 Subject: Improved server commands and added player permissions. --HG-- extra : rebase_source : 178fe08f10b7de3ebaba088bd24faad795114216 --- src/player.h | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'src/player.h') diff --git a/src/player.h b/src/player.h index f70b52fe7..778bb54b3 100644 --- a/src/player.h +++ b/src/player.h @@ -28,11 +28,29 @@ with this program; if not, write to the Free Software Foundation, Inc., #define PLAYERNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.," +// Player privileges. These form a bitmask stored in the privs field +// of the player, and define things they're allowed to do. See also +// the static methods Player::privsToString and stringToPrivs that +// convert these to human-readable form. +const u64 PRIV_BUILD = 1; // Can build - i.e. modify the world + // (not enforced yet) +const u64 PRIV_TELEPORT = 2; // Can teleport +const u64 PRIV_SETTIME = 4; // Can set the time +const u64 PRIV_PRIVS = 8; // Can grant and revoke privileges +const u64 PRIV_SERVER = 16; // Can manage the server (e.g. shutodwn ,settings) + +const u64 PRIV_DEFAULT = PRIV_BUILD; +const u64 PRIV_ALL = 0x7FFFFFFFFFFFFFFFULL; +const u64 PRIV_INVALID = 0x8000000000000000ULL; + + class Map; class Player { public: + + Player(); virtual ~Player(); @@ -123,6 +141,9 @@ public: u16 hp; + // Player's privileges - a bitmaps of PRIV_xxxx. + u64 privs; + u16 peer_id; protected: @@ -131,6 +152,57 @@ protected: f32 m_yaw; v3f m_speed; v3f m_position; + +public: + + // Converst a prvileges value into a human-readable string, + // with each component separated by a comma. + static std::wstring privsToString(u64 privs) + { + std::wostringstream os(std::ios_base::binary); + if(privs & PRIV_BUILD) + os< pr; + pr=str_split(str, ','); + for(std::vector::iterator i = pr.begin(); + i != pr.end(); ++i) + { + if(*i == L"build") + privs |= PRIV_BUILD; + else if(*i == L"teleport") + privs |= PRIV_TELEPORT; + else if(*i == L"settime") + privs |= PRIV_SETTIME; + else if(*i == L"privs") + privs |= PRIV_PRIVS; + else + return PRIV_INVALID; + } + return privs; + } + }; /* -- cgit v1.2.3 From 1520d49310c07b1f8500582b6ac22baedcc80dcb Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Mon, 16 May 2011 16:13:17 +0100 Subject: Privileges to/from string conversion functions standalone, not static members --- src/player.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++ src/player.h | 57 ++++++++------------------------------------------- src/servercommand.cpp | 8 ++++---- 3 files changed, 62 insertions(+), 52 deletions(-) (limited to 'src/player.h') diff --git a/src/player.cpp b/src/player.cpp index 2ebf158a6..e568d7dee 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -23,6 +23,55 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "constants.h" #include "utility.h" +// Convert a privileges value into a human-readable string, +// with each component separated by a comma. +std::wstring privsToString(u64 privs) +{ + std::wostringstream os(std::ios_base::binary); + if(privs & PRIV_BUILD) + os< pr; + pr=str_split(str, ','); + for(std::vector::iterator i = pr.begin(); + i != pr.end(); ++i) + { + if(*i == L"build") + privs |= PRIV_BUILD; + else if(*i == L"teleport") + privs |= PRIV_TELEPORT; + else if(*i == L"settime") + privs |= PRIV_SETTIME; + else if(*i == L"privs") + privs |= PRIV_PRIVS; + else + return PRIV_INVALID; + } + return privs; +} + + Player::Player(): touching_ground(false), in_water(false), diff --git a/src/player.h b/src/player.h index 778bb54b3..be93766fd 100644 --- a/src/player.h +++ b/src/player.h @@ -43,6 +43,15 @@ const u64 PRIV_DEFAULT = PRIV_BUILD; const u64 PRIV_ALL = 0x7FFFFFFFFFFFFFFFULL; const u64 PRIV_INVALID = 0x8000000000000000ULL; +// Convert a privileges value into a human-readable string, +// with each component separated by a comma. +std::wstring privsToString(u64 privs); + +// Converts a comma-seperated list of privilege values into a +// privileges value. The reverse of privsToString(). Returns +// PRIV_INVALID if there is anything wrong with the input. +u64 stringToPrivs(std::wstring str); + class Map; @@ -155,54 +164,6 @@ protected: public: - // Converst a prvileges value into a human-readable string, - // with each component separated by a comma. - static std::wstring privsToString(u64 privs) - { - std::wostringstream os(std::ios_base::binary); - if(privs & PRIV_BUILD) - os< pr; - pr=str_split(str, ','); - for(std::vector::iterator i = pr.begin(); - i != pr.end(); ++i) - { - if(*i == L"build") - privs |= PRIV_BUILD; - else if(*i == L"teleport") - privs |= PRIV_TELEPORT; - else if(*i == L"settime") - privs |= PRIV_SETTIME; - else if(*i == L"privs") - privs |= PRIV_PRIVS; - else - return PRIV_INVALID; - } - return privs; - } - }; /* diff --git a/src/servercommand.cpp b/src/servercommand.cpp index fa841a1bb..21483b548 100644 --- a/src/servercommand.cpp +++ b/src/servercommand.cpp @@ -93,7 +93,7 @@ void ServerCommand::cmd_privs(std::wostringstream &os, { if(ctx->parms.size() == 1) { - os<player->privs); + os<player->privs); return; } @@ -110,7 +110,7 @@ void ServerCommand::cmd_privs(std::wostringstream &os, return; } - os<privs); + os<privs); } void ServerCommand::cmd_grantrevoke(std::wostringstream &os, @@ -128,7 +128,7 @@ void ServerCommand::cmd_grantrevoke(std::wostringstream &os, return; } - u64 newprivs = Player::stringToPrivs(ctx->parms[2]); + u64 newprivs = stringToPrivs(ctx->parms[2]); if(newprivs == PRIV_INVALID) { os<privs &= ~newprivs; os<privs); + os<privs); } void ServerCommand::cmd_time(std::wostringstream &os, -- cgit v1.2.3