mirror of https://github.com/aria2/aria2
2008-09-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Reverted previous change. Insert username+'@' to URI(after ftp://) when URI is FTP scheme and username is not in URI. * src/HttpRequest.cc * src/Request.cc * test/HttpRequestTest.cc * test/RequestTest.ccpull/1/head
parent
789e1926cb
commit
87a5bb50c2
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2008-09-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
Reverted previous change.
|
||||||
|
Insert username+'@' to URI(after ftp://) when URI is FTP scheme and
|
||||||
|
username is not in URI.
|
||||||
|
* src/HttpRequest.cc
|
||||||
|
* src/Request.cc
|
||||||
|
* test/HttpRequestTest.cc
|
||||||
|
* test/RequestTest.cc
|
||||||
|
|
||||||
2008-09-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2008-09-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
Now colon is required for username and password in FTP URL, like:
|
Now colon is required for username and password in FTP URL, like:
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
#include "a2functional.h"
|
#include "a2functional.h"
|
||||||
#include "TimeA2.h"
|
#include "TimeA2.h"
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -133,9 +134,21 @@ std::string HttpRequest::getHostText(const std::string& host, uint16_t port) con
|
||||||
|
|
||||||
std::string HttpRequest::createRequest() const
|
std::string HttpRequest::createRequest() const
|
||||||
{
|
{
|
||||||
|
SharedHandle<AuthConfig> authConfig = AuthConfigFactorySingleton::instance()
|
||||||
|
->createAuthConfig(request);
|
||||||
|
|
||||||
std::string requestLine = "GET ";
|
std::string requestLine = "GET ";
|
||||||
if(getProtocol() == Request::PROTO_FTP || proxyEnabled) {
|
if(getProtocol() == Request::PROTO_FTP || proxyEnabled) {
|
||||||
requestLine += getCurrentURI();
|
if(getProtocol() == Request::PROTO_FTP &&
|
||||||
|
request->getUsername().empty() && !authConfig->getUser().empty()) {
|
||||||
|
// Insert user into URI, like ftp://USER@host/
|
||||||
|
std::string uri = getCurrentURI();
|
||||||
|
assert(uri.size() >= 6);
|
||||||
|
uri.insert(6, Util::urlencode(authConfig->getUser())+"@");
|
||||||
|
requestLine += uri;
|
||||||
|
} else {
|
||||||
|
requestLine += getCurrentURI();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if(getDir() == A2STR::SLASH_C) {
|
if(getDir() == A2STR::SLASH_C) {
|
||||||
requestLine += getDir();
|
requestLine += getDir();
|
||||||
|
@ -192,11 +205,9 @@ std::string HttpRequest::createRequest() const
|
||||||
if(proxyEnabled && proxyAuthEnabled) {
|
if(proxyEnabled && proxyAuthEnabled) {
|
||||||
requestLine += getProxyAuthString();
|
requestLine += getProxyAuthString();
|
||||||
}
|
}
|
||||||
std::string authString = AuthConfigFactorySingleton::instance()
|
if(!authConfig->getUser().empty()) {
|
||||||
->createAuthConfig(request)->getAuthText();
|
|
||||||
if(authString != ":") {
|
|
||||||
requestLine += "Authorization: Basic "+
|
requestLine += "Authorization: Basic "+
|
||||||
Base64::encode(authString)+"\r\n";
|
Base64::encode(authConfig->getAuthText())+"\r\n";
|
||||||
}
|
}
|
||||||
if(getPreviousURI().size()) {
|
if(getPreviousURI().size()) {
|
||||||
requestLine += "Referer: "+getPreviousURI()+"\r\n";
|
requestLine += "Referer: "+getPreviousURI()+"\r\n";
|
||||||
|
|
|
@ -136,12 +136,10 @@ bool Request::parseUrl(const std::string& url) {
|
||||||
std::string::size_type atmarkp = hostPart.find_last_of("@");
|
std::string::size_type atmarkp = hostPart.find_last_of("@");
|
||||||
if(atmarkp != std::string::npos) {
|
if(atmarkp != std::string::npos) {
|
||||||
std::string authPart = hostPart.substr(0, atmarkp);
|
std::string authPart = hostPart.substr(0, atmarkp);
|
||||||
if(authPart.find(":") != std::string::npos) {
|
std::pair<std::string, std::string> userPass =
|
||||||
std::pair<std::string, std::string> userPass =
|
Util::split(authPart, A2STR::COLON_C);
|
||||||
Util::split(authPart, A2STR::COLON_C);
|
_username = Util::urldecode(userPass.first);
|
||||||
_username = Util::urldecode(userPass.first);
|
_password = Util::urldecode(userPass.second);
|
||||||
_password = Util::urldecode(userPass.second);
|
|
||||||
}
|
|
||||||
hostPart.erase(0, atmarkp+1);
|
hostPart.erase(0, atmarkp+1);
|
||||||
}
|
}
|
||||||
std::pair<std::string, std::string> hostAndPort;
|
std::pair<std::string, std::string> hostAndPort;
|
||||||
|
|
|
@ -349,7 +349,9 @@ void HttpRequestTest::testCreateRequest_ftp()
|
||||||
|
|
||||||
httpRequest.configure(_option.get());
|
httpRequest.configure(_option.get());
|
||||||
|
|
||||||
std::string expectedText = "GET ftp://localhost:8080/archives/aria2-1.0.0.tar.bz2 HTTP/1.1\r\n"
|
std::string expectedText =
|
||||||
|
"GET ftp://aria2user@localhost:8080/archives/aria2-1.0.0.tar.bz2"
|
||||||
|
" HTTP/1.1\r\n"
|
||||||
"User-Agent: aria2\r\n"
|
"User-Agent: aria2\r\n"
|
||||||
"Accept: */*\r\n"
|
"Accept: */*\r\n"
|
||||||
"Host: localhost:8080\r\n"
|
"Host: localhost:8080\r\n"
|
||||||
|
@ -368,7 +370,9 @@ void HttpRequestTest::testCreateRequest_ftp()
|
||||||
|
|
||||||
httpRequest.configure(_option.get());
|
httpRequest.configure(_option.get());
|
||||||
|
|
||||||
expectedText = "GET ftp://localhost:8080/archives/aria2-1.0.0.tar.bz2 HTTP/1.1\r\n"
|
expectedText =
|
||||||
|
"GET ftp://aria2user@localhost:8080/archives/aria2-1.0.0.tar.bz2"
|
||||||
|
" HTTP/1.1\r\n"
|
||||||
"User-Agent: aria2\r\n"
|
"User-Agent: aria2\r\n"
|
||||||
"Accept: */*\r\n"
|
"Accept: */*\r\n"
|
||||||
"Host: localhost:8080\r\n"
|
"Host: localhost:8080\r\n"
|
||||||
|
|
|
@ -402,8 +402,7 @@ void RequestTest::testSetUrl_username()
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req.getHost());
|
CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req.getHost());
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("/download"), req.getDir());
|
CPPUNIT_ASSERT_EQUAL(std::string("/download"), req.getDir());
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("aria2-1.0.0.tar.bz2"), req.getFile());
|
CPPUNIT_ASSERT_EQUAL(std::string("aria2-1.0.0.tar.bz2"), req.getFile());
|
||||||
// No ":" is foundin 'aria2user', so username and password is left blank.
|
CPPUNIT_ASSERT_EQUAL(std::string("aria2user"), req.getUsername());
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getUsername());
|
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPassword());
|
CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPassword());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue