/* */ #ifndef _D_NETRC_H_ #define _D_NETRC_H_ #include "common.h" #include "SharedHandle.h" #include "A2STR.h" #include #include #include namespace aria2 { class Authenticatable { public: virtual ~Authenticatable() {} virtual bool match(const std::string& hostname) const = 0; }; typedef SharedHandle AuthenticatableHandle; 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) { this->machine = machine; } const std::string& getLogin() const { return login; } void setLogin(const std::string& login) { this->login = login; } const std::string& getPassword() const { return password; } void setPassword(const std::string& password) { this->password = password; } const std::string& getAccount() const { return account; } void setAccount(const std::string& account) { this->account = account; } }; typedef SharedHandle AuthenticatorHandle; typedef std::deque Authenticators; 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; } }; typedef SharedHandle DefaultAuthenticatorHandle; class Netrc { private: Authenticators authenticators; void storeAuthenticator(const AuthenticatorHandle& authenticator); std::string getRequiredNextToken(std::ifstream& f) const; void skipMacdef(std::ifstream& f) const; public: Netrc() {} void parse(const std::string& path); AuthenticatorHandle findAuthenticator(const std::string& hostname) const; const Authenticators& getAuthenticators() const { return authenticators; } void addAuthenticator(const AuthenticatorHandle& 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; }; typedef SharedHandle NetrcHandle; } // namespace aria2 #endif // _D_NETRC_H_