libreoffice-online/wsd/HostUtil.hpp
Rash419 45891d0ded wsd: alias: handle a case when regex is added in host tag of alias_group
if host has regex and group has no aliases, when we receive first request from host pattern we considered it as original host and all the host following first request which matches the pattern are considered as aliases
for example:
<group>
	<host>https://.*:80</host>
</group>
if we receives first request from asustuf then behaviour will similar to the following config:
<group>
	<host>https://asustuf:80</host>
	<alias>https://.*:80</alias>
</group>

Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I70fb91a4bb7bf38ed79db9efd9fe4bc46db325e1
2022-06-15 11:04:36 +05:30

55 lines
2 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#pragma once
#include <Util.hpp>
#include <Poco/URI.h>
#include <Poco/Util/Application.h>
/// This class contains static methods to parse alias_groups and WOPI host and static containers to store the data from the coolwsd.xml
class HostUtil
{
private:
/// Allowed/denied WOPI hosts, if any and if WOPI is enabled.
static Util::RegexListMatcher WopiHosts;
/// mapping of alias host and port to real host and port
static std::map<std::string, std::string> AliasHosts;
/// When group configuration is not defined only the firstHost gets access
static std::string FirstHost;
/// list of host (not aliases) in alias_groups
static std::set<std::string> hostList;
static bool WopiEnabled;
public:
/// parse wopi.storage.host
static void parseWopiHost(Poco::Util::LayeredConfiguration& conf);
/// parse wopi.storage.alias_groups.group
static void parseAliases(Poco::Util::LayeredConfiguration& conf);
/// if request uri is an alias, replace request uri host and port with
/// original hostname and port defined by group tag from coolwsd.xml
/// to avoid possibility of opening the same file as two if the WOPI host
/// is accessed using different aliases
static std::string getNewUri(const Poco::URI& uri);
/// add host to WopiHosts
static void addWopiHost(std::string host, bool allow);
static bool allowedWopiHost(const std::string& host);
static bool isWopiEnabled() { return WopiEnabled; }
/// replace the authority of aliashost to realhost if it matches
static const Poco::URI getNewLockedUri(Poco::URI& uri);
static void setFirstHost(const Poco::URI& uri);
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */