1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
|
// SPDX-License-Identifier: GPL-2.0-or-later
/* pps-document-signatures.c
* this file is part of papers, a gnome document viewer
*
* Copyright (C) 2022-2024 Jan-Michael Brummer <jan-michael.brummer1@volkswagen.de>
*/
#include "config.h"
#include "pps-document-signatures.h"
G_DEFINE_INTERFACE (PpsDocumentSignatures, pps_document_signatures, 0)
static void
pps_document_signatures_default_init (PpsDocumentSignaturesInterface *klass)
{
}
/**
* pps_document_signatures_set_password_callback:
* @document_signatures: an #PpsDocumentSignatures
* @cb: (scope forever): (closure user_data) an #PpsSignaturePasswordCallback
* @user_data: data to pass to @cb
*
* Popplers crypto backend asks for certificate password before access,
* so set a helper function to actually allow the user to enter his password.
*/
void
pps_document_signatures_set_password_callback (PpsDocumentSignatures *document_signatures,
PpsSignaturePasswordCallback cb,
gpointer user_data)
{
PpsDocumentSignaturesInterface *iface = PPS_DOCUMENT_SIGNATURES_GET_IFACE (document_signatures);
if (iface->set_password_callback)
iface->set_password_callback (document_signatures, cb, user_data);
}
/**
* pps_document_signatures_get_available_signing_certificates:
* @document_signatures: an #PpsDocumentSignatures
*
* Returns: (transfer full) (element-type PpsCertificateInfo): a list of #PpsCertificateInfo objects or %NULL
*/
GList *
pps_document_signatures_get_available_signing_certificates (PpsDocumentSignatures *document_signatures)
{
PpsDocumentSignaturesInterface *iface = PPS_DOCUMENT_SIGNATURES_GET_IFACE (document_signatures);
if (iface->get_available_signing_certificates)
return iface->get_available_signing_certificates (document_signatures);
return NULL;
}
/**
* pps_document_signatures_get_certificate_info:
* @document_signatures: an #PpsDocumentSignatures
* @nick_name: certificate nick name
*
* Returns: (transfer full): a new #PpsCertificateInfo, or %NULL
*/
PpsCertificateInfo *
pps_document_signatures_get_certificate_info (PpsDocumentSignatures *document_signatures,
const char *nick_name)
{
PpsDocumentSignaturesInterface *iface = PPS_DOCUMENT_SIGNATURES_GET_IFACE (document_signatures);
if (iface->get_certificate_info)
return iface->get_certificate_info (document_signatures, nick_name);
return NULL;
}
/**
* pps_document_signatures_sign:
* @document_signatures: an #PpsDocumentSignatures
* @signature: a #PpsSignature
* @cancellable: a #GCancellable
* @callback: a #GAsyncReadyCallback
* @user_data: callback user data
*
* Start the final async process of signing a document using the prepared signature.
*
* Returns: %TRUE if signing has been started,otherwise %FALSE
*/
gboolean
pps_document_signatures_sign (PpsDocumentSignatures *document_signatures,
PpsSignature *signature,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
PpsDocumentSignaturesInterface *iface = PPS_DOCUMENT_SIGNATURES_GET_IFACE (document_signatures);
if (iface->sign) {
iface->sign (document_signatures, signature, cancellable, callback, user_data);
return TRUE;
}
return FALSE;
}
/**
* pps_document_signatures_sign_finish:
* @document_signatures: a #PpsDocumentSignatures
* @result: a #GAsyncResult
* @error: a #Gerror
*
* Finish `pps_document_signatures_sign` operation,
*
* Returns: %TRUE if signing finish has been started,otherwise %FALSE
*/
gboolean
pps_document_signatures_sign_finish (PpsDocumentSignatures *document_signatures,
GAsyncResult *result,
GError **error)
{
PpsDocumentSignaturesInterface *iface = PPS_DOCUMENT_SIGNATURES_GET_IFACE (document_signatures);
if (iface->sign_finish) {
iface->sign_finish (document_signatures, result, error);
return TRUE;
}
return FALSE;
}
/**
* pps_document_signatures_can_sign:
* @document_signatures: a #PpsDocumentSignatures
*
* Checks whether document supports digital signing.
*
* Returns: %TRUE if signing is supported,otherwise %FALSE
*/
gboolean
pps_document_signatures_can_sign (PpsDocumentSignatures *document_signatures)
{
PpsDocumentSignaturesInterface *iface = PPS_DOCUMENT_SIGNATURES_GET_IFACE (document_signatures);
if (iface->can_sign)
return iface->can_sign (document_signatures);
return FALSE;
}
/**
* pps_document_signatures_has_signatures:
* @document_signatures: an #PpsDocumentSignatures
*
* Returns: if the document has digital signatures
*/
gboolean
pps_document_signatures_has_signatures (PpsDocumentSignatures *document_signatures)
{
PpsDocumentSignaturesInterface *iface = PPS_DOCUMENT_SIGNATURES_GET_IFACE (document_signatures);
if (iface->has_signatures)
return iface->has_signatures (document_signatures);
return FALSE;
}
/**
* pps_document_signatures_get_signatures:
* @document_signatures: an #PpsDocumentSignatures
*
* Returns: (element-type PpsSignature) (transfer full): a list of #PpsSignature objects
*/
GList *
pps_document_signatures_get_signatures (PpsDocumentSignatures *document_signatures)
{
PpsDocumentSignaturesInterface *iface = PPS_DOCUMENT_SIGNATURES_GET_IFACE (document_signatures);
if (iface->get_signatures)
return iface->get_signatures (document_signatures);
return NULL;
}
|