/* */ #ifndef _D_NETRC_H_ #define _D_NETRC_H_ #include "common.h" #include #include #include #include "SharedHandle.h" #include "A2STR.h" #include "util.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 { if(util::isNumericHost(hostname)) { return hostname == machine_; } else { if(util::startsWith(machine_, A2STR::DOT_C)) { return util::endsWith(A2STR::DOT_C+hostname, machine_); } else { 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 A2_MACHINE; static const std::string A2_DEFAULT; static const std::string A2_LOGIN; static const std::string A2_PASSWORD; static const std::string A2_ACCOUNT; static const std::string A2_MACDEF; }; } // namespace aria2 #endif // _D_NETRC_H_