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* package_name;
const char* permission; const char* permission;
bool allow; bool allow;
bool reset;
bool result; bool result;
JSValue promise[2]; JSValue promise[2];
} set_user_permission_t; } 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)) if (JS_IsUndefined(package_name))
{ {
package_name = JS_NewObject(context); 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); JSValue permission = JS_GetPropertyStr(context, package_name, work->permission);
if (JS_ToBool(context, permission) != work->allow) if (work->reset)
{
JSAtom atom = JS_NewAtom(context, work->permission);
JS_DeleteProperty(context, package_name, atom, 0);
JS_FreeAtom(context, atom);
}
else
{ {
JS_SetPropertyStr(context, package_name, work->permission, JS_NewBool(context, work->allow)); JS_SetPropertyStr(context, package_name, work->permission, JS_NewBool(context, work->allow));
}
JSValue settings_json = JS_JSONStringify(context, settings_value, JS_NULL, JS_NULL); JSValue settings_json = JS_JSONStringify(context, settings_value, JS_NULL, JS_NULL);
const char* settings_string = JS_ToCString(context, settings_json); const char* settings_string = JS_ToCString(context, settings_json);
work->result = tf_ssb_db_set_property(ssb, "core", "settings", settings_string); work->result = tf_ssb_db_set_property(ssb, "core", "settings", settings_string);
JS_FreeCString(context, settings_string); JS_FreeCString(context, settings_string);
JS_FreeValue(context, settings_json); JS_FreeValue(context, settings_json);
} JS_FreeValue(context, permission);
else JS_FreeValue(context, package_owner);
{ JS_FreeValue(context, package_name);
work->result = true; JS_FreeValue(context, user);
} JS_FreeValue(context, user_permissions);
JS_FreeValue(context, settings_value);
tf_free((void*)settings);
} }
JS_FreeContext(context); 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]), .package_name = JS_ToCString(context, argv[2]),
.permission = JS_ToCString(context, argv[3]), .permission = JS_ToCString(context, argv[3]),
.allow = JS_ToBool(context, argv[4]), .allow = JS_ToBool(context, argv[4]),
.reset = JS_IsUndefined(argv[4]),
}; };
JSValue result = JS_NewPromiseCapability(context, set->promise); 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); tf_ssb_run_work(set->ssb, _tf_ssb_set_user_permission_work, _tf_ssb_set_user_permission_after_work, set);