From 6b7df851d3d4f237c17528310e46bd2ffb91ba8f Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Tue, 30 Oct 2007 12:48:01 +0000 Subject: 2007-10-30 Tatsuhiro Tsujikawa Added ftp://USER:PASSWD@Servername automatic parsing. * src/Request.{h, cc}: Removed AuthResolvers. Added _username and _password. Recognize username and password in URI. * src/main.cc: Use AuthConfigFactory instead of RequestFactory. * src/RequestGroup.cc: Use AuthConfigFactory instead of RequestFactory. * src/RequestFactory.{h, cc}: Removed. * src/AuthConfigFactory.{h, cc}: New class. * src/FtpConnection.cc: Use AuthConfigFactory. * src/HttpRequest.cc: Use AuthConfigFactory. * test/HttpRequestTest.cc: Updated. * test/RequestTest.cc: Updated. * test/AuthConfigFactoryTest.cc: New class. * test/RequestFactoryTest.cc: Removed. --- src/AuthConfigFactory.cc | 124 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 src/AuthConfigFactory.cc (limited to 'src/AuthConfigFactory.cc') diff --git a/src/AuthConfigFactory.cc b/src/AuthConfigFactory.cc new file mode 100644 index 00000000..1dfac71d --- /dev/null +++ b/src/AuthConfigFactory.cc @@ -0,0 +1,124 @@ +/* */ +#include "AuthConfigFactory.h" +#include "Option.h" +#include "AuthConfig.h" +#include "Netrc.h" +#include "DefaultAuthResolver.h" +#include "NetrcAuthResolver.h" +#include "prefs.h" +#include "Request.h" + +AuthConfigFactory::AuthConfigFactory(const Option* option): + _option(option), _netrc(0) {} + +AuthConfigFactory::~AuthConfigFactory() {} + +AuthConfigHandle AuthConfigFactory::createAuthConfig(const RequestHandle& request) const +{ + if(request->getProtocol() == "http" || request->getProtocol() == "https") { + return createHttpAuthResolver()->resolveAuthConfig(request->getHost()); + } else if(request->getProtocol() == "ftp") { + if(!request->getUsername().empty()) { + return createAuthConfig(request->getUsername(), request->getPassword()); + } else { + return createFtpAuthResolver()->resolveAuthConfig(request->getHost()); + } + } else { + return new AuthConfig(); + } +} + +AuthConfigHandle AuthConfigFactory::createAuthConfigForHttpProxy(const RequestHandle& request) const +{ + return createHttpProxyAuthResolver()->resolveAuthConfig(request->getHost()); +} + +AuthConfigHandle AuthConfigFactory::createAuthConfig(const string& user, const string& password) const +{ + if(user.length() > 0) { + return new AuthConfig(user, password); + } else { + return 0; + } +} + +AuthResolverHandle AuthConfigFactory::createHttpAuthResolver() const +{ + AbstractAuthResolverHandle resolver = 0; + if(true || _option->getAsBool(PREF_NO_NETRC)) { + resolver = new DefaultAuthResolver(); + } else { + NetrcAuthResolverHandle authResolver = new NetrcAuthResolver(); + authResolver->setNetrc(_netrc); + resolver = authResolver; + } + resolver->setUserDefinedAuthConfig(createAuthConfig(_option->get(PREF_HTTP_USER), _option->get(PREF_HTTP_PASSWD))); + return resolver; +} + +AuthResolverHandle AuthConfigFactory::createFtpAuthResolver() const +{ + AbstractAuthResolverHandle resolver = 0; + if(_option->getAsBool(PREF_NO_NETRC)) { + resolver = new DefaultAuthResolver(); + } else { + NetrcAuthResolverHandle authResolver = new NetrcAuthResolver(); + authResolver->setNetrc(_netrc); + resolver = authResolver; + } + resolver->setUserDefinedAuthConfig(createAuthConfig(_option->get(PREF_FTP_USER), _option->get(PREF_FTP_PASSWD))); + resolver->setDefaultAuthConfig(new AuthConfig("anonymous", "ARIA2USER@")); + return resolver; +} + +AuthResolverHandle AuthConfigFactory::createHttpProxyAuthResolver() const +{ + AbstractAuthResolverHandle resolver = 0; + if(true || _option->getAsBool(PREF_NO_NETRC)) { + resolver = new DefaultAuthResolver(); + } else { + NetrcAuthResolverHandle authResolver = new NetrcAuthResolver(); + authResolver->setNetrc(_netrc); + resolver = authResolver; + } + resolver->setUserDefinedAuthConfig(createAuthConfig(_option->get(PREF_HTTP_PROXY_USER), _option->get(PREF_HTTP_PROXY_PASSWD))); + return resolver; +} + +void AuthConfigFactory::setNetrc(const NetrcHandle& netrc) +{ + _netrc = netrc; +} -- cgit