Merge with develop

--HG--
branch : feature-ryzom-installer
This commit is contained in:
kervala 2016-05-14 18:54:43 +02:00
commit 9d586221df
5 changed files with 47 additions and 43 deletions

View file

@ -39,7 +39,6 @@ namespace NLGUI
class CGroupParagraph;
extern std::string CurrentCookie;
extern std::string HTTPCurrentDomain;
// HTML group
/**
@ -376,6 +375,7 @@ namespace NLGUI
std::string _URL;
// Current URL
std::string _DocumentUrl;
std::string _DocumentDomain;
// Valid base href was found
bool _IgnoreBaseUrlTag;
// Fragment from loading url

View file

@ -51,7 +51,8 @@ namespace NLGUI
public:
std::string scheme;
std::string domain;
std::string authority;
std::string host;
std::string path;
std::string query;
std::string hash;

View file

@ -506,7 +506,7 @@ namespace NLGUI
}
else
{
receiveCookies(_CurlWWW->Request, HTTPCurrentDomain, _TrustedDomain);
receiveCookies(_CurlWWW->Request, _DocumentDomain, _TrustedDomain);
// redirect, get the location and try browse again
// we cant use curl redirection because 'addHTTPGetParams()' must be called on new destination
@ -533,7 +533,7 @@ namespace NLGUI
}
else
{
receiveCookies(_CurlWWW->Request, HTTPCurrentDomain, _TrustedDomain);
receiveCookies(_CurlWWW->Request, _DocumentDomain, _TrustedDomain);
_RedirectsRemaining = DEFAULT_RYZOM_REDIRECT_LIMIT;
@ -2548,6 +2548,7 @@ namespace NLGUI
_SelectOption = false;
_GroupListAdaptor = NULL;
_DocumentUrl = "";
_DocumentDomain = "";
_UrlFragment.clear();
_RefreshUrl.clear();
_NextRefreshTime = 0.0;
@ -4657,9 +4658,12 @@ namespace NLGUI
string finalUrl;
bool isLocal = lookupLocalFile (finalUrl, _URL.c_str(), true);
// Save new url
_URL = finalUrl;
CUrlParser uri (_URL);
_TrustedDomain = isTrustedDomain(uri.host);
_DocumentDomain = uri.host;
// file is probably from bnp (ingame help)
if (isLocal)
{
@ -4667,8 +4671,6 @@ namespace NLGUI
}
else
{
_TrustedDomain = isTrustedDomain(setCurrentDomain(finalUrl));
SFormFields formfields;
if (_PostNextTime)
{
@ -4704,9 +4706,11 @@ namespace NLGUI
// Ref the form
CForm &form = _Forms[_PostFormId];
// Save new url
_URL = form.Action;
_TrustedDomain = isTrustedDomain(setCurrentDomain(_URL));
CUrlParser uri(_URL);
_TrustedDomain = isTrustedDomain(uri.host);
_DocumentDomain = uri.host;
for (i=0; i<form.Entries.size(); i++)
{
@ -4814,6 +4818,7 @@ namespace NLGUI
#endif
_TrustedDomain = true;
_DocumentDomain = "localhost";
// Stop previous browse, remove content
stopBrowse ();
@ -4899,7 +4904,7 @@ namespace NLGUI
curl_easy_setopt(curl, CURLOPT_USERAGENT, userAgent.c_str());
// Cookies
sendCookies(curl, HTTPCurrentDomain, _TrustedDomain);
sendCookies(curl, _DocumentDomain, _TrustedDomain);
// Referer
if (!referer.empty())
@ -4983,9 +4988,6 @@ namespace NLGUI
nlwarning("(%s) HTML download finished, content length %d, type '%s', code %d", _Id.c_str(), content.size(), type.c_str(), code);
#endif
// set trusted domain for parsing
_TrustedDomain = isTrustedDomain(setCurrentDomain(_URL));
// create <html> markup for image downloads
if (type.find("image/") == 0 && content.size() > 0)
{

View file

@ -31,7 +31,6 @@ namespace NLGUI
/// store all cookies we receive and resent them depending of the domain
static std::map<std::string, std::map<std::string, std::string> > HTTPCookies;
std::string HTTPCurrentDomain; // The current domain that will be used to get which cookies to send
// ***************************************************************************
@ -332,24 +331,6 @@ namespace NLGUI
return dst;
}
// set current HTTPCurrentDomain for cookie selection, return new domain
const std::string &setCurrentDomain(const std::string &uri)
{
if (uri.find("http://") == 0)
HTTPCurrentDomain = uri.substr(7, uri.find("/", 7) - 7);
else
if (uri.find("https://") == 0)
HTTPCurrentDomain = uri.substr(8, uri.find("/", 8) - 8);
else
if (uri.find("//") == 0)
HTTPCurrentDomain = uri.substr(2, uri.find("/", 2) - 2);
else
if (uri.find("/") != std::string::npos)
HTTPCurrentDomain = uri.substr(0, uri.find("/") - 1);
return HTTPCurrentDomain;
}
// update HTTPCookies list
static void receiveCookie(const char *nsformat, const std::string &domain, bool trusted)
{
@ -371,6 +352,9 @@ namespace NLGUI
chunks[0] = chunks[0].substr(10);
}
// make sure domain is lowercase
chunks[0] = toLower(chunks[0]);
if (chunks[0] != domain && chunks[0] != std::string("." + domain))
{
// cookie is for different domain

View file

@ -14,8 +14,7 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <string>
#include "nel/misc/types_nl.h"
#include "nel/misc/common.h"
#include "nel/gui/url_parser.h"
using namespace std;
@ -63,15 +62,33 @@ namespace NLGUI
}
}
// scan for domain
// scan for authority
if (uri.substr(0, 2) == "//")
{
pos = uri.find("/", 3);
domain = uri.substr(0, pos);
pos = uri.find_first_of("/?", 2);
authority = uri.substr(0, pos);
if (pos != npos)
uri = uri.substr(pos);
else
uri.clear();
// strip empty port from authority
if (authority.find_last_of(":") == authority.length() - 1)
authority = authority.substr(0, authority.length() - 1);
// extract host from user:pass@host:port
pos = authority.find("@");
if (pos != npos)
host = authority.substr(pos + 1);
else
host = authority.substr(2);
// case-insensitive
host = NLMISC::toLower(host);
pos = host.find(":");
if (pos != npos)
host = host.substr(0, pos);
}
// scan for query
@ -99,11 +116,11 @@ namespace NLGUI
scheme = base.scheme;
// if we already have domain, then ignore base path
if (!domain.empty())
// if we already have authority, then ignore base path
if (!authority.empty())
return;
domain = base.domain;
authority = base.authority;
if (path.empty())
{
path = base.path;
@ -190,7 +207,7 @@ namespace NLGUI
bool CUrlParser::isAbsolute() const
{
return !scheme.empty() && !domain.empty();
return !scheme.empty() && !authority.empty();
}
// serialize URL back to string
@ -200,9 +217,9 @@ namespace NLGUI
if (!scheme.empty())
result += scheme + ":";
if (!domain.empty())
if (!authority.empty())
{
result += domain;
result += authority;
}
// path already has leading slash