forked from Mirrors/flatpak-builder
OCI: Add json format for atomic-based signatures
parent
5aeec78311
commit
a7216cedd2
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
|
Loading…
Reference in New Issue