Revert "wsd: create a static function "parse""

This reverts commit fcfc257162.
This commit is contained in:
Jan Holesovsky
2019-03-15 17:26:54 +01:00
parent 0087e9fbc3
commit e78a93e747
2 changed files with 111 additions and 150 deletions

View File

@ -683,74 +683,124 @@ void FileServerRequestHandler::preprocessFile(const HTTPRequest& request, Poco::
documentSigningDiv = "<div id=\"document-signing-bar\"></div>"; documentSigningDiv = "<div id=\"document-signing-bar\"></div>";
} }
std::string lang; enum class ParseState
std::locale locale; {
None,
Subs,
L10n
};
std::string token;
std::ostringstream ostr; std::ostringstream ostr;
std::stringstream varSubs, varL10n;
std::istringstream istr(preprocess); std::istringstream istr(preprocess);
ParseState state = ParseState::None;
parse(locale, istr, ostr, [&](const std::string& var) { getToken(istr, token);
bool result = true; while (!token.empty())
if (var == "ACCESS_TOKEN") {
if (token == "<%")
{ {
ostr << escapedAccessToken; if (state == ParseState::None)
{
state = ParseState::Subs;
varSubs.str("");
varSubs.clear();
}
else ostr << token;
} }
else if (var == "ACCESS_TOKEN_TTL") else if (token == "%>")
{ {
ostr << tokenTtl; if (state == ParseState::Subs)
} {
else if (var == "ACCESS_HEADER") std::string var = varSubs.str();
{ if (var == "ACCESS_TOKEN")
ostr << escapedAccessHeader; {
} ostr << escapedAccessToken;
else if (var == "HOST") }
{ else if (var == "ACCESS_TOKEN_TTL")
ostr << host; {
} ostr << tokenTtl;
else if (var == "VERSION") }
{ else if (var == "ACCESS_HEADER")
ostr << LOOLWSD_VERSION_HASH; {
} ostr << escapedAccessHeader;
else if (var == "SERVICE_ROOT") }
{ else if (var == "HOST")
ostr << LOOLWSD::ServiceRoot; {
} ostr << host;
else if (var == "LOLEAFLET_LOGGING") }
{ else if (var == "VERSION")
ostr << config.getString("loleaflet_logging", "false"); {
} ostr << LOOLWSD_VERSION_HASH;
else if (var == "OUT_OF_FOCUS_TIMEOUT_SECS") }
{ else if (var == "SERVICE_ROOT")
ostr << config.getString("per_view.out_of_focus_timeout_secs", "60"); {
} ostr << LOOLWSD::ServiceRoot;
else if (var == "IDLE_TIMEOUT_SECS") }
{ else if (var == "LOLEAFLET_LOGGING")
ostr << config.getString("per_view.idle_timeout_secs", "900"); {
} ostr << config.getString("loleaflet_logging", "false");
else if (var == "DOCUMENT_SIGNING_DIV") }
{ else if (var == "OUT_OF_FOCUS_TIMEOUT_SECS")
ostr << documentSigningDiv; {
} ostr << config.getString("per_view.out_of_focus_timeout_secs", "60");
else if (var == "DOCUMENT_SIGNING_URL") }
{ else if (var == "IDLE_TIMEOUT_SECS")
ostr << documentSigningURL; {
} ostr << config.getString("per_view.idle_timeout_secs", "900");
else if (var == "BRANDING_CSS") }
{ else if (var == "DOCUMENT_SIGNING_DIV")
ostr << brandCSS; {
} ostr << documentSigningDiv;
else if (var == "BRANDING_JS") }
{ else if (var == "DOCUMENT_SIGNING_URL")
ostr << brandJS; {
} ostr << documentSigningURL;
else if (var == "LANG") }
{ else if (var == "BRANDING_CSS")
if (lang != "en") {
ostr << "?lang=" << lang; ostr << brandCSS;
} }
else result = false; else if (var == "BRANDING_JS")
{
ostr << brandJS;
}
else ostr << var;
return result; state = ParseState::None;
}); }
else ostr << token;
}
else
{
switch (state)
{
case ParseState::None:
ostr << token;
break;
case ParseState::Subs:
varSubs << token;
break;
case ParseState::L10n:
varL10n << token;
break;
}
}
getToken(istr, token);
}
if (state == ParseState::Subs)
{
ostr << varSubs.str();
}
else if (state == ParseState::L10n)
{
ostr << varL10n.str();
}
const std::string mimeType = "text/html"; const std::string mimeType = "text/html";
@ -937,92 +987,4 @@ void FileServerRequestHandler::preprocessAdminFile(const HTTPRequest& request,co
socket->send(oss.str()); socket->send(oss.str());
} }
void FileServerRequestHandler::parse(const std::locale& locale, std::istringstream& istr, std::ostringstream& ostr, const std::function<bool(const std::string&)>& funcSubs)
{
enum class ParseState
{
None,
Subs,
L10n
};
std::string token;
std::stringstream varSubs, varL10n;
ParseState state = ParseState::None;
getToken(istr, token);
while (!token.empty())
{
if (token == "<%")
{
if (state == ParseState::None)
{
state = ParseState::Subs;
varSubs.str("");
varSubs.clear();
}
else ostr << token;
}
else if (token == "_(\'")
{
if (state == ParseState::None)
{
state = ParseState::L10n;
varL10n.str("");
varL10n.clear();
}
else ostr << token;
}
else if (token == "\')")
{
if (state == ParseState::L10n)
{
LOG_INF(locale.name());
//ostr << '\'' << boost::locale::gettext(varL10n.str().c_str(), locale) << '\'';
state = ParseState::None;
}
else ostr << token;
}
else if (token == "%>")
{
if (state == ParseState::Subs)
{
std::string var = varSubs.str();
if (!funcSubs(var))
ostr << var;
state = ParseState::None;
}
else ostr << token;
}
else
{
switch (state)
{
case ParseState::None:
ostr << token;
break;
case ParseState::Subs:
varSubs << token;
break;
case ParseState::L10n:
varL10n << token;
break;
}
}
getToken(istr, token);
}
if (state == ParseState::Subs)
{
ostr << varSubs.str();
}
else if (state == ParseState::L10n)
{
ostr << varL10n.str();
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@ -21,7 +21,6 @@ class FileServerRequestHandler
static std::string getRequestPathname(const Poco::Net::HTTPRequest& request); static std::string getRequestPathname(const Poco::Net::HTTPRequest& request);
static void getToken(std::istringstream&, std::string&); static void getToken(std::istringstream&, std::string&);
static void parse(const std::locale&, std::istringstream&, std::ostringstream&, const std::function<bool(const std::string&)>&);
static void preprocessFile(const Poco::Net::HTTPRequest& request, Poco::MemoryInputStream& message, const std::shared_ptr<StreamSocket>& socket); static void preprocessFile(const Poco::Net::HTTPRequest& request, Poco::MemoryInputStream& message, const std::shared_ptr<StreamSocket>& socket);
static void preprocessAdminFile(const Poco::Net::HTTPRequest& request, const std::shared_ptr<StreamSocket>& socket); static void preprocessAdminFile(const Poco::Net::HTTPRequest& request, const std::shared_ptr<StreamSocket>& socket);
public: public: