| #ifndef _H_AllowedConnections | |
| #define _H_AllowedConnections | |
| /* | |
| * Copyright 2008 Google Inc. | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not | |
| * use this file except in compliance with the License. You may obtain a copy of | |
| * the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
| * License for the specific language governing permissions and limitations under | |
| * the License. | |
| */ | |
| #include <string> | |
| #include <vector> | |
| #include <utility> | |
| /** | |
| * Manages rules to control access to other sites from the plugin. This is | |
| * important since arbitrary web pages could try and use the plugin to connect | |
| * to hosts the browser's machine has access to, such as doing port scanning | |
| * behind a firewall. | |
| */ | |
| class AllowedConnections { | |
| public: | |
| /** | |
| * Add a rule to match new requests against. | |
| * | |
| * @param pattern pattern to match | |
| * @param exclude true if matches should be excluded instead of included | |
| */ | |
| static void addRule(const std::string& pattern, bool exclude = false); | |
| /** | |
| * Clear all rules. | |
| */ | |
| static void clearRules(); | |
| /** | |
| * Get the host portion of the URL, not including the port. | |
| * | |
| * @return the host portion of the URL, or the unmodified URL if it does not | |
| * appear to be valid | |
| */ | |
| static std::string getHostFromUrl(const std::string& url); | |
| /** | |
| * Clear any existing rules and reinitialize from the supplied access list. | |
| * | |
| * This access list is of the form: | |
| * [!]pattern,[!]pattern... | |
| * where the optional exclamation indicates the following pattern is to be | |
| * excluded, and an arbitrary number of patterns may be supplied with the | |
| * first match being used. Each pattern currently is only an exact literal | |
| * match against the host name, but will be extended to support simple | |
| * wildcard patterns. | |
| */ | |
| static void initFromAccessList(const std::string& accessList); | |
| /** | |
| * Returns true if the server for the requested URL matched any rule in | |
| * our access list, and sets a flag based on whether that rule permits or | |
| * denies the request. A host name of localhost or 127.0.0.1 is always | |
| * allowed. | |
| * | |
| * @param url url of page initiating connection | |
| * @param allowed pointer to return value indiciating that this URL should | |
| * be allowed to initiate GWT development mode connections | |
| * @return true if url matched a rule | |
| */ | |
| static bool matchesRule(const std::string& url, bool* allowed); | |
| private: | |
| AllowedConnections() { | |
| } | |
| /** | |
| * Internal class used for representing a rule. | |
| */ | |
| class Rule : std::pair<std::string, bool> { | |
| public: | |
| Rule(const std::string& pattern, bool exclude) | |
| : std::pair<std::string, bool>(pattern, exclude) {} | |
| const std::string& getPattern() const { | |
| return first; | |
| } | |
| bool isExcluded() const { | |
| return second; | |
| } | |
| }; | |
| static std::vector<Rule> rules; | |
| }; | |
| #endif |