/* vi:set et sw=2 sts=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e-s:
* Copyright © 2014 Red Hat, Inc
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see .
*
* Authors:
* Alexander Larsson
*/
#include "config.h"
#include "flatpak-user-data-utils.h"
#include "flatpak-permission-utils-private.h"
#include "flatpak-ref-utils-private.h"
#include "flatpak-utils-private.h"
/**
* flatpak_user_data_delete:
* @app_id: the application ID
* @cancellable: (nullable): a #GCancellable
* @error: return location for a #GError
*
* Deletes the data directory for @app_id in the current user's
* ~/.var/app and resets its permissions in the current
* user's permission store. This affects only the calling user, regardless
* of whether the application is installed per-user or system-wide. The
* application does not need to be installed.
*
* If resetting permissions fails after the data directory has been removed,
* the function returns %FALSE. It can be called again to retry the permission
* reset.
*
* Returns: %TRUE on success, %FALSE on failure
*
* Since: 1.19
*/
gboolean
flatpak_user_data_delete (const char *app_id,
GCancellable *cancellable,
GError **error)
{
g_autofree char *path = NULL;
g_autoptr(GFile) file = NULL;
g_return_val_if_fail (app_id != NULL, FALSE);
if (!flatpak_is_valid_name (app_id, -1, error))
return FALSE;
if (g_cancellable_set_error_if_cancelled (cancellable, error))
return FALSE;
/* The validated app ID cannot introduce path separators or parent traversal. */
path = g_build_filename (g_get_home_dir (), ".var", "app", app_id, NULL);
file = g_file_new_for_path (path);
if (!flatpak_rm_rf (file, cancellable, error))
return FALSE;
return flatpak_reset_permissions_for_app (app_id, cancellable, error);
}