parse Accept-Language header to Request::accept_languages table
This commit is contained in:
parent
75daf37bbd
commit
33e8df11c5
|
@ -932,23 +932,43 @@ void App::LogEnvironmentHTTPVariables()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void App::ParseAcceptHeader()
|
void App::ParseAcceptHeader(const wchar_t * header_name, const std::wstring & env, std::vector<HeaderValue> & container, size_t max_len)
|
||||||
{
|
{
|
||||||
accept_base_parser.parse(cur.request->env_http_accept, cur.request->accept_mime_types, 16);
|
accept_base_parser.parse(env, container, max_len);
|
||||||
|
|
||||||
if( !cur.request->accept_mime_types.empty() )
|
if( !container.empty() )
|
||||||
{
|
{
|
||||||
log << log3 << "App: " << Winix::Header::accept << " header consists of: ";
|
log << log3 << "App: " << header_name << " header consists of: ";
|
||||||
HeaderValue::log_values(cur.request->accept_mime_types, log);
|
HeaderValue::log_values(container, log);
|
||||||
log << logend;
|
log << logend;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
log << log3 << "App: there is no " << Winix::Header::accept << " header" << logend;
|
log << log3 << "App: there is no " << header_name << " header" << logend;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void App::ParseAcceptHeader()
|
||||||
|
{
|
||||||
|
ParseAcceptHeader(
|
||||||
|
Winix::Header::accept,
|
||||||
|
cur.request->env_http_accept,
|
||||||
|
cur.request->accept_mime_types,
|
||||||
|
config.request_max_accept_fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void App::ParseAcceptLanguageHeader()
|
||||||
|
{
|
||||||
|
ParseAcceptHeader(
|
||||||
|
Winix::Header::accept_language,
|
||||||
|
cur.request->env_http_accept_language,
|
||||||
|
cur.request->accept_languages,
|
||||||
|
config.request_max_accept_language_fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* reading the request (without GET parameters in the URL)
|
* reading the request (without GET parameters in the URL)
|
||||||
|
@ -973,6 +993,7 @@ void App::ReadRequest()
|
||||||
LogEnvironmentHTTPVariables();
|
LogEnvironmentHTTPVariables();
|
||||||
|
|
||||||
ParseAcceptHeader();
|
ParseAcceptHeader();
|
||||||
|
ParseAcceptLanguageHeader();
|
||||||
accept_encoding_parser.ParseAndLog(cur.request->env_http_accept_encoding, log);
|
accept_encoding_parser.ParseAndLog(cur.request->env_http_accept_encoding, log);
|
||||||
cookie_parser.Parse(cur.request->env_http_cookie, cur.request->cookie_tab);
|
cookie_parser.Parse(cur.request->env_http_cookie, cur.request->cookie_tab);
|
||||||
|
|
||||||
|
@ -1014,6 +1035,7 @@ void App::ReadEnvVariables()
|
||||||
SetEnv("HTTP_COOKIE", cur.request->env_http_cookie);
|
SetEnv("HTTP_COOKIE", cur.request->env_http_cookie);
|
||||||
SetEnv("HTTP_ACCEPT_ENCODING", cur.request->env_http_accept_encoding);
|
SetEnv("HTTP_ACCEPT_ENCODING", cur.request->env_http_accept_encoding);
|
||||||
SetEnv("HTTP_ACCEPT", cur.request->env_http_accept);
|
SetEnv("HTTP_ACCEPT", cur.request->env_http_accept);
|
||||||
|
SetEnv("HTTP_ACCEPT_LANGUAGE", cur.request->env_http_accept_language);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,6 @@
|
||||||
#include "cookieparser.h"
|
#include "cookieparser.h"
|
||||||
#include "postmultiparser.h"
|
#include "postmultiparser.h"
|
||||||
#include "acceptencodingparser.h"
|
#include "acceptencodingparser.h"
|
||||||
#include "acceptparser.h"
|
|
||||||
#include "winixrequest.h"
|
#include "winixrequest.h"
|
||||||
#include "log/log.h"
|
#include "log/log.h"
|
||||||
#include "filelog.h"
|
#include "filelog.h"
|
||||||
|
@ -240,7 +239,9 @@ private:
|
||||||
|
|
||||||
void LogEnvironmentVariables();
|
void LogEnvironmentVariables();
|
||||||
void LogEnvironmentHTTPVariables();
|
void LogEnvironmentHTTPVariables();
|
||||||
|
void ParseAcceptHeader(const wchar_t * header_name, const std::wstring & env, std::vector<HeaderValue> & container, size_t max_len);
|
||||||
void ParseAcceptHeader();
|
void ParseAcceptHeader();
|
||||||
|
void ParseAcceptLanguageHeader();
|
||||||
|
|
||||||
void SetEnv(const char * name, std::wstring & env);
|
void SetEnv(const char * name, std::wstring & env);
|
||||||
void ReadEnvVariables();
|
void ReadEnvVariables();
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2021, Tomasz Sowa
|
* Copyright (c) 2008-2022, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -295,6 +295,9 @@ void Config::AssignValues(bool stdout_is_closed)
|
||||||
bin_stream_field = Text(L"bin_stream_field", L"bin_stream");
|
bin_stream_field = Text(L"bin_stream_field", L"bin_stream");
|
||||||
main_stream_field = Text(L"main_stream_field", L"main_stream");
|
main_stream_field = Text(L"main_stream_field", L"main_stream");
|
||||||
ezc_frames_field = Text(L"ezc_frames_field", L"ezc_frames");
|
ezc_frames_field = Text(L"ezc_frames_field", L"ezc_frames");
|
||||||
|
request_max_accept_fields = Size(L"request_max_accept_fields", 8);
|
||||||
|
request_max_accept_language_fields = Size(L"request_max_accept_language_fields", 8);
|
||||||
|
|
||||||
|
|
||||||
account_need_email_verification = Bool(L"account_need_email_verification", true);
|
account_need_email_verification = Bool(L"account_need_email_verification", true);
|
||||||
reset_password_code_expiration_time = Long(L"reset_password_code_expiration_time", 86400);
|
reset_password_code_expiration_time = Long(L"reset_password_code_expiration_time", 86400);
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2021, Tomasz Sowa
|
* Copyright (c) 2008-2022, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -709,6 +709,14 @@ public:
|
||||||
// default: ezc_frames
|
// default: ezc_frames
|
||||||
std::wstring ezc_frames_field;
|
std::wstring ezc_frames_field;
|
||||||
|
|
||||||
|
// max Accept header mime types to be parsed in a request
|
||||||
|
// default: 8
|
||||||
|
size_t request_max_accept_fields;
|
||||||
|
|
||||||
|
// max Accept-Language languages to be parsed in a request
|
||||||
|
// default: 8
|
||||||
|
size_t request_max_accept_language_fields;
|
||||||
|
|
||||||
// when true then when a user want to create a new account
|
// when true then when a user want to create a new account
|
||||||
// he has to provide his email and a message will be sent back to him
|
// he has to provide his email and a message will be sent back to him
|
||||||
// with a link to activate the account
|
// with a link to activate the account
|
||||||
|
|
|
@ -50,12 +50,14 @@ public:
|
||||||
*/
|
*/
|
||||||
static constexpr const wchar_t * content_type = L"Content-Type";
|
static constexpr const wchar_t * content_type = L"Content-Type";
|
||||||
static constexpr const wchar_t * accept = L"Accept";
|
static constexpr const wchar_t * accept = L"Accept";
|
||||||
|
static constexpr const wchar_t * accept_language = L"Accept-Language";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* headers' names lower case
|
* headers' names lower case
|
||||||
*/
|
*/
|
||||||
static constexpr const wchar_t * content_type_lc = L"content-type";
|
static constexpr const wchar_t * content_type_lc = L"content-type";
|
||||||
static constexpr const wchar_t * accept_lc = L"accept";
|
static constexpr const wchar_t * accept_lc = L"accept";
|
||||||
|
static constexpr const wchar_t * accept_language_lc = L"accept-language";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* headers' values
|
* headers' values
|
||||||
|
|
|
@ -121,6 +121,7 @@ void Request::Clear()
|
||||||
env_http_user_agent.clear();
|
env_http_user_agent.clear();
|
||||||
env_http_accept_encoding.clear();
|
env_http_accept_encoding.clear();
|
||||||
env_http_accept.clear();
|
env_http_accept.clear();
|
||||||
|
env_http_accept_language.clear();
|
||||||
env_fcgi_role.clear();
|
env_fcgi_role.clear();
|
||||||
env_content_type.clear();
|
env_content_type.clear();
|
||||||
env_https.clear();
|
env_https.clear();
|
||||||
|
|
|
@ -191,6 +191,7 @@ public:
|
||||||
std::wstring env_http_user_agent;
|
std::wstring env_http_user_agent;
|
||||||
std::wstring env_http_accept_encoding;
|
std::wstring env_http_accept_encoding;
|
||||||
std::wstring env_http_accept;
|
std::wstring env_http_accept;
|
||||||
|
std::wstring env_http_accept_language;
|
||||||
std::wstring env_fcgi_role;
|
std::wstring env_fcgi_role;
|
||||||
std::wstring env_content_type;
|
std::wstring env_content_type;
|
||||||
std::wstring env_https;
|
std::wstring env_https;
|
||||||
|
@ -332,6 +333,8 @@ public:
|
||||||
// at the beginning those with higher priority
|
// at the beginning those with higher priority
|
||||||
std::vector<HeaderValue> accept_mime_types;
|
std::vector<HeaderValue> accept_mime_types;
|
||||||
|
|
||||||
|
// at the beginning those with higher priority
|
||||||
|
std::vector<HeaderValue> accept_languages;
|
||||||
|
|
||||||
// request status
|
// request status
|
||||||
// !! CHANGE ME it'll be better to use ordinary http result codes
|
// !! CHANGE ME it'll be better to use ordinary http result codes
|
||||||
|
|
Loading…
Reference in New Issue