libpurple/plugins/keyrings/secretservice.c

Wed, 14 Sep 2016 12:06:57 -0500

author
Mike Ruprecht <cmaiku@gmail.com>
date
Wed, 14 Sep 2016 12:06:57 -0500
changeset 38154
bb021423c1bb
parent 38153
d4cd494a36a5
child 38155
5021b2db0ee5
permissions
-rw-r--r--

libsecret-keyring: Use correct *_finish() functions

Gio async *_finish() functions need to be matched to their async
functions. This patch splits the ss_save_continue() callback into
separate functions to use the correct ones.

34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
1 /* purple
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
2 * @file secretservice.c Secret Service password storage
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
3 * @ingroup plugins
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
4 *
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
7 * source distribution.
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
8 *
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
12 * (at your option) any later version.
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
13 *
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
17 * GNU General Public License for more details.
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
18 *
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
20 * along with this program ; if not, write to the Free Software
34199
73d122f25f2b Localize strings
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34197
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
22 */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
23
34197
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
24 /* TODO
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
25 *
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
26 * This keyring needs some more work, so it will be disabled until its quality
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
27 * was raised. Some of the pain points:
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
28 * - throws a lot of g_warnings
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
29 * - it doesn't notify about some backend faults (like access denied), some of
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
30 * them are not handled at all
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
31 * - it could use libsecret's Complete API
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
32 * - code formatting could be better
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
33 */
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
34
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
35 #include "internal.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
36 #include "account.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
37 #include "debug.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
38 #include "keyring.h"
36367
891eea799578 Renamed plugin.[ch] to plugins.[ch], since we (will) no longer have a PurplePlugin structure.
Ankit Vani <a@nevitus.org>
parents: 34199
diff changeset
39 #include "plugins.h"
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
40 #include "version.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
41
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
42 #include <libsecret/secret.h>
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
43
36136
3e884ce58f23 Add note for translators.
Mark Doliner <mark@kingant.net>
parents: 35362
diff changeset
44 /* Translators: Secret Service is a service that runs on the user's computer.
3e884ce58f23 Add note for translators.
Mark Doliner <mark@kingant.net>
parents: 35362
diff changeset
45 It is one option for where the user's passwords can be stored. It is a
3e884ce58f23 Add note for translators.
Mark Doliner <mark@kingant.net>
parents: 35362
diff changeset
46 project name. It may not be appropriate to translate this string, but
36145
0b3bca55747d s/reason/reasonable/ (thanks, rlaager)
Mark Doliner <mark@kingant.net>
parents: 36136
diff changeset
47 transliterating to your alphabet is reasonable. More info about the
0b3bca55747d s/reason/reasonable/ (thanks, rlaager)
Mark Doliner <mark@kingant.net>
parents: 36136
diff changeset
48 project can be found at https://wiki.gnome.org/Projects/Libsecret */
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
49 #define SECRETSERVICE_NAME N_("Secret Service")
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
50 #define SECRETSERVICE_ID "keyring-libsecret"
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
51 #define SECRETSERVICE_DOMAIN (g_quark_from_static_string(SECRETSERVICE_ID))
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
52
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
53 static PurpleKeyring *keyring_handler = NULL;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
54
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
55 static const SecretSchema purple_schema = {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
56 "im.pidgin.Purple", SECRET_SCHEMA_NONE,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
57 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
58 {"user", SECRET_SCHEMA_ATTRIBUTE_STRING},
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
59 {"protocol", SECRET_SCHEMA_ATTRIBUTE_STRING},
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
60 {"NULL", 0}
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
61 },
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
62 /* Reserved fields */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
63 0, 0, 0, 0, 0, 0, 0, 0
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
64 };
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
65
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
66 typedef struct _InfoStorage InfoStorage;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
67
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
68 struct _InfoStorage
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
69 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
70 PurpleAccount *account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
71 gpointer cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
72 gpointer user_data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
73 };
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
74
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
75 /***********************************************/
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
76 /* Keyring interface */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
77 /***********************************************/
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
78 static void
38153
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
79 ss_g_error_to_keyring_error(GError **error, PurpleAccount *account)
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
80 {
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
81 GError *old_error;
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
82 GError *new_error = NULL;
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
83
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
84 g_return_if_fail(error != NULL);
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
85
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
86 old_error = *error;
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
87
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
88 if (g_error_matches(old_error, G_DBUS_ERROR,
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
89 G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND) ||
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
90 g_error_matches(old_error, G_DBUS_ERROR,
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
91 G_DBUS_ERROR_IO_ERROR)) {
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
92 purple_debug_info("keyring-libsecret",
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
93 "Failed to communicate with Secret "
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
94 "Service (account: %s (%s)).\n",
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
95 purple_account_get_username(account),
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
96 purple_account_get_protocol_id(account));
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
97 new_error = g_error_new(PURPLE_KEYRING_ERROR,
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
98 PURPLE_KEYRING_ERROR_BACKENDFAIL,
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
99 "Failed to communicate with Secret "
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
100 "Service (account: %s).",
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
101 purple_account_get_username(account));
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
102 } else {
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
103 purple_debug_error("keyring-libsecret",
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
104 "Unknown error (account: %s (%s), "
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
105 "domain: %s, code: %d): %s.\n",
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
106 purple_account_get_username(account),
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
107 purple_account_get_protocol_id(account),
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
108 g_quark_to_string(old_error->domain),
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
109 old_error->code, old_error->message);
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
110 new_error = g_error_new(PURPLE_KEYRING_ERROR,
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
111 PURPLE_KEYRING_ERROR_BACKENDFAIL,
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
112 "Unknown error (account: %s).",
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
113 purple_account_get_username(account));
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
114 }
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
115
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
116 g_clear_error(error);
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
117 g_propagate_error(error, new_error);
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
118 }
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
119
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
120 static void
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
121 ss_read_continue(GObject *object, GAsyncResult *result, gpointer data)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
122 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
123 InfoStorage *storage = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
124 PurpleAccount *account = storage->account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
125 PurpleKeyringReadCallback cb = storage->cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
126 char *password;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
127 GError *error = NULL;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
128
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
129 password = secret_password_lookup_finish(result, &error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
130
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
131 if (error != NULL) {
38153
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
132 ss_g_error_to_keyring_error(&error, account);
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
133 } else if (password == NULL) {
34129
52b91b4b8314 Proper error handling when doing a password migration, fixes reverting it.
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34116
diff changeset
134 error = g_error_new(PURPLE_KEYRING_ERROR,
35362
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
135 PURPLE_KEYRING_ERROR_NOPASSWORD,
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
136 "No password found for account: %s",
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
137 purple_account_get_username(account));
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
138 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
139
38153
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
140 if (cb != NULL) {
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
141 cb(account, password, error, storage->user_data);
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
142 }
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
143
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
144 g_clear_error(&error);
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
145 g_free(storage);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
146 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
147
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
148 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
149 ss_read(PurpleAccount *account, PurpleKeyringReadCallback cb, gpointer data)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
150 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
151 InfoStorage *storage = g_new0(InfoStorage, 1);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
152
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
153 storage->account = account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
154 storage->cb = cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
155 storage->user_data = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
156
35362
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
157 secret_password_lookup(&purple_schema, NULL, ss_read_continue, storage,
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
158 "user", purple_account_get_username(account),
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
159 "protocol", purple_account_get_protocol_id(account), NULL);
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
160 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
161
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
162 static void
38154
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
163 ss_save_continue(GError *error, gpointer data)
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
164 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
165 InfoStorage *storage = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
166 PurpleKeyringSaveCallback cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
167 PurpleAccount *account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
168
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
169 account = storage->account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
170 cb = storage->cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
171
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
172 if (error != NULL) {
38153
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
173 ss_g_error_to_keyring_error(&error, account);
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
174 } else {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
175 purple_debug_info("keyring-libsecret", "Password for %s updated.\n",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
176 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
177 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
178
38153
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
179 if (cb != NULL)
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
180 cb(account, error, storage->user_data);
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
181
d4cd494a36a5 libsecret-keyring: Factor out GError handling into its own function
Mike Ruprecht <cmaiku@gmail.com>
parents: 38152
diff changeset
182 g_clear_error(&error);
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
183 g_free(storage);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
184 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
185
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
186 static void
38154
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
187 ss_store_continue(GObject *object, GAsyncResult *result, gpointer data)
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
188 {
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
189 GError *error = NULL;
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
190
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
191 secret_password_store_finish(result, &error);
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
192
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
193 ss_save_continue(error, data);
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
194 }
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
195
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
196 static void
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
197 ss_clear_continue(GObject *object, GAsyncResult *result, gpointer data)
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
198 {
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
199 GError *error = NULL;
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
200
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
201 secret_password_clear_finish(result, &error);
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
202
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
203 ss_save_continue(error, data);
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
204 }
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
205
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
206 static void
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
207 ss_save(PurpleAccount *account,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
208 const gchar *password,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
209 PurpleKeyringSaveCallback cb,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
210 gpointer data)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
211 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
212 InfoStorage *storage = g_new0(InfoStorage, 1);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
213
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
214 storage->account = account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
215 storage->cb = cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
216 storage->user_data = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
217
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
218 if (password != NULL && *password != '\0') {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
219 const char *username = purple_account_get_username(account);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
220 char *label;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
221
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
222 purple_debug_info("keyring-libsecret",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
223 "Updating password for account %s (%s).\n",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
224 username, purple_account_get_protocol_id(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
225
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
226 label = g_strdup_printf(_("Pidgin IM password for account %s"), username);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
227 secret_password_store(&purple_schema, SECRET_COLLECTION_DEFAULT,
38154
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
228 label, password, NULL, ss_store_continue, storage,
35362
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
229 "user", username,
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
230 "protocol", purple_account_get_protocol_id(account),
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
231 NULL);
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
232 g_free(label);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
233
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
234 } else { /* password == NULL, delete password. */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
235 purple_debug_info("keyring-libsecret",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
236 "Forgetting password for account %s (%s).\n",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
237 purple_account_get_username(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
238 purple_account_get_protocol_id(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
239
38154
bb021423c1bb libsecret-keyring: Use correct *_finish() functions
Mike Ruprecht <cmaiku@gmail.com>
parents: 38153
diff changeset
240 secret_password_clear(&purple_schema, NULL, ss_clear_continue,
35362
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
241 storage, "user", purple_account_get_username(account),
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
242 "protocol", purple_account_get_protocol_id(account),
a6223370667b Style: fix braces for http, keyring
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35350
diff changeset
243 NULL);
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
244 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
245 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
246
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
247 static void
34155
567c48f9658c Refactor the keyring API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34154
diff changeset
248 ss_close(void)
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
249 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
250 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
251
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
252 static gboolean
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
253 ss_init(GError **error)
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
254 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
255 keyring_handler = purple_keyring_new();
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
256
34281
ad957d0a467a Keyring (and some GTK): fix translation callbacks
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34199
diff changeset
257 purple_keyring_set_name(keyring_handler, _(SECRETSERVICE_NAME));
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
258 purple_keyring_set_id(keyring_handler, SECRETSERVICE_ID);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
259 purple_keyring_set_read_password(keyring_handler, ss_read);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
260 purple_keyring_set_save_password(keyring_handler, ss_save);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
261 purple_keyring_set_close_keyring(keyring_handler, ss_close);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
262
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
263 purple_keyring_register(keyring_handler);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
264
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
265 return TRUE;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
266 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
267
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
268 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
269 ss_uninit(void)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
270 {
34155
567c48f9658c Refactor the keyring API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34154
diff changeset
271 ss_close();
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
272 purple_keyring_unregister(keyring_handler);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
273 purple_keyring_free(keyring_handler);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
274 keyring_handler = NULL;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
275 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
276
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
277 /***********************************************/
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
278 /* Plugin interface */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
279 /***********************************************/
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
280
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
281 static PurplePluginInfo *
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
282 plugin_query(GError **error)
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
283 {
36642
b8ba53daa445 Updated libpurple to use current GPlugin
Ankit Vani <a@nevitus.org>
parents: 36505
diff changeset
284 const gchar * const authors[] = {
b8ba53daa445 Updated libpurple to use current GPlugin
Ankit Vani <a@nevitus.org>
parents: 36505
diff changeset
285 "Elliott Sales de Andrade (qulogic[at]pidgin.im)",
b8ba53daa445 Updated libpurple to use current GPlugin
Ankit Vani <a@nevitus.org>
parents: 36505
diff changeset
286 NULL
b8ba53daa445 Updated libpurple to use current GPlugin
Ankit Vani <a@nevitus.org>
parents: 36505
diff changeset
287 };
b8ba53daa445 Updated libpurple to use current GPlugin
Ankit Vani <a@nevitus.org>
parents: 36505
diff changeset
288
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
289 return purple_plugin_info_new(
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
290 "id", SECRETSERVICE_ID,
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
291 "name", SECRETSERVICE_NAME,
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
292 "version", DISPLAY_VERSION,
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
293 "category", N_("Keyring"),
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
294 "summary", "Secret Service Plugin",
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
295 "description", N_("This plugin will store passwords in Secret Service."),
36642
b8ba53daa445 Updated libpurple to use current GPlugin
Ankit Vani <a@nevitus.org>
parents: 36505
diff changeset
296 "authors", authors,
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
297 "website", PURPLE_WEBSITE,
36505
60c161851325 Integrated purple ABI requirement into GPlugin's "abi-version" property
Ankit Vani <a@nevitus.org>
parents: 36502
diff changeset
298 "abi-version", PURPLE_ABI_VERSION,
36653
4084c34c051d Override gplugin info's "flags" property. Added PURPLE_PLUGIN_INFO_FLAGS_INTERNAL and PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD.
Ankit Vani <a@nevitus.org>
parents: 36642
diff changeset
299 "flags", PURPLE_PLUGIN_INFO_FLAGS_INTERNAL,
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
300 NULL
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
301 );
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
302 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
303
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
304 static gboolean
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
305 plugin_load(PurplePlugin *plugin, GError **error)
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
306 {
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
307 return ss_init(error);
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
308 }
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
309
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
310 static gboolean
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
311 plugin_unload(PurplePlugin *plugin, GError **error)
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
312 {
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
313 if (purple_keyring_get_inuse() == keyring_handler) {
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
314 g_set_error(error, SECRETSERVICE_DOMAIN, 0, "The keyring is currently "
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
315 "in use.");
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
316 return FALSE;
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
317 }
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
318
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
319 ss_uninit();
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
320
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
321 return TRUE;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
322 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
323
36656
3e21d5b61c2b Fix keyring plugin names passed to PURPLE_PLUGIN_INIT
Ankit Vani <a@nevitus.org>
parents: 36653
diff changeset
324 PURPLE_PLUGIN_INIT(secret_service, plugin_query, plugin_load, plugin_unload);

mercurial