OCI: Add json format for atomic-based signatures

tingping/wmclass
Alexander Larsson 2017-03-29 13:50:09 +02:00
parent 5aeec78311
commit a7216cedd2
2 changed files with 127 additions and 0 deletions

View File

@ -855,3 +855,87 @@ flatpak_oci_parse_commit_annotations (GHashTable *annotations,
}
}
}
G_DEFINE_TYPE (FlatpakOciSignature, flatpak_oci_signature, FLATPAK_TYPE_JSON);
static void
flatpak_oci_signature_critical_destroy (FlatpakOciSignatureCritical *self)
{
g_free (self->type);
g_free (self->image.digest);
g_free (self->identity.ref);
}
static void
flatpak_oci_signature_optional_destroy (FlatpakOciSignatureOptional *self)
{
g_free (self->creator);
}
static void
flatpak_oci_signature_finalize (GObject *object)
{
FlatpakOciSignature *self = (FlatpakOciSignature *) object;
flatpak_oci_signature_critical_destroy (&self->critical);
flatpak_oci_signature_optional_destroy (&self->optional);
G_OBJECT_CLASS (flatpak_oci_signature_parent_class)->finalize (object);
}
static void
flatpak_oci_signature_class_init (FlatpakOciSignatureClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
FlatpakJsonClass *json_class = FLATPAK_JSON_CLASS (klass);
static FlatpakJsonProp image_props[] = {
FLATPAK_JSON_MANDATORY_STRING_PROP (FlatpakOciSignatureCriticalImage, digest, "oci-image-manifest-digest"),
FLATPAK_JSON_LAST_PROP
};
static FlatpakJsonProp identity_props[] = {
FLATPAK_JSON_MANDATORY_STRING_PROP (FlatpakOciSignatureCriticalIdentity, ref, "oci-image-ref"),
FLATPAK_JSON_LAST_PROP
};
static FlatpakJsonProp critical_props[] = {
FLATPAK_JSON_MANDATORY_STRING_PROP (FlatpakOciSignatureCritical, type, "type"),
FLATPAK_JSON_MANDATORY_STRICT_STRUCT_PROP(FlatpakOciSignatureCritical, image, "image", image_props),
FLATPAK_JSON_MANDATORY_STRICT_STRUCT_PROP(FlatpakOciSignatureCritical, identity, "identity", identity_props),
FLATPAK_JSON_LAST_PROP
};
static FlatpakJsonProp optional_props[] = {
FLATPAK_JSON_STRING_PROP (FlatpakOciSignatureOptional, creator, "creator"),
FLATPAK_JSON_INT64_PROP (FlatpakOciSignatureOptional, timestamp, "timestamp"),
FLATPAK_JSON_LAST_PROP
};
static FlatpakJsonProp props[] = {
FLATPAK_JSON_MANDATORY_STRICT_STRUCT_PROP (FlatpakOciSignature, critical, "critical", critical_props),
FLATPAK_JSON_STRUCT_PROP (FlatpakOciSignature, optional, "optional", optional_props),
FLATPAK_JSON_LAST_PROP
};
object_class->finalize = flatpak_oci_signature_finalize;
json_class->props = props;
}
static void
flatpak_oci_signature_init (FlatpakOciSignature *self)
{
}
FlatpakOciSignature *
flatpak_oci_signature_new (const char *digest, const char *ref)
{
FlatpakOciSignature *signature;
signature = g_object_new (FLATPAK_TYPE_OCI_SIGNATURE, NULL);
/* Some default values */
signature->critical.type = g_strdup (FLATPAK_OCI_SIGNATURE_TYPE_FLATPAK);
signature->critical.image.digest = g_strdup (digest);
signature->critical.identity.ref = g_strdup (ref);
signature->optional.creator = g_strdup ("flatpak " PACKAGE_VERSION);
signature->optional.timestamp = time (NULL);
return signature;
}

View File

@ -32,6 +32,8 @@ G_BEGIN_DECLS
#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_LAYER_NONDISTRIBUTABLE "application/vnd.oci.image.layer.nondistributable.v1.tar+gzip"
#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_CONFIG "application/vnd.oci.image.config.v1+json"
#define FLATPAK_OCI_SIGNATURE_TYPE_FLATPAK "flatpak oci image signature"
const char * flatpak_arch_to_oci_arch (const char *flatpak_arch);
void flatpak_oci_export_annotations (GHashTable *source,
GHashTable *dest);
@ -229,4 +231,45 @@ void flatpak_oci_parse_commit_annotations (GHashTable *annotations,
char **out_parent_commit,
GVariantBuilder *metadata_builder);
#define FLATPAK_TYPE_OCI_SIGNATURE flatpak_oci_signature_get_type ()
G_DECLARE_FINAL_TYPE (FlatpakOciSignature, flatpak_oci_signature, FLATPAK, OCI_SIGNATURE, FlatpakJson)
typedef struct
{
char *digest;
} FlatpakOciSignatureCriticalImage;
typedef struct
{
char *ref;
} FlatpakOciSignatureCriticalIdentity;
typedef struct
{
char *type;
FlatpakOciSignatureCriticalImage image;
FlatpakOciSignatureCriticalIdentity identity;
} FlatpakOciSignatureCritical;
typedef struct
{
char *creator;
gint64 timestamp;
} FlatpakOciSignatureOptional;
struct _FlatpakOciSignature
{
FlatpakJson parent;
FlatpakOciSignatureCritical critical;
FlatpakOciSignatureOptional optional;
};
struct _FlatpakOciSignatureClass
{
FlatpakJsonClass parent_class;
};
FlatpakOciSignature *flatpak_oci_signature_new (const char *digest, const char *ref);
#endif /* __FLATPAK_JSON_OCI_H__ */