summaryrefslogtreecommitdiffstats
path: root/source/cAuthenticator.h
diff options
context:
space:
mode:
authormadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-02-01 23:38:03 +0100
committermadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-02-01 23:38:03 +0100
commit48d30d6ab4657e00c0c861d67285256daeff1142 (patch)
treeb9dc6b6e59f09224fe3e2b80c5c247b44331e469 /source/cAuthenticator.h
parentAdded all current hooks to the new plugin structure. (diff)
downloadcuberite-48d30d6ab4657e00c0c861d67285256daeff1142.tar
cuberite-48d30d6ab4657e00c0c861d67285256daeff1142.tar.gz
cuberite-48d30d6ab4657e00c0c861d67285256daeff1142.tar.bz2
cuberite-48d30d6ab4657e00c0c861d67285256daeff1142.tar.lz
cuberite-48d30d6ab4657e00c0c861d67285256daeff1142.tar.xz
cuberite-48d30d6ab4657e00c0c861d67285256daeff1142.tar.zst
cuberite-48d30d6ab4657e00c0c861d67285256daeff1142.zip
Diffstat (limited to '')
-rw-r--r--source/cAuthenticator.h81
1 files changed, 74 insertions, 7 deletions
diff --git a/source/cAuthenticator.h b/source/cAuthenticator.h
index dada1ce43..6b9e7142b 100644
--- a/source/cAuthenticator.h
+++ b/source/cAuthenticator.h
@@ -1,13 +1,80 @@
+
+// cAuthenticator.h
+
+// Interfaces to the cAuthenticator class representing the thread that authenticates users against the official MC server
+// Authentication prevents "hackers" from joining with an arbitrary username (possibly impersonating the server admins)
+// For more info, see http://wiki.vg/Session#Server_operation
+// In MCS, authentication is implemented as a single thread that receives queued auth requests and dispatches them one by one.
+
+
+
+
+
#pragma once
+#ifndef CAUTHENTICATOR_H_INCLUDED
+#define CAUTHENTICATOR_H_INCLUDED
+
+#include "cIsThread.h"
+
+
+
+
+
+// fwd: "cRoot.h"
+class cRoot;
+
-class cBlockingTCPLink;
-class cAuthenticator
+
+
+
+class cAuthenticator :
+ public cIsThread
{
+ typedef cIsThread super;
+
public:
- cAuthenticator();
- ~cAuthenticator();
+ cAuthenticator(void);
+
+ /// (Re-)read server and address from INI:
+ void ReadINI(void);
- bool Authenticate( const char* a_PlayerName, const char* a_ServerID );
+ /// Queues a request for authenticating a user. If the auth fails, the user is kicked
+ void Authenticate(const AString & iUserName, const AString & iServerHash);
+
private:
- bool ParseReceived( const char* a_Data, cBlockingTCPLink* a_TCPLink );
-}; \ No newline at end of file
+
+ class cUser
+ {
+ public:
+ AString mName;
+ AString mServerHash;
+
+ cUser(const AString & iName, const AString & iServerHash) : mName(iName), mServerHash(iServerHash) {}
+ } ;
+
+ typedef std::deque<cUser> cUserList;
+
+ cCriticalSection mCS;
+ cUserList mQueue;
+ cEvent mQueueNonempty;
+
+ AString mServer;
+ AString mAddress;
+ bool mShouldAuthenticate;
+
+ // cIsThread override:
+ virtual void Execute(void) override;
+
+ // Returns true if the user authenticated okay, false on error; iLevel is the recursion deptht (bails out if too deep)
+ bool AuthFromAddress(const AString & iServer, const AString & iAddress, const AString & iUserName, int iLevel = 1);
+};
+
+
+
+
+
+#endif // CAUTHENTICATOR_H_INCLUDED
+
+
+
+