Move the release trust information to FwupdRelease

It only remained on FwupdResult because I couldn't make up my mind about whether
it was a property of the device, or the firmware release. It's more logically
the latter, as you could have a .cab file with multiple versions of the
firmware and only the first being signed.
This commit is contained in:
Richard Hughes 2017-09-15 11:24:45 +01:00
parent 6ab53111db
commit b3ca245b74
7 changed files with 81 additions and 59 deletions

View File

@ -242,4 +242,10 @@ G_DEPRECATED_FOR(fwupd_release_set_appstream_id)
void fwupd_result_set_unique_id (FwupdResult *result,
const gchar *unique_id);
G_DEPRECATED_FOR(fwupd_release_get_trust_flags)
FwupdTrustFlags fwupd_result_get_update_trust_flags (FwupdResult *result);
G_DEPRECATED_FOR(fwupd_release_set_trust_flags)
void fwupd_result_set_update_trust_flags (FwupdResult *result,
FwupdTrustFlags trust_flags);
#endif /* __FWUPD_DEPRECATED_H */

View File

@ -46,6 +46,7 @@ typedef struct {
gchar *version;
gchar *remote_id;
guint64 size;
FwupdTrustFlags trust_flags;
} FwupdReleasePrivate;
G_DEFINE_TYPE_WITH_PRIVATE (FwupdRelease, fwupd_release, G_TYPE_OBJECT)
@ -523,6 +524,41 @@ fwupd_release_set_name (FwupdRelease *release, const gchar *name)
priv->name = g_strdup (name);
}
/**
* fwupd_release_get_trust_flags:
* @release: A #FwupdRelease
*
* Gets the trust level of the release.
*
* Returns: the trust bitfield, e.g. #FWUPD_TRUST_FLAG_PAYLOAD
*
* Since: 0.9.8
**/
FwupdTrustFlags
fwupd_release_get_trust_flags (FwupdRelease *release)
{
FwupdReleasePrivate *priv = GET_PRIVATE (release);
g_return_val_if_fail (FWUPD_IS_RELEASE (release), 0);
return priv->trust_flags;
}
/**
* fwupd_release_set_trust_flags:
* @release: A #FwupdRelease
* @trust_flags: the bitfield, e.g. #FWUPD_TRUST_FLAG_PAYLOAD
*
* Sets the trust level of the release.
*
* Since: 0.9.8
**/
void
fwupd_release_set_trust_flags (FwupdRelease *release, FwupdTrustFlags trust_flags)
{
FwupdReleasePrivate *priv = GET_PRIVATE (release);
g_return_if_fail (FWUPD_IS_RELEASE (release));
priv->trust_flags = trust_flags;
}
void
fwupd_release_to_variant_builder (FwupdRelease *release, GVariantBuilder *builder)
{
@ -600,6 +636,11 @@ fwupd_release_to_variant_builder (FwupdRelease *release, GVariantBuilder *builde
FWUPD_RESULT_KEY_UPDATE_VENDOR,
g_variant_new_string (priv->vendor));
}
if (priv->trust_flags != 0) {
g_variant_builder_add (builder, "{sv}",
FWUPD_RESULT_KEY_UPDATE_TRUST_FLAGS,
g_variant_new_uint64 (priv->trust_flags));
}
}
/**
@ -691,6 +732,10 @@ fwupd_release_from_key_value (FwupdRelease *release, const gchar *key, GVariant
fwupd_release_set_vendor (release, g_variant_get_string (value, NULL));
return;
}
if (g_strcmp0 (key, FWUPD_RESULT_KEY_UPDATE_TRUST_FLAGS) == 0) {
fwupd_release_set_trust_flags (release, g_variant_get_uint64 (value));
return;
}
}
static void
@ -717,6 +762,27 @@ fwupd_pad_kv_siz (GString *str, const gchar *key, guint64 value)
fwupd_pad_kv_str (str, key, tmp);
}
static void
fwupd_pad_kv_tfl (GString *str, const gchar *key, FwupdTrustFlags trust_flags)
{
guint i;
g_autoptr(GString) tmp = NULL;
tmp = g_string_new ("");
for (i = 1; i < FWUPD_TRUST_FLAG_LAST; i *= 2) {
if ((trust_flags & i) == 0)
continue;
g_string_append_printf (tmp, "%s|",
fwupd_trust_flag_to_string (i));
}
if (tmp->len == 0) {
g_string_append (tmp, fwupd_trust_flag_to_string (0));
} else {
g_string_truncate (tmp, tmp->len - 1);
}
fwupd_pad_kv_str (str, key, tmp->str);
}
/**
* fwupd_release_to_string:
* @release: A #FwupdRelease
@ -752,6 +818,7 @@ fwupd_release_to_string (FwupdRelease *release)
fwupd_pad_kv_str (str, FWUPD_RESULT_KEY_UPDATE_URI, priv->uri);
fwupd_pad_kv_str (str, FWUPD_RESULT_KEY_UPDATE_HOMEPAGE, priv->homepage);
fwupd_pad_kv_str (str, FWUPD_RESULT_KEY_UPDATE_VENDOR, priv->vendor);
fwupd_pad_kv_tfl (str, FWUPD_RESULT_KEY_UPDATE_TRUST_FLAGS, priv->trust_flags);
return g_string_free (str, FALSE);
}

View File

@ -87,6 +87,9 @@ void fwupd_release_set_size (FwupdRelease *release,
const gchar *fwupd_release_get_license (FwupdRelease *release);
void fwupd_release_set_license (FwupdRelease *release,
const gchar *license);
FwupdTrustFlags fwupd_release_get_trust_flags (FwupdRelease *release);
void fwupd_release_set_trust_flags (FwupdRelease *release,
FwupdTrustFlags trust_flags);
G_END_DECLS

View File

@ -37,7 +37,6 @@ static void fwupd_result_finalize (GObject *object);
typedef struct {
gchar *unique_id;
FwupdTrustFlags update_trust_flags;
FwupdDevice *device;
FwupdRelease *release;
} FwupdResultPrivate;
@ -1067,7 +1066,7 @@ fwupd_result_get_update_trust_flags (FwupdResult *result)
{
FwupdResultPrivate *priv = GET_PRIVATE (result);
g_return_val_if_fail (FWUPD_IS_RESULT (result), 0);
return priv->update_trust_flags;
return fwupd_release_get_trust_flags (priv->release);
}
/**
@ -1084,7 +1083,7 @@ fwupd_result_set_update_trust_flags (FwupdResult *result, FwupdTrustFlags trust_
{
FwupdResultPrivate *priv = GET_PRIVATE (result);
g_return_if_fail (FWUPD_IS_RESULT (result));
priv->update_trust_flags = trust_flags;
fwupd_release_set_trust_flags (priv->release, trust_flags);
}
/**
@ -1373,11 +1372,6 @@ fwupd_result_to_data (FwupdResult *result, const gchar *type_string)
/* create an array with all the metadata in */
g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
if (priv->update_trust_flags != 0) {
g_variant_builder_add (&builder, "{sv}",
FWUPD_RESULT_KEY_UPDATE_TRUST_FLAGS,
g_variant_new_uint64 (priv->update_trust_flags));
}
/* device and release objects */
fwupd_release_to_variant_builder (priv->release, &builder);
@ -1395,48 +1389,6 @@ fwupd_result_to_data (FwupdResult *result, const gchar *type_string)
return NULL;
}
static void
fwupd_result_from_key_value (FwupdResult *result, const gchar *key, GVariant *value)
{
if (g_strcmp0 (key, FWUPD_RESULT_KEY_UPDATE_TRUST_FLAGS) == 0) {
fwupd_result_set_update_trust_flags (result, g_variant_get_uint64 (value));
return;
}
}
static void
fwupd_pad_kv_str (GString *str, const gchar *key, const gchar *value)
{
/* ignore */
if (key == NULL || value == NULL)
return;
g_string_append_printf (str, " %s: ", key);
for (gsize i = strlen (key); i < 20; i++)
g_string_append (str, " ");
g_string_append_printf (str, "%s\n", value);
}
static void
fwupd_pad_kv_tfl (GString *str, const gchar *key, FwupdTrustFlags trust_flags)
{
guint i;
g_autoptr(GString) tmp = NULL;
tmp = g_string_new ("");
for (i = 1; i < FWUPD_TRUST_FLAG_LAST; i *= 2) {
if ((trust_flags & i) == 0)
continue;
g_string_append_printf (tmp, "%s|",
fwupd_trust_flag_to_string (i));
}
if (tmp->len == 0) {
g_string_append (tmp, fwupd_trust_flag_to_string (0));
} else {
g_string_truncate (tmp, tmp->len - 1);
}
fwupd_pad_kv_str (str, key, tmp->str);
}
/**
* fwupd_result_to_string:
* @result: A #FwupdResult
@ -1464,8 +1416,6 @@ fwupd_result_to_string (FwupdResult *result)
g_string_append (str, device_str);
release_str = fwupd_release_to_string (priv->release);
g_string_append (str, release_str);
if (fwupd_release_get_version (priv->release) != NULL)
fwupd_pad_kv_tfl (str, FWUPD_RESULT_KEY_UPDATE_TRUST_FLAGS, priv->update_trust_flags);
return g_string_free (str, FALSE);
}
@ -1561,7 +1511,6 @@ fwupd_result_from_variant_iter (FwupdResult *result, GVariantIter *iter)
GVariant *value;
const gchar *key;
while (g_variant_iter_next (iter, "{&sv}", &key, &value)) {
fwupd_result_from_key_value (result, key, value);
fwupd_release_from_key_value (priv->release, key, value);
fwupd_device_from_key_value (priv->device, key, value);
g_variant_unref (value);

View File

@ -51,10 +51,6 @@ FwupdResult *fwupd_result_new_from_data (GVariant *data);
FwupdRelease *fwupd_result_get_release (FwupdResult *result);
FwupdDevice *fwupd_result_get_device (FwupdResult *result);
FwupdTrustFlags fwupd_result_get_update_trust_flags (FwupdResult *result);
void fwupd_result_set_update_trust_flags (FwupdResult *result,
FwupdTrustFlags trust_flags);
GVariant *fwupd_result_to_data (FwupdResult *result,
const gchar *type_string);
gchar *fwupd_result_to_string (FwupdResult *result);

View File

@ -199,7 +199,8 @@ fwupd_result_func (void)
fwupd_device_add_icon (dev, "input-gaming");
fwupd_device_add_icon (dev, "input-mouse");
fwupd_device_add_flag (dev, FWUPD_DEVICE_FLAG_REQUIRE_AC);
fwupd_result_set_update_trust_flags (result, FWUPD_TRUST_FLAG_PAYLOAD);
rel = fwupd_result_get_release (result);
fwupd_release_set_trust_flags (rel, FWUPD_TRUST_FLAG_PAYLOAD);
rel = fwupd_result_get_release (result);
fwupd_release_add_checksum (rel, "deadbeef");

View File

@ -1950,7 +1950,6 @@ fu_engine_get_result_from_app (FuEngine *self, AsApp *app, GError **error)
release = as_app_get_release_default (app);
if (!fu_engine_get_release_trust_flags (release, &trust_flags, error))
return NULL;
fwupd_result_set_update_trust_flags (res, trust_flags);
/* possibly convert the version from 0x to dotted */
fu_engine_vendor_quirk_release_version (app);
@ -1961,6 +1960,7 @@ fu_engine_get_result_from_app (FuEngine *self, AsApp *app, GError **error)
/* create a result with all the metadata in */
fwupd_device_set_description (dev, as_app_get_description (app, NULL));
rel = fwupd_result_get_release (res);
fwupd_release_set_trust_flags (rel, trust_flags);
fwupd_release_set_homepage (rel, as_app_get_url_item (app, AS_URL_KIND_HOMEPAGE));
fwupd_release_set_license (rel, as_app_get_project_license (app));
fwupd_release_set_name (rel, as_app_get_name (app, NULL));