1 /*
2 * Copyright (C) 2015 Red Hat, Inc. (www.redhat.com)
3 * Copyright (C) 2018 Red Hat, Inc. (www.redhat.com)
4 *
5 * This library is free software: you can redistribute it and/or modify it
6 * under the terms of the GNU Lesser General Public License as published by
7 * the Free Software Foundation.
8 *
9 * This library is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
12 * for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this library. If not, see <http://www.gnu.org/licenses/>.
16 *
17 */
18
19 #include "evolution-data-server-config.h"
20
21 #include <glib.h>
22
23 #include "e-oauth2-services.h"
24 #include "e-oauth2-service.h"
25
26 #include "e-source-credentials-provider-impl-oauth2.h"
27
28 struct _ESourceCredentialsProviderImplOAuth2Private {
29 EOAuth2Services *services;
30 };
31
G_DEFINE_TYPE_WITH_PRIVATE(ESourceCredentialsProviderImplOAuth2,e_source_credentials_provider_impl_oauth2,E_TYPE_SOURCE_CREDENTIALS_PROVIDER_IMPL)32 G_DEFINE_TYPE_WITH_PRIVATE (ESourceCredentialsProviderImplOAuth2, e_source_credentials_provider_impl_oauth2, E_TYPE_SOURCE_CREDENTIALS_PROVIDER_IMPL)
33
34 static gboolean
35 e_source_credentials_provider_impl_oauth2_can_process (ESourceCredentialsProviderImpl *provider_impl,
36 ESource *source)
37 {
38 ESourceCredentialsProviderImplOAuth2 *oauth2_provider;
39 EOAuth2Service *service;
40 gboolean can_process;
41
42 g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL_OAUTH2 (provider_impl), FALSE);
43 g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
44
45 oauth2_provider = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_OAUTH2 (provider_impl);
46
47 if (!e_oauth2_services_is_supported () || !oauth2_provider->priv->services)
48 return FALSE;
49
50 service = e_oauth2_services_find (oauth2_provider->priv->services, source);
51 can_process = service != NULL;
52 g_clear_object (&service);
53
54 return can_process;
55 }
56
57 static gboolean
e_source_credentials_provider_impl_oauth2_can_store(ESourceCredentialsProviderImpl * provider_impl)58 e_source_credentials_provider_impl_oauth2_can_store (ESourceCredentialsProviderImpl *provider_impl)
59 {
60 g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL_OAUTH2 (provider_impl), FALSE);
61
62 return FALSE;
63 }
64
65 static gboolean
e_source_credentials_provider_impl_oauth2_can_prompt(ESourceCredentialsProviderImpl * provider_impl)66 e_source_credentials_provider_impl_oauth2_can_prompt (ESourceCredentialsProviderImpl *provider_impl)
67 {
68 g_return_val_if_fail (E_IS_SOURCE_CREDENTIALS_PROVIDER_IMPL_OAUTH2 (provider_impl), FALSE);
69
70 return e_oauth2_services_is_supported ();
71 }
72
73 static void
e_source_credentials_provider_impl_oauth2_dispose(GObject * object)74 e_source_credentials_provider_impl_oauth2_dispose (GObject *object)
75 {
76 ESourceCredentialsProviderImplOAuth2 *provider_impl = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_OAUTH2 (object);
77
78 g_clear_object (&provider_impl->priv->services);
79
80 /* Chain up to parent's method. */
81 G_OBJECT_CLASS (e_source_credentials_provider_impl_oauth2_parent_class)->dispose (object);
82 }
83
84 static void
e_source_credentials_provider_impl_oauth2_class_init(ESourceCredentialsProviderImplOAuth2Class * klass)85 e_source_credentials_provider_impl_oauth2_class_init (ESourceCredentialsProviderImplOAuth2Class *klass)
86 {
87 ESourceCredentialsProviderImplClass *impl_class;
88 GObjectClass *object_class;
89
90 impl_class = E_SOURCE_CREDENTIALS_PROVIDER_IMPL_CLASS (klass);
91 impl_class->can_process = e_source_credentials_provider_impl_oauth2_can_process;
92 impl_class->can_store = e_source_credentials_provider_impl_oauth2_can_store;
93 impl_class->can_prompt = e_source_credentials_provider_impl_oauth2_can_prompt;
94
95 object_class = G_OBJECT_CLASS (klass);
96 object_class->dispose = e_source_credentials_provider_impl_oauth2_dispose;
97 }
98
99 static void
e_source_credentials_provider_impl_oauth2_init(ESourceCredentialsProviderImplOAuth2 * provider_impl)100 e_source_credentials_provider_impl_oauth2_init (ESourceCredentialsProviderImplOAuth2 *provider_impl)
101 {
102 provider_impl->priv = e_source_credentials_provider_impl_oauth2_get_instance_private (provider_impl);
103
104 if (e_oauth2_services_is_supported ())
105 provider_impl->priv->services = e_oauth2_services_new ();
106 }
107