diff --git a/common/flatpak-dir-private.h b/common/flatpak-dir-private.h index cbcb87d04..5527e0ab8 100644 --- a/common/flatpak-dir-private.h +++ b/common/flatpak-dir-private.h @@ -106,6 +106,8 @@ typedef struct GError *summary_fetch_error; GVariant *metadata; GError *metadata_fetch_error; + GRegex *allow_refs; + GRegex *deny_refs; int refcount; } FlatpakRemoteState; @@ -115,6 +117,8 @@ gboolean flatpak_remote_state_ensure_summary (FlatpakRemoteState *self, GError **error); gboolean flatpak_remote_state_ensure_metadata (FlatpakRemoteState *self, GError **error); +gboolean flatpak_remote_state_allow_ref (FlatpakRemoteState *self, + const char *ref); gboolean flatpak_remote_state_lookup_ref (FlatpakRemoteState *self, const char *ref, char **out_checksum, diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 7ebd42f7d..bff34a6c5 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -277,6 +277,8 @@ flatpak_remote_state_unref (FlatpakRemoteState *remote_state) g_clear_error (&remote_state->summary_fetch_error); g_clear_pointer (&remote_state->metadata, g_variant_unref); g_clear_error (&remote_state->metadata_fetch_error); + g_clear_pointer (&remote_state->allow_refs, g_regex_unref); + g_clear_pointer (&remote_state->deny_refs, g_regex_unref); g_free (remote_state); } @@ -314,6 +316,13 @@ flatpak_remote_state_ensure_metadata (FlatpakRemoteState *self, return TRUE; } +gboolean +flatpak_remote_state_allow_ref (FlatpakRemoteState *self, + const char *ref) +{ + return flatpak_filters_allow_ref (self->allow_refs, self->deny_refs, ref); +} + /* Returns TRUE if the ref is found in the summary or cache. out_checksum and * out_variant are not guaranteed to be set even when the ref is found. */ gboolean @@ -10306,6 +10315,8 @@ _flatpak_dir_get_remote_state (FlatpakDir *self, return NULL; if (!repo_get_remote_collection_id (self->repo, remote_or_uri, &state->collection_id, error)) return NULL; + if (!flatpak_dir_lookup_remote_filter (self, remote_or_uri, &state->allow_refs, &state->deny_refs, error)) + return NULL; } if (local_only)