|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Copyright (C) 2011 Collabora Ltd.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
b00eeb |
* it under the terms of the GNU Lesser General Public License as
|
|
Packit |
b00eeb |
* published by the Free Software Foundation; either version 2.1 of
|
|
Packit |
b00eeb |
* the License, or (at your option) any later version.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* This program is distributed in the hope that it will be useful, but
|
|
Packit |
b00eeb |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
b00eeb |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
b00eeb |
* Lesser General Public License for more details.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b00eeb |
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Author: Stef Walter <stefw@collabora.co.uk>
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include "config.h"
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include "gcr-gnupg-key.h"
|
|
Packit |
b00eeb |
#include "gcr-gnupg-records.h"
|
|
Packit |
b00eeb |
#include "gcr-record.h"
|
|
Packit |
b00eeb |
#include "gcr-memory-icon.h"
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include "gck/gck.h"
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include <glib/gi18n-lib.h>
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
enum {
|
|
Packit |
b00eeb |
PROP_0,
|
|
Packit |
b00eeb |
PROP_KEYID,
|
|
Packit |
b00eeb |
PROP_PUBLIC_RECORDS,
|
|
Packit |
b00eeb |
PROP_SECRET_RECORDS,
|
|
Packit |
b00eeb |
PROP_LABEL,
|
|
Packit |
b00eeb |
PROP_MARKUP,
|
|
Packit |
b00eeb |
PROP_DESCRIPTION,
|
|
Packit |
b00eeb |
PROP_SHORT_KEYID,
|
|
Packit |
b00eeb |
PROP_ICON
|
|
Packit |
b00eeb |
};
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
struct _GcrGnupgKeyPrivate {
|
|
Packit |
b00eeb |
GPtrArray *public_records;
|
|
Packit |
b00eeb |
GPtrArray *secret_records;
|
|
Packit |
b00eeb |
GIcon *icon;
|
|
Packit |
b00eeb |
};
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
G_DEFINE_TYPE (GcrGnupgKey, _gcr_gnupg_key, G_TYPE_OBJECT);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static gchar *
|
|
Packit |
b00eeb |
calculate_name (GcrGnupgKey *self)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrRecord* record;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
record = _gcr_records_find (self->pv->public_records, GCR_RECORD_SCHEMA_UID);
|
|
Packit |
b00eeb |
g_return_val_if_fail (record, NULL);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
return _gcr_record_get_string (record, GCR_RECORD_UID_USERID);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static gchar *
|
|
Packit |
b00eeb |
calculate_markup (GcrGnupgKey *self)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
gchar *markup = NULL;
|
|
Packit |
b00eeb |
gchar *uid, *name, *email, *comment;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
uid = calculate_name (self);
|
|
Packit |
b00eeb |
if (uid == NULL)
|
|
Packit |
b00eeb |
return NULL;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
_gcr_gnupg_records_parse_user_id (uid, &name, &email, &comment);
|
|
Packit |
b00eeb |
if (comment != NULL && comment[0] != '\0')
|
|
Packit |
b00eeb |
markup = g_markup_printf_escaped ("%s\n<small>%s \'%s\'</small>", name, email, comment);
|
|
Packit |
b00eeb |
else
|
|
Packit |
b00eeb |
markup = g_markup_printf_escaped ("%s\n<small>%s</small>", name, email);
|
|
Packit |
b00eeb |
g_free (name);
|
|
Packit |
b00eeb |
g_free (email);
|
|
Packit |
b00eeb |
g_free (comment);
|
|
Packit |
b00eeb |
g_free (uid);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
return markup;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_gnupg_key_init (GcrGnupgKey *self)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
self->pv = (G_TYPE_INSTANCE_GET_PRIVATE (self, GCR_TYPE_GNUPG_KEY, GcrGnupgKeyPrivate));
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_gnupg_key_finalize (GObject *obj)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrGnupgKey *self = GCR_GNUPG_KEY (obj);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
if (self->pv->public_records)
|
|
Packit |
b00eeb |
g_ptr_array_unref (self->pv->public_records);
|
|
Packit |
b00eeb |
if (self->pv->secret_records)
|
|
Packit |
b00eeb |
g_ptr_array_unref (self->pv->secret_records);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
G_OBJECT_CLASS (_gcr_gnupg_key_parent_class)->finalize (obj);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_gnupg_key_set_property (GObject *obj, guint prop_id, const GValue *value,
|
|
Packit |
b00eeb |
GParamSpec *pspec)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrGnupgKey *self = GCR_GNUPG_KEY (obj);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
switch (prop_id) {
|
|
Packit |
b00eeb |
case PROP_PUBLIC_RECORDS:
|
|
Packit |
b00eeb |
_gcr_gnupg_key_set_public_records (self, g_value_get_boxed (value));
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
case PROP_SECRET_RECORDS:
|
|
Packit |
b00eeb |
_gcr_gnupg_key_set_secret_records (self, g_value_get_boxed (value));
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
default:
|
|
Packit |
b00eeb |
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_gnupg_key_get_property (GObject *obj, guint prop_id, GValue *value,
|
|
Packit |
b00eeb |
GParamSpec *pspec)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrGnupgKey *self = GCR_GNUPG_KEY (obj);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
switch (prop_id) {
|
|
Packit |
b00eeb |
case PROP_PUBLIC_RECORDS:
|
|
Packit |
b00eeb |
g_value_set_boxed (value, self->pv->public_records);
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
case PROP_SECRET_RECORDS:
|
|
Packit |
b00eeb |
g_value_set_boxed (value, self->pv->secret_records);
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
case PROP_KEYID:
|
|
Packit |
b00eeb |
g_value_set_string (value, _gcr_gnupg_key_get_keyid (self));
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
case PROP_LABEL:
|
|
Packit |
b00eeb |
g_value_take_string (value, calculate_name (self));
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
case PROP_DESCRIPTION:
|
|
Packit |
b00eeb |
g_value_set_string (value, _("PGP Key"));
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
case PROP_MARKUP:
|
|
Packit |
b00eeb |
g_value_take_string (value, calculate_markup (self));
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
case PROP_SHORT_KEYID:
|
|
Packit |
b00eeb |
g_value_set_string (value, _gcr_gnupg_records_get_short_keyid (self->pv->public_records));
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
case PROP_ICON:
|
|
Packit |
b00eeb |
g_value_set_object (value, _gcr_gnupg_key_get_icon (self));
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
default:
|
|
Packit |
b00eeb |
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
|
|
Packit |
b00eeb |
break;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_gnupg_key_class_init (GcrGnupgKeyClass *klass)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
_gcr_gnupg_key_parent_class = g_type_class_peek_parent (klass);
|
|
Packit |
b00eeb |
g_type_class_add_private (klass, sizeof (GcrGnupgKeyPrivate));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
gobject_class->finalize = _gcr_gnupg_key_finalize;
|
|
Packit |
b00eeb |
gobject_class->set_property = _gcr_gnupg_key_set_property;
|
|
Packit |
b00eeb |
gobject_class->get_property = _gcr_gnupg_key_get_property;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* GcrGnupgKey:public-records:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Public key data. Should always be present.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
g_object_class_install_property (gobject_class, PROP_PUBLIC_RECORDS,
|
|
Packit |
b00eeb |
g_param_spec_boxed ("public-records", "Public Records", "Public Key Colon Records",
|
|
Packit |
b00eeb |
G_TYPE_PTR_ARRAY, G_PARAM_READWRITE));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* GcrGnupgKey:secret-records:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Secret key data. The keyid of this data must match public-dataset.
|
|
Packit |
b00eeb |
* If present, this key represents a secret key.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
g_object_class_install_property (gobject_class, PROP_SECRET_RECORDS,
|
|
Packit |
b00eeb |
g_param_spec_boxed ("secret-records", "Secret Records", "Secret Key Colon Records",
|
|
Packit |
b00eeb |
G_TYPE_PTR_ARRAY, G_PARAM_READWRITE));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* GcrGnupgKey:keyid:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Key identifier.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
g_object_class_install_property (gobject_class, PROP_KEYID,
|
|
Packit |
b00eeb |
g_param_spec_string ("keyid", "Key ID", "Key identifier",
|
|
Packit |
b00eeb |
"", G_PARAM_READABLE));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* GcrGnupgKey:label:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* User readable label for this key.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
g_object_class_install_property (gobject_class, PROP_LABEL,
|
|
Packit |
b00eeb |
g_param_spec_string ("label", "Label", "Key label",
|
|
Packit |
b00eeb |
"", G_PARAM_READABLE));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* GcrGnupgKey::description:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Description of type of key.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
g_object_class_install_property (gobject_class, PROP_DESCRIPTION,
|
|
Packit |
b00eeb |
g_param_spec_string ("description", "Description", "Description of object type",
|
|
Packit |
b00eeb |
"", G_PARAM_READABLE));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* GcrGnupgKey:markup:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* User readable markup which contains key label.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
g_object_class_install_property (gobject_class, PROP_MARKUP,
|
|
Packit |
b00eeb |
g_param_spec_string ("markup", "Markup", "Markup which describes key",
|
|
Packit |
b00eeb |
"", G_PARAM_READABLE));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* GcrGnupgKey:short-keyid:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* User readable key identifier.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
g_object_class_install_property (gobject_class, PROP_SHORT_KEYID,
|
|
Packit |
b00eeb |
g_param_spec_string ("short-keyid", "Short Key ID", "Display key identifier",
|
|
Packit |
b00eeb |
"", G_PARAM_READABLE));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* GcrGnupgKey:icon:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Icon for this key.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
g_object_class_install_property (gobject_class, PROP_ICON,
|
|
Packit |
b00eeb |
g_param_spec_object ("icon", "Icon", "Icon for this key",
|
|
Packit |
b00eeb |
G_TYPE_ICON, G_PARAM_READABLE));
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* _gcr_gnupg_key_new:
|
|
Packit |
b00eeb |
* @pubset: array of GcrRecord* representing public part of key
|
|
Packit |
b00eeb |
* @secset: (allow-none): array of GcrRecord* representing secret part of key.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Create a new GcrGnupgKey for the record data passed. If the secret part
|
|
Packit |
b00eeb |
* of the key is set, then this represents a secret key; otherwise it represents
|
|
Packit |
b00eeb |
* a public key.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Returns: (transfer full): A newly allocated key.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
GcrGnupgKey*
|
|
Packit |
b00eeb |
_gcr_gnupg_key_new (GPtrArray *pubset, GPtrArray *secset)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
g_return_val_if_fail (pubset, NULL);
|
|
Packit |
b00eeb |
return g_object_new (GCR_TYPE_GNUPG_KEY,
|
|
Packit |
b00eeb |
"public-records", pubset,
|
|
Packit |
b00eeb |
"secret-records", secset,
|
|
Packit |
b00eeb |
NULL);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* _gcr_gnupg_key_get_public_records:
|
|
Packit |
b00eeb |
* @self: The key
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Get the record data this key is based on.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Returns: (transfer none): An array of GcrRecord*.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
GPtrArray*
|
|
Packit |
b00eeb |
_gcr_gnupg_key_get_public_records (GcrGnupgKey *self)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
g_return_val_if_fail (GCR_IS_GNUPG_KEY (self), NULL);
|
|
Packit |
b00eeb |
return self->pv->public_records;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* _gcr_gnupg_key_set_public_records:
|
|
Packit |
b00eeb |
* @self: The key
|
|
Packit |
b00eeb |
* @records: The new array of GcrRecord*
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Change the record data that this key is based on.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
void
|
|
Packit |
b00eeb |
_gcr_gnupg_key_set_public_records (GcrGnupgKey *self, GPtrArray *records)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GObject *obj;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
g_return_if_fail (GCR_IS_GNUPG_KEY (self));
|
|
Packit |
b00eeb |
g_return_if_fail (records);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/* Check that it matches previous */
|
|
Packit |
b00eeb |
if (self->pv->public_records) {
|
|
Packit |
b00eeb |
const gchar *old_keyid = _gcr_gnupg_records_get_keyid (self->pv->public_records);
|
|
Packit |
b00eeb |
const gchar *new_keyid = _gcr_gnupg_records_get_keyid (records);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
if (g_strcmp0 (old_keyid, new_keyid) != 0) {
|
|
Packit |
b00eeb |
g_warning ("it is an error to change a gnupg key so that the "
|
|
Packit |
b00eeb |
"fingerprint is no longer the same: %s != %s",
|
|
Packit |
b00eeb |
old_keyid, new_keyid);
|
|
Packit |
b00eeb |
return;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
g_ptr_array_ref (records);
|
|
Packit |
b00eeb |
if (self->pv->public_records)
|
|
Packit |
b00eeb |
g_ptr_array_unref (self->pv->public_records);
|
|
Packit |
b00eeb |
self->pv->public_records = records;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
obj = G_OBJECT (self);
|
|
Packit |
b00eeb |
g_object_freeze_notify (obj);
|
|
Packit |
b00eeb |
g_object_notify (obj, "public-records");
|
|
Packit |
b00eeb |
g_object_notify (obj, "label");
|
|
Packit |
b00eeb |
g_object_notify (obj, "markup");
|
|
Packit |
b00eeb |
g_object_thaw_notify (obj);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* _gcr_gnupg_key_get_secret_records:
|
|
Packit |
b00eeb |
* @self: The key
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Get the record secret data this key is based on. %NULL if a public key.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Returns: (transfer none) (allow-none): An array of GcrColons*.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
GPtrArray*
|
|
Packit |
b00eeb |
_gcr_gnupg_key_get_secret_records (GcrGnupgKey *self)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
g_return_val_if_fail (GCR_IS_GNUPG_KEY (self), NULL);
|
|
Packit |
b00eeb |
return self->pv->secret_records;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* _gcr_gnupg_key_set_secret_records:
|
|
Packit |
b00eeb |
* @self: The key
|
|
Packit |
b00eeb |
* @records: (allow-none): The new array of GcrRecord*
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Set the secret data for this key. %NULL if public key.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
void
|
|
Packit |
b00eeb |
_gcr_gnupg_key_set_secret_records (GcrGnupgKey *self, GPtrArray *records)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GObject *obj;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
g_return_if_fail (GCR_IS_GNUPG_KEY (self));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/* Check that it matches public key */
|
|
Packit |
b00eeb |
if (self->pv->public_records && records) {
|
|
Packit |
b00eeb |
const gchar *pub_keyid = _gcr_gnupg_records_get_keyid (self->pv->public_records);
|
|
Packit |
b00eeb |
const gchar *sec_keyid = _gcr_gnupg_records_get_keyid (records);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
if (g_strcmp0 (pub_keyid, sec_keyid) != 0) {
|
|
Packit |
b00eeb |
g_warning ("it is an error to create a gnupg key so that the "
|
|
Packit |
b00eeb |
"fingerprint of thet pub and sec parts are not the same: %s != %s",
|
|
Packit |
b00eeb |
pub_keyid, sec_keyid);
|
|
Packit |
b00eeb |
return;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
if (records)
|
|
Packit |
b00eeb |
g_ptr_array_ref (records);
|
|
Packit |
b00eeb |
if (self->pv->secret_records)
|
|
Packit |
b00eeb |
g_ptr_array_unref (self->pv->secret_records);
|
|
Packit |
b00eeb |
self->pv->secret_records = records;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
obj = G_OBJECT (self);
|
|
Packit |
b00eeb |
g_object_freeze_notify (obj);
|
|
Packit |
b00eeb |
g_object_notify (obj, "secret-records");
|
|
Packit |
b00eeb |
g_object_thaw_notify (obj);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* _gcr_gnupg_key_get_keyid:
|
|
Packit |
b00eeb |
* @self: The key
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Get the keyid for this key.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Returns: (transfer none): The keyid.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
const gchar*
|
|
Packit |
b00eeb |
_gcr_gnupg_key_get_keyid (GcrGnupgKey *self)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
g_return_val_if_fail (GCR_IS_GNUPG_KEY (self), NULL);
|
|
Packit |
b00eeb |
return _gcr_gnupg_records_get_keyid (self->pv->public_records);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* _gcr_gnupg_key_get_icon:
|
|
Packit |
b00eeb |
* @self: A gnupg key.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Get the display icon for this key.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Return value: (transfer none): The icon, owned by the key.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
GIcon*
|
|
Packit |
b00eeb |
_gcr_gnupg_key_get_icon (GcrGnupgKey *self)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
g_return_val_if_fail (GCR_IS_GNUPG_KEY (self), NULL);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
if (self->pv->icon == NULL) {
|
|
Packit |
b00eeb |
self->pv->icon = _gcr_gnupg_records_get_icon (self->pv->public_records);
|
|
Packit |
b00eeb |
if (self->pv->icon == NULL) {
|
|
Packit |
b00eeb |
if (self->pv->secret_records)
|
|
Packit |
b00eeb |
self->pv->icon = g_themed_icon_new ("gcr-key-pair");
|
|
Packit |
b00eeb |
else
|
|
Packit |
b00eeb |
self->pv->icon = g_themed_icon_new ("gcr-key");
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
return self->pv->icon;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* _gcr_gnupg_key_get_columns:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Get the columns that we should display for gnupg keys.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Returns: (transfer none): The columns, NULL terminated, should not be freed.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
const GcrColumn*
|
|
Packit |
b00eeb |
_gcr_gnupg_key_get_columns (void)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
static GcrColumn columns[] = {
|
|
Packit |
b00eeb |
{ "icon", /* later */ 0, /* later */ 0, NULL, 0, NULL, 0 },
|
|
Packit |
b00eeb |
{ "label", G_TYPE_STRING, G_TYPE_STRING, NC_("column", "Name"),
|
|
Packit |
b00eeb |
GCR_COLUMN_SORTABLE, NULL, 0 },
|
|
Packit |
b00eeb |
{ "short-keyid", G_TYPE_STRING, G_TYPE_STRING, NC_("column", "Key ID"),
|
|
Packit |
b00eeb |
GCR_COLUMN_SORTABLE, NULL, 0 },
|
|
Packit |
b00eeb |
{ NULL }
|
|
Packit |
b00eeb |
};
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
columns[0].property_type = columns[0].column_type = G_TYPE_ICON;
|
|
Packit |
b00eeb |
return columns;
|
|
Packit |
b00eeb |
}
|