History

Adds major QOL updates to whitelist

Kasen IO committed 6 years ago

Commit d87cd011 parent 20f54391 file · +27 −7Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 1 file). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+27−7
@@ -85,9 +85,7 @@ · 84 unmodified lines
8585 #include "MIDIEvent.h"
8686
8787 #include "SettingHandle.h"
88−// #include "SettingManager.h"
89−// #include "SettingInterface.h"
90−// #include "SettingHelpers.h"
88+#include <AddressManager.h>
9189
9290 const QString ScriptEngine::_SETTINGS_ENABLE_EXTENDED_EXCEPTIONS {
9391 "com.highfidelity.experimental.enableExtendedJSExceptions"
@@ -2364,10 +2362,18 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co · 2270 unmodified lines
23642362 }
23652363 else {
23662364 // ENTITY SCRIPT WHITELIST STARTS HERE
2365+ auto nodeList = DependencyManager::get<NodeList>();
2366+ bool isInWhitelist = false; // assume unsafe
2367+ bool autoPassList = false;
23672368 QString whitelistPrefix = "[WHITELIST ENTITY SCRIPTS]";
2368− QList<QString> safeURLS = { "" };
2369+ QList<QString> safeURLS = { "file:///", "atp:", "cache:" };
23692370 safeURLS += qEnvironmentVariable("EXTRA_WHITELIST").trimmed().split(QRegExp("\\s*,\\s*"), QString::SkipEmptyParts);
23702371
2372+ // IF WHITELIST IS DISABLED IN SETTINGS
2373+ bool whitelistEnabled = Setting::Handle<bool>("private/whitelistEnabled", true).get();
2374+ if (!whitelistEnabled) {
2375+ autoPassList = true;
2376+ }
23712377 // PULL SAFEURLS FROM INTERFACE.JSON Settings
23722378
23732379 QVariant raw = Setting::Handle<QVariant>("private/settingsSafeURLS").get();
@@ -2376,9 +2382,23 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co · 2 unmodified lines
23762382
23772383 // END PULL SAFEURLS FROM INTERFACE.JSON Settings
23782384
2379− bool isInWhitelist = false; // assume unsafe
2385+ // GET CURRENT DOMAIN WHITELIST BYPASS, IN CASE AN ENTIRE DOMAIN IS WHITELISTED
2386+ QString currentDomain = DependencyManager::get<AddressManager>()->getDomainURL().host();
2387+
2388+ QString domainSafeIP = nodeList->getDomainHandler().getHostname();
2389+ QString domainSafeURL = "hifi://" + currentDomain;
2390+ for (const auto& str : safeURLS) {
2391+ if(domainSafeURL.startsWith(str) || domainSafeIP.startsWith(str)) {
2392+ qCDebug(scriptengine) << whitelistPrefix << "Whitelist Bypassed. Current Domain Host: "
2393+ << nodeList->getDomainHandler().getHostname()
2394+ << "Current Domain: " << currentDomain;
2395+ isInWhitelist = true;
2396+ autoPassList = true;
2397+ }
2398+ }
2399+ // END CURRENT DOMAIN WHITELIST BYPASS
23802400
2381− if (ScriptEngine::getContext() == "entity_server") {
2401+ if (ScriptEngine::getContext() == "entity_server" || autoPassList == true) { // If running on the server or waved through, do not engage whitelist.
23822402 isInWhitelist = true;
23832403 } else {
23842404 for (const auto& str : safeURLS) {
@@ -2392,7 +2412,7 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co · 7 unmodified lines
23922412 }
23932413 }
23942414
2395− if (!isInWhitelist) {
2415+ if (!isInWhitelist || autoPassList == false) {
23962416 qCDebug(scriptengine) << whitelistPrefix << "(disabled entity script)" << entityID.toString() << scriptOrURL;
23972417 exception = makeError("UNSAFE_ENTITY_SCRIPTS == 0");
23982418 } else {