/* */ #ifndef _D_NETRC_H_ #define _D_NETRC_H_ #include "common.h" #include #include #include #include "SharedHandle.h" #include "A2STR.h" namespace aria2 { class Authenticatable { public: virtual ~Authenticatable() {} virtual bool match(const std::string& hostname) const = 0; }; class Authenticator : public Authenticatable { private: std::string _machine; std::string _login; std::string _password; std::string _account; public: Authenticator() {} Authenticator(const std::string& machine, const std::string& login, const std::string& password, const std::string& account) :_machine(machine), _login(login), _password(password), _account(account) {} virtual ~Authenticator() {} virtual bool match(const std::string& hostname) const { return hostname == _machine; } const std::string& getMachine() const { return _machine; } void setMachine(const std::string& machine) { _machine = machine; } const std::string& getLogin() const { return _login; } void setLogin(const std::string& login) { _login = login; } const std::string& getPassword() const { return _password; } void setPassword(const std::string& password) { _password = password; } const std::string& getAccount() const { return _account; } void setAccount(const std::string& account) { _account = account; } }; class DefaultAuthenticator : public Authenticator { public: DefaultAuthenticator() {} DefaultAuthenticator(const std::string& login, const std::string& password, const std::string& account) :Authenticator(A2STR::NIL, login, password, account) {} virtual ~DefaultAuthenticator() {} virtual bool match(const std::string& hostname) const { return true; } }; class Netrc { private: std::vector > _authenticators; void storeAuthenticator(const SharedHandle& authenticator); std::string getRequiredNextToken(std::ifstream& f) const; void skipMacdef(std::ifstream& f) const; public: Netrc() {} void parse(const std::string& path); SharedHandle findAuthenticator (const std::string& hostname) const; const std::vector >& getAuthenticators() const { return _authenticators; } void addAuthenticator(const SharedHandle& authenticator) { _authenticators.push_back(authenticator); } static const std::string MACHINE; static const std::string DEFAULT; static const std::string LOGIN; static const std::string PASSWORD; static const std::string ACCOUNT; static const std::string MACDEF; }; } // namespace aria2 #endif // _D_NETRC_H_