/* * Copyright (C) 2015 Red Hat, Inc. (www.redhat.com) * * This library is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . * */ #include "evolution-data-server-config.h" #include #include #include "e-source-credentials-provider.h" #include "e-source-credentials-provider-impl.h" struct _ESourceCredentialsProviderImplPrivate { gboolean dummy; }; G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ESourceCredentialsProviderImpl, e_source_credentials_provider_impl, E_TYPE_EXTENSION) static gboolean source_credentials_provider_impl_lookup_sync (ESourceCredentialsProviderImpl *provider_impl, ESource *source, GCancellable *cancellable, ENamedParameters **out_credentials, GError **error) { g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Credentials lookup is not supported")); return FALSE; } static gboolean source_credentials_provider_impl_store_sync (ESourceCredentialsProviderImpl *provider_impl, ESource *source, const ENamedParameters *credentials, gboolean permanently, GCancellable *cancellable, GError **error) { g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Credentials store is not supported")); return FALSE; } static gboolean source_credentials_provider_impl_delete_sync (ESourceCredentialsProviderImpl *provider_impl, ESource *source, GCancellable *cancellable, GError **error) { g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Credentials delete is not supported")); return FALSE; } static void e_source_credentials_provider_impl_constructed (GObject *object) { ESourceCredentialsProviderImpl *provider_impl = E_SOURCE_CREDENTIALS_PROVIDER_IMPL (object); ESourceCredentialsProvider *provider; /* Chain up to parent's method. */ G_OBJECT_CLASS (e_source_credentials_provider_impl_parent_class)->constructed (object); provider = E_SOURCE_CREDENTIALS_PROVIDER (e_extension_get_extensible (E_EXTENSION (provider_impl))); e_source_credentials_provider_register_impl (provider, provider_impl); } static void e_source_credentials_provider_impl_class_init (ESourceCredentialsProviderImplClass *klass) { GObjectClass *object_class; EExtensionClass *extension_class; ESourceCredentialsProviderImplClass *provider_impl_class; object_class = G_OBJECT_CLASS (klass); object_class->constructed = e_source_credentials_provider_impl_constructed; extension_class = E_EXTENSION_CLASS (klass); extension_class->extensible_type = E_TYPE_SOURCE_CREDENTIALS_PROVIDER; provider_impl_class = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_CLASS (klass); provider_impl_class->lookup_sync = source_credentials_provider_impl_lookup_sync; provider_impl_class->store_sync = source_credentials_provider_impl_store_sync; provider_impl_class->delete_sync = source_credentials_provider_impl_delete_sync; } static void e_source_credentials_provider_impl_init (ESourceCredentialsProviderImpl *provider_impl) { provider_impl->priv = e_source_credentials_provider_impl_get_instance_private (provider_impl); } /** * e_source_credentials_provider_impl_get_provider: * @provider_impl: an #ESourceCredentialsProviderImpl * * Returns an #ESourceCredentialsProvider with which the @provider_impl is associated. * * Returns: (transfer none) : an #ESourceCredentialsProvider * * Since: 3.16 **/ ESourceCredentialsProvider * e_source_credentials_provider_impl_get_provider (ESourceCredentialsProviderImpl *provider_impl) { EExtensible *extensible; g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL (provider_impl), NULL); extensible = e_extension_get_extensible (E_EXTENSION (provider_impl)); if (!extensible) return NULL; return E_SOURCE_CREDENTIALS_PROVIDER (extensible); } /** * e_source_credentials_provider_impl_can_process: * @provider_impl: an #ESourceCredentialsProviderImpl * @source: an #ESource * * Returns whether the @provider_impl can process credentials for the @source. * * Returns: Whether the @provider_impl can process credentials for the @source. * * Since: 3.16 **/ gboolean e_source_credentials_provider_impl_can_process (ESourceCredentialsProviderImpl *provider_impl, ESource *source) { ESourceCredentialsProviderImplClass *klass; g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL (provider_impl), FALSE); g_return_val_if_fail (E_IS_SOURCE (source), FALSE); klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl); g_return_val_if_fail (klass != NULL, FALSE); g_return_val_if_fail (klass->can_process != NULL, FALSE); return klass->can_process (provider_impl, source); } /** * e_source_credentials_provider_impl_can_store: * @provider_impl: an #ESourceCredentialsProviderImpl * * Returns whether the @provider_impl can store credentials. * * Returns: Whether the @provider_impl can store credentials. * * Since: 3.16 **/ gboolean e_source_credentials_provider_impl_can_store (ESourceCredentialsProviderImpl *provider_impl) { ESourceCredentialsProviderImplClass *klass; g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL (provider_impl), FALSE); klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl); g_return_val_if_fail (klass != NULL, FALSE); g_return_val_if_fail (klass->can_store != NULL, FALSE); return klass->can_store (provider_impl); } /** * e_source_credentials_provider_impl_can_prompt: * @provider_impl: an #ESourceCredentialsProviderImpl * * Returns whether credential prompt can be done for the @provider_impl. * * Returns: Whether credential prompt can be done for the @provider_impl. * * Since: 3.16 **/ gboolean e_source_credentials_provider_impl_can_prompt (ESourceCredentialsProviderImpl *provider_impl) { ESourceCredentialsProviderImplClass *klass; g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL (provider_impl), FALSE); klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl); g_return_val_if_fail (klass != NULL, FALSE); g_return_val_if_fail (klass->can_prompt != NULL, FALSE); return klass->can_prompt (provider_impl); } /** * e_source_credentials_provider_impl_lookup_sync: * @provider_impl: an #ESourceCredentialsProviderImpl * @source: an #ESource * @cancellable: optional #GCancellable object, or %NULL * @out_credentials: (out): an #ENamedParameters to be set with stored credentials * @error: return location for a #GError, or %NULL * * Asks @provider_impl to lookup for stored credentials for @source. * The @out_credentials is populated with them. If the result is not * %NULL, then it should be freed with e_named_parameters_free() when * no longer needed. * * Default implementation returns %FALSE and sets #G_IO_ERROR_NOT_SUPPORTED error. * * If an error occurs, the function sets @error and returns %FALSE. * * Returns: %TRUE on success, %FALSE on error * * Since: 3.16 **/ gboolean e_source_credentials_provider_impl_lookup_sync (ESourceCredentialsProviderImpl *provider_impl, ESource *source, GCancellable *cancellable, ENamedParameters **out_credentials, GError **error) { ESourceCredentialsProviderImplClass *klass; g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL (provider_impl), FALSE); g_return_val_if_fail (E_IS_SOURCE (source), FALSE); g_return_val_if_fail (out_credentials != NULL, FALSE); klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl); g_return_val_if_fail (klass != NULL, FALSE); g_return_val_if_fail (klass->lookup_sync != NULL, FALSE); return klass->lookup_sync (provider_impl, source, cancellable, out_credentials, error); } /** * e_source_credentials_provider_impl_store_sync: * @provider_impl: an #ESourceCredentialsProviderImpl * @source: an #ESource * @credentials: an #ENamedParameters containing credentials to store * @permanently: whether to store credentials permanently, or for the current session only * @cancellable: optional #GCancellable object, or %NULL * @error: return location for a #GError, or %NULL * * Asks @provider_impl to store @credentials for @source. * * Default implementation returns %FALSE and sets #G_IO_ERROR_NOT_SUPPORTED error. * * If an error occurs, the function sets @error and returns %FALSE. * * Returns: %TRUE on success, %FALSE on error * * Since: 3.16 **/ gboolean e_source_credentials_provider_impl_store_sync (ESourceCredentialsProviderImpl *provider_impl, ESource *source, const ENamedParameters *credentials, gboolean permanently, GCancellable *cancellable, GError **error) { ESourceCredentialsProviderImplClass *klass; g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL (provider_impl), FALSE); g_return_val_if_fail (E_IS_SOURCE (source), FALSE); g_return_val_if_fail (credentials != NULL, FALSE); klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl); g_return_val_if_fail (klass != NULL, FALSE); g_return_val_if_fail (klass->store_sync != NULL, FALSE); return klass->store_sync (provider_impl, source, credentials, permanently, cancellable, error); } /** * e_source_credentials_provider_impl_delete_sync: * @provider_impl: an #ESourceCredentialsProviderImpl * @source: an #ESource * @cancellable: optional #GCancellable object, or %NULL * @error: return location for a #GError, or %NULL * * Asks @provider_impl to delete any stored credentials for @source. * * Default implementation returns %FALSE and sets #G_IO_ERROR_NOT_SUPPORTED error. * * If an error occurs, the function sets @error and returns %FALSE. * * Returns: %TRUE on success, %FALSE on error * * Since: 3.16 **/ gboolean e_source_credentials_provider_impl_delete_sync (ESourceCredentialsProviderImpl *provider_impl, ESource *source, GCancellable *cancellable, GError **error) { ESourceCredentialsProviderImplClass *klass; g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL (provider_impl), FALSE); g_return_val_if_fail (E_IS_SOURCE (source), FALSE); klass = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_GET_CLASS (provider_impl); g_return_val_if_fail (klass != NULL, FALSE); g_return_val_if_fail (klass->delete_sync != NULL, FALSE); return klass->delete_sync (provider_impl, source, cancellable, error); }