core: Setting and resetting user app permissions was all sorts of broken.

This commit is contained in:
Cory McWilliams 2025-04-14 12:41:00 -04:00
parent 41cbde934a
commit c26bf5c112

View File

@ -2199,6 +2199,7 @@ typedef struct _set_user_permission_t
const char* package_name;
const char* permission;
bool allow;
bool reset;
bool result;
JSValue promise[2];
} set_user_permission_t;
@ -2239,22 +2240,31 @@ static void _tf_ssb_set_user_permission_work(tf_ssb_t* ssb, void* user_data)
if (JS_IsUndefined(package_name))
{
package_name = JS_NewObject(context);
JS_SetPropertyStr(context, package_owner, work->package_name, package_name);
JS_SetPropertyStr(context, package_owner, work->package_name, JS_DupValue(context, package_name));
}
JSValue permission = JS_GetPropertyStr(context, package_name, work->permission);
if (JS_ToBool(context, permission) != work->allow)
if (work->reset)
{
JS_SetPropertyStr(context, package_name, work->permission, JS_NewBool(context, work->allow));
JSValue settings_json = JS_JSONStringify(context, settings_value, JS_NULL, JS_NULL);
const char* settings_string = JS_ToCString(context, settings_json);
work->result = tf_ssb_db_set_property(ssb, "core", "settings", settings_string);
JS_FreeCString(context, settings_string);
JS_FreeValue(context, settings_json);
JSAtom atom = JS_NewAtom(context, work->permission);
JS_DeleteProperty(context, package_name, atom, 0);
JS_FreeAtom(context, atom);
}
else
{
work->result = true;
JS_SetPropertyStr(context, package_name, work->permission, JS_NewBool(context, work->allow));
}
JSValue settings_json = JS_JSONStringify(context, settings_value, JS_NULL, JS_NULL);
const char* settings_string = JS_ToCString(context, settings_json);
work->result = tf_ssb_db_set_property(ssb, "core", "settings", settings_string);
JS_FreeCString(context, settings_string);
JS_FreeValue(context, settings_json);
JS_FreeValue(context, permission);
JS_FreeValue(context, package_owner);
JS_FreeValue(context, package_name);
JS_FreeValue(context, user);
JS_FreeValue(context, user_permissions);
JS_FreeValue(context, settings_value);
tf_free((void*)settings);
}
JS_FreeContext(context);
@ -2288,6 +2298,7 @@ static JSValue _tf_ssb_set_user_permission(JSContext* context, JSValueConst this
.package_name = JS_ToCString(context, argv[2]),
.permission = JS_ToCString(context, argv[3]),
.allow = JS_ToBool(context, argv[4]),
.reset = JS_IsUndefined(argv[4]),
};
JSValue result = JS_NewPromiseCapability(context, set->promise);
tf_ssb_run_work(set->ssb, _tf_ssb_set_user_permission_work, _tf_ssb_set_user_permission_after_work, set);