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