mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
git-subtree-dir: login_server git-subtree-mainline: 09ebb40de21084bb10ee466429d900a5e757d349 git-subtree-split: ca71af1817a801db9a108c205bc298250d498c4b
72 lines
2.2 KiB
C++
72 lines
2.2 KiB
C++
#include "PageRequestMessagedHandler.h"
|
|
|
|
#include "Poco/Net/HTTPServerRequest.h"
|
|
|
|
#include "../ServerConfig.h"
|
|
|
|
//const Poco::RegularExpression PageRequestMessagedHandler::mDetectLanguageGET("^(?:/[a-zA-Z0-9_-]*)?/(en|de)");
|
|
// detect also lang field from form get
|
|
const Poco::RegularExpression PageRequestMessagedHandler::mDetectLanguageGET("^(?:/[a-zA-Z0-9/_-]*)?(?:/(en|de)|\\?.*lang=(en|de))");
|
|
|
|
Languages PageRequestMessagedHandler::chooseLanguage(Poco::Net::HTTPServerRequest& request, std::string lang_btn /*= ""*/)
|
|
{
|
|
|
|
// from Form
|
|
Languages lang = LanguageManager::languageFromString(lang_btn);
|
|
if (lang == LANG_NULL) {
|
|
// from URL
|
|
std::string uri = request.getURI();
|
|
std::vector<std::string> matches;
|
|
//std::string lang_str;
|
|
mDetectLanguageGET.split(uri, matches);
|
|
if (matches.size() > 0) {
|
|
//for (auto it = matches.begin(); it != matches.end(); it++) {
|
|
// printf("Matches: %s\n", it->data());
|
|
//}
|
|
lang = LanguageManager::languageFromString(matches[matches.size()-1]);
|
|
}
|
|
else {
|
|
// from Header
|
|
/*
|
|
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
|
|
$acceptLang = ['fr', 'it', 'en'];
|
|
$lang = in_array($lang, $acceptLang) ? $lang : 'en';
|
|
*/
|
|
std::string accept_languages = request.get("HTTP_ACCEPT_LANGUAGE", "");
|
|
//printf("[PageRequestMessagedHandler::chooseLanguage] accept header: %s\n", accept_languages.data());
|
|
}
|
|
}
|
|
|
|
if (lang == LANG_NULL) {
|
|
//lang = ServerConfig::g_default_locale;
|
|
}
|
|
|
|
return lang;
|
|
}
|
|
|
|
unsigned long long PageRequestMessagedHandler::getLastGetAsU64(const std::string& uri)
|
|
{
|
|
unsigned long long result = 0;
|
|
size_t pos = uri.find_last_of("/");
|
|
try {
|
|
auto str = uri.substr(pos + 1);
|
|
result = stoull(uri.substr(pos + 1));
|
|
}
|
|
catch (const std::invalid_argument& ia) {
|
|
std::cerr << __FUNCTION__ << " Invalid argument: " << ia.what() << ", str: " << uri.substr(pos + 1) << '\n';
|
|
return 0;
|
|
}
|
|
catch (const std::out_of_range& oor) {
|
|
std::cerr << __FUNCTION__ << " Out of Range error: " << oor.what() << '\n';
|
|
return 0;
|
|
}
|
|
catch (const std::logic_error & ler) {
|
|
std::cerr << __FUNCTION__ << " Logical error: " << ler.what() << '\n';
|
|
return 0;
|
|
}
|
|
catch (...) {
|
|
std::cerr << __FUNCTION__ << " Unknown error" << '\n';
|
|
return 0;
|
|
}
|
|
return result;
|
|
} |