]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/auth.cpp
Remove stuff made obsolete by making players more ActiveObject-like and raise protoco...
[dragonfireclient.git] / src / auth.cpp
index 49985e6978950b3c87c3dc188993426794f65d73..9920e0e40a9dbae0766b5aeaba8fb1fdffb1e763 100644 (file)
@@ -25,6 +25,28 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "strfnd.h"
 #include "debug.h"
 
+std::set<std::string> privsToSet(u64 privs)
+{
+       std::set<std::string> s;
+       if(privs & PRIV_BUILD)
+               s.insert("build");
+       if(privs & PRIV_TELEPORT)
+               s.insert("teleport");
+       if(privs & PRIV_SETTIME)
+               s.insert("settime");
+       if(privs & PRIV_PRIVS)
+               s.insert("privs");
+       if(privs & PRIV_SHOUT)
+               s.insert("shout");
+       if(privs & PRIV_BAN)
+               s.insert("ban");
+       if(privs & PRIV_GIVE)
+               s.insert("give");
+       if(privs & PRIV_PASSWORD)
+               s.insert("password");
+       return s;
+}
+
 // Convert a privileges value into a human-readable string,
 // with each component separated by a comma.
 std::string privsToString(u64 privs)
@@ -40,6 +62,12 @@ std::string privsToString(u64 privs)
                os<<"privs,";
        if(privs & PRIV_SHOUT)
                os<<"shout,";
+       if(privs & PRIV_BAN)
+               os<<"ban,";
+       if(privs & PRIV_GIVE)
+               os<<"give,";
+       if(privs & PRIV_PASSWORD)
+               os<<"password,";
        if(os.tellp())
        {
                // Drop the trailing comma. (Why on earth can't
@@ -70,6 +98,12 @@ u64 stringToPrivs(std::string str)
                        privs |= PRIV_PRIVS;
                else if(s == "shout")
                        privs |= PRIV_SHOUT;
+               else if(s == "ban")
+                       privs |= PRIV_BAN;
+               else if(s == "give")
+                       privs |= PRIV_GIVE;
+               else if(s == "password")
+                       privs |= PRIV_PASSWORD;
                else
                        return PRIV_INVALID;
        }
@@ -77,7 +111,8 @@ u64 stringToPrivs(std::string str)
 }
 
 AuthManager::AuthManager(const std::string &authfilepath):
-               m_authfilepath(authfilepath)
+               m_authfilepath(authfilepath),
+               m_modified(false)
 {
        m_mutex.Init();
        
@@ -138,6 +173,8 @@ void AuthManager::load()
                ad.privs = privs;
                m_authdata[name] = ad;
        }
+
+       m_modified = false;
 }
 
 void AuthManager::save()
@@ -162,6 +199,8 @@ void AuthManager::save()
                AuthData ad = i.getNode()->getValue();
                os<<name<<":"<<ad.pwd<<":"<<privsToString(ad.privs)<<"\n";
        }
+
+       m_modified = false;
 }
 
 bool AuthManager::exists(const std::string &username)
@@ -180,6 +219,8 @@ void AuthManager::set(const std::string &username, AuthData ad)
        JMutexAutoLock lock(m_mutex);
        
        m_authdata[username] = ad;
+
+       m_modified = true;
 }
 
 void AuthManager::add(const std::string &username)
@@ -187,6 +228,8 @@ void AuthManager::add(const std::string &username)
        JMutexAutoLock lock(m_mutex);
        
        m_authdata[username] = AuthData();
+
+       m_modified = true;
 }
 
 std::string AuthManager::getPassword(const std::string &username)
@@ -214,6 +257,8 @@ void AuthManager::setPassword(const std::string &username,
        AuthData ad = n->getValue();
        ad.pwd = password;
        n->setValue(ad);
+
+       m_modified = true;
 }
 
 u64 AuthManager::getPrivs(const std::string &username)
@@ -240,5 +285,14 @@ void AuthManager::setPrivs(const std::string &username, u64 privs)
        AuthData ad = n->getValue();
        ad.privs = privs;
        n->setValue(ad);
+
+       m_modified = true;
 }
 
+bool AuthManager::isModified()
+{
+       JMutexAutoLock lock(m_mutex);
+       return m_modified;
+}
+
+