Browse Source

Require user to accept security message every time an script is loaded from a patch/preset. Remove global settings file.

tags/v1.3.0
Andrew Belt 5 years ago
parent
commit
000985f67a
1 changed files with 53 additions and 56 deletions
  1. +53
    -56
      src/Prototype.cpp

+ 53
- 56
src/Prototype.cpp View File

@@ -25,53 +25,49 @@ ScriptEngine* createScriptEngine(std::string extension) {
}


// Global warning message for script security
bool securityRequested = false;
bool securityAccepted = false;

json_t *settingsToJson() {
json_t *rootJ = json_object();
json_object_set_new(rootJ, "securityAccepted", json_boolean(securityAccepted));
return rootJ;
}

void settingsFromJson(json_t *rootJ) {
json_t *securityAcceptedJ = json_object_get(rootJ, "securityAccepted");
if (securityAcceptedJ)
securityAccepted = json_boolean_value(securityAcceptedJ);
}

void settingsLoad() {
// Load plugin settings
std::string filename = asset::user("VCV-Prototype.json");
FILE *file = fopen(filename.c_str(), "r");
if (!file) {
return;
}
DEFER({
fclose(file);
});

json_error_t error;
json_t *rootJ = json_loadf(file, 0, &error);
if (rootJ) {
settingsFromJson(rootJ);
json_decref(rootJ);
}
}

void settingsSave() {
json_t *rootJ = settingsToJson();

std::string filename = asset::user("VCV-Prototype.json");
FILE *file = fopen(filename.c_str(), "w");
if (file) {
json_dumpf(rootJ, file, JSON_INDENT(2) | JSON_REAL_PRECISION(9));
fclose(file);
}

json_decref(rootJ);
}
// json_t *settingsToJson() {
// json_t *rootJ = json_object();
// json_object_set_new(rootJ, "securityAccepted", json_boolean(securityAccepted));
// return rootJ;
// }

// void settingsFromJson(json_t *rootJ) {
// json_t *securityAcceptedJ = json_object_get(rootJ, "securityAccepted");
// if (securityAcceptedJ)
// securityAccepted = json_boolean_value(securityAcceptedJ);
// }

// void settingsLoad() {
// // Load plugin settings
// std::string filename = asset::user("VCV-Prototype.json");
// FILE *file = fopen(filename.c_str(), "r");
// if (!file) {
// return;
// }
// DEFER({
// fclose(file);
// });

// json_error_t error;
// json_t *rootJ = json_loadf(file, 0, &error);
// if (rootJ) {
// settingsFromJson(rootJ);
// json_decref(rootJ);
// }
// }

// void settingsSave() {
// json_t *rootJ = settingsToJson();

// std::string filename = asset::user("VCV-Prototype.json");
// FILE *file = fopen(filename.c_str(), "w");
// if (file) {
// json_dumpf(rootJ, file, JSON_INDENT(2) | JSON_REAL_PRECISION(9));
// fclose(file);
// }

// json_decref(rootJ);
// }


struct Prototype : Module {
@@ -97,8 +93,6 @@ struct Prototype : Module {
std::string message;
std::string path;
std::string script;
/** Script that has not yet been approved to load */
std::string securityScript;
std::string engineName;
std::mutex scriptMutex;
ScriptEngine* scriptEngine = NULL;
@@ -109,6 +103,11 @@ struct Prototype : Module {

efsw_watcher efsw = NULL;

/** Script that has not yet been approved to load */
std::string securityScript;
bool securityRequested = false;
bool securityAccepted = false;

Prototype() {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
for (int i = 0; i < NUM_ROWS; i++)
@@ -563,12 +562,12 @@ struct PrototypeWidget : ModuleWidget {
}

void step() override {
if (securityRequested) {
if (osdialog_message(OSDIALOG_WARNING, OSDIALOG_OK_CANCEL, "VCV Prototype is about to load a script from a patch or module preset. Running Prototype scripts from untrusted sources may compromise your computer and personal information. Proceed and don't display this message again?")) {
securityAccepted = true;
settingsSave();
Prototype* module = dynamic_cast<Prototype*>(this->module);
if (module && module->securityRequested) {
if (osdialog_message(OSDIALOG_WARNING, OSDIALOG_OK_CANCEL, "VCV Prototype is requesting to run a script from a patch or module preset. Running Prototype scripts from untrusted sources may compromise your computer and personal information. Proceed and run script?")) {
module->securityAccepted = true;
}
securityRequested = false;
module->securityRequested = false;
}
ModuleWidget::step();
}
@@ -578,6 +577,4 @@ void init(Plugin* p) {
pluginInstance = p;

p->addModel(createModel<Prototype, PrototypeWidget>("Prototype"));

settingsLoad();
}

Loading…
Cancel
Save