%PDF- %PDF-
Direktori : /data/old/usr/local/include/znc/ |
Current File : //data/old/usr/local/include/znc/User.h |
/* * Copyright (C) 2004-2018 ZNC, see the NOTICE file for details. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ZNC_USER_H #define ZNC_USER_H #include <znc/zncconfig.h> #include <znc/Utils.h> #include <znc/Buffer.h> #include <znc/Nick.h> #include <znc/Translation.h> #include <set> #include <vector> class CModules; class CChan; class CClient; class CConfig; class CFile; class CIRCNetwork; class CIRCSock; class CUserTimer; class CServer; class CUser : private CCoreTranslationMixin { public: CUser(const CString& sUserName); ~CUser(); CUser(const CUser&) = delete; CUser& operator=(const CUser&) = delete; bool ParseConfig(CConfig* Config, CString& sError); // TODO refactor this enum eHashType { HASH_NONE, HASH_MD5, HASH_SHA256, HASH_DEFAULT = HASH_SHA256 }; // If you change the default hash here and in HASH_DEFAULT, // don't forget CUtils::sDefaultHash! // TODO refactor this static CString SaltedHash(const CString& sPass, const CString& sSalt) { return CUtils::SaltedSHA256Hash(sPass, sSalt); } CConfig ToConfig() const; bool CheckPass(const CString& sPass) const; bool AddAllowedHost(const CString& sHostMask); bool RemAllowedHost(const CString& sHostMask); void ClearAllowedHosts(); bool IsHostAllowed(const CString& sHost) const; bool IsValid(CString& sErrMsg, bool bSkipPass = false) const; static bool IsValidUserName(const CString& sUserName); static CString MakeCleanUserName(const CString& sUserName); // Modules CModules& GetModules() { return *m_pModules; } const CModules& GetModules() const { return *m_pModules; } // !Modules // Networks CIRCNetwork* AddNetwork(const CString& sNetwork, CString& sErrorRet); bool DeleteNetwork(const CString& sNetwork); bool AddNetwork(CIRCNetwork* pNetwork); void RemoveNetwork(CIRCNetwork* pNetwork); CIRCNetwork* FindNetwork(const CString& sNetwork) const; const std::vector<CIRCNetwork*>& GetNetworks() const; bool HasSpaceForNewNetwork() const; // !Networks bool PutUser(const CString& sLine, CClient* pClient = nullptr, CClient* pSkipClient = nullptr); bool PutAllUser(const CString& sLine, CClient* pClient = nullptr, CClient* pSkipClient = nullptr); bool PutStatus(const CString& sLine, CClient* pClient = nullptr, CClient* pSkipClient = nullptr); bool PutStatusNotice(const CString& sLine, CClient* pClient = nullptr, CClient* pSkipClient = nullptr); bool PutModule(const CString& sModule, const CString& sLine, CClient* pClient = nullptr, CClient* pSkipClient = nullptr); bool PutModNotice(const CString& sModule, const CString& sLine, CClient* pClient = nullptr, CClient* pSkipClient = nullptr); bool IsUserAttached() const; void UserConnected(CClient* pClient); void UserDisconnected(CClient* pClient); CString GetLocalDCCIP() const; CString ExpandString(const CString& sStr) const; CString& ExpandString(const CString& sStr, CString& sRet) const; CString AddTimestamp(const CString& sStr) const; CString AddTimestamp(time_t tm, const CString& sStr) const; CString AddTimestamp(timeval tv, const CString& sStr) const; void CloneNetworks(const CUser& User); bool Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks = true); void BounceAllClients(); void AddBytesRead(unsigned long long u) { m_uBytesRead += u; } void AddBytesWritten(unsigned long long u) { m_uBytesWritten += u; } // Setters void SetNick(const CString& s); void SetAltNick(const CString& s); void SetIdent(const CString& s); void SetRealName(const CString& s); void SetBindHost(const CString& s); void SetDCCBindHost(const CString& s); void SetPass(const CString& s, eHashType eHash, const CString& sSalt = ""); void SetMultiClients(bool b); void SetDenyLoadMod(bool b); void SetAdmin(bool b); void SetDenySetBindHost(bool b); bool SetStatusPrefix(const CString& s); void SetDefaultChanModes(const CString& s); void SetClientEncoding(const CString& s); void SetQuitMsg(const CString& s); bool AddCTCPReply(const CString& sCTCP, const CString& sReply); bool DelCTCPReply(const CString& sCTCP); /** @deprecated Use SetChanBufferSize() or SetQueryBufferSize() instead. */ bool SetBufferCount(unsigned int u, bool bForce = false); bool SetChanBufferSize(unsigned int u, bool bForce = false); bool SetQueryBufferSize(unsigned int u, bool bForce = false); void SetAutoClearChanBuffer(bool b); void SetAutoClearQueryBuffer(bool b); bool SetLanguage(const CString& s); void SetBeingDeleted(bool b) { m_bBeingDeleted = b; } void SetTimestampFormat(const CString& s) { m_sTimestampFormat = s; } void SetTimestampAppend(bool b) { m_bAppendTimestamp = b; } void SetTimestampPrepend(bool b) { m_bPrependTimestamp = b; } void SetAuthOnlyViaModule(bool b) { m_bAuthOnlyViaModule = b; } void SetTimezone(const CString& s) { m_sTimezone = s; } void SetJoinTries(unsigned int i) { m_uMaxJoinTries = i; } void SetMaxJoins(unsigned int i) { m_uMaxJoins = i; } void SetSkinName(const CString& s) { m_sSkinName = s; } void SetMaxNetworks(unsigned int i) { m_uMaxNetworks = i; } void SetMaxQueryBuffers(unsigned int i) { m_uMaxQueryBuffers = i; } void SetNoTrafficTimeout(unsigned int i) { m_uNoTrafficTimeout = i; } // !Setters // Getters const std::vector<CClient*>& GetUserClients() const { return m_vClients; } std::vector<CClient*> GetAllClients() const; const CString& GetUserName() const; const CString& GetCleanUserName() const; const CString& GetNick(bool bAllowDefault = true) const; const CString& GetAltNick(bool bAllowDefault = true) const; const CString& GetIdent(bool bAllowDefault = true) const; CString GetRealName() const; const CString& GetBindHost() const; const CString& GetDCCBindHost() const; const CString& GetPass() const; eHashType GetPassHashType() const; const CString& GetPassSalt() const; const std::set<CString>& GetAllowedHosts() const; const CString& GetTimestampFormat() const; const CString& GetClientEncoding() const; bool GetTimestampAppend() const; bool GetTimestampPrepend() const; const CString& GetUserPath() const; bool DenyLoadMod() const; bool IsAdmin() const; bool DenySetBindHost() const; bool MultiClients() const; bool AuthOnlyViaModule() const; const CString& GetStatusPrefix() const; const CString& GetDefaultChanModes() const; /** How long must an IRC connection be idle before ZNC sends a ping */ unsigned int GetPingFrequency() const { return m_uNoTrafficTimeout / 2; } /** Time between checks if PINGs need to be sent */ unsigned int GetPingSlack() const { return m_uNoTrafficTimeout / 6; } /** Timeout after which IRC connections are closed. Must * obviously be greater than GetPingFrequency() + GetPingSlack(). */ unsigned int GetNoTrafficTimeout() const { return m_uNoTrafficTimeout; } CString GetQuitMsg() const; const MCString& GetCTCPReplies() const; /** @deprecated Use GetChanBufferSize() or GetQueryBufferSize() instead. */ unsigned int GetBufferCount() const; unsigned int GetChanBufferSize() const; unsigned int GetQueryBufferSize() const; bool AutoClearChanBuffer() const; bool AutoClearQueryBuffer() const; bool IsBeingDeleted() const { return m_bBeingDeleted; } CString GetTimezone() const { return m_sTimezone; } unsigned long long BytesRead() const; unsigned long long BytesWritten() const; unsigned int JoinTries() const { return m_uMaxJoinTries; } unsigned int MaxJoins() const { return m_uMaxJoins; } CString GetSkinName() const; CString GetLanguage() const; unsigned int MaxNetworks() const { return m_uMaxNetworks; } unsigned int MaxQueryBuffers() const { return m_uMaxQueryBuffers; } // !Getters protected: const CString m_sUserName; const CString m_sCleanUserName; CString m_sNick; CString m_sAltNick; CString m_sIdent; CString m_sRealName; CString m_sBindHost; CString m_sDCCBindHost; CString m_sPass; CString m_sPassSalt; CString m_sStatusPrefix; CString m_sDefaultChanModes; CString m_sClientEncoding; CString m_sQuitMsg; MCString m_mssCTCPReplies; CString m_sTimestampFormat; CString m_sTimezone; eHashType m_eHashType; // Paths CString m_sUserPath; // !Paths bool m_bMultiClients; bool m_bDenyLoadMod; bool m_bAdmin; bool m_bDenySetBindHost; bool m_bAutoClearChanBuffer; bool m_bAutoClearQueryBuffer; bool m_bBeingDeleted; bool m_bAppendTimestamp; bool m_bPrependTimestamp; bool m_bAuthOnlyViaModule; CUserTimer* m_pUserTimer; std::vector<CIRCNetwork*> m_vIRCNetworks; std::vector<CClient*> m_vClients; std::set<CString> m_ssAllowedHosts; unsigned int m_uChanBufferSize; unsigned int m_uQueryBufferSize; unsigned long long m_uBytesRead; unsigned long long m_uBytesWritten; unsigned int m_uMaxJoinTries; unsigned int m_uMaxNetworks; unsigned int m_uMaxQueryBuffers; unsigned int m_uMaxJoins; unsigned int m_uNoTrafficTimeout; CString m_sSkinName; CString m_sLanguage; CModules* m_pModules; private: void SetKeepBuffer(bool b) { SetAutoClearChanBuffer(!b); } // XXX compatibility crap, added in 0.207 bool LoadModule(const CString& sModName, const CString& sArgs, const CString& sNotice, CString& sError); }; #endif // !ZNC_USER_H