libpurple/plugins/keyrings/secretservice.c

Sun, 01 Sep 2013 22:38:16 +0530

author
Ankit Vani <a@nevitus.org>
date
Sun, 01 Sep 2013 22:38:16 +0530
branch
soc.2013.gobjectification.plugins
changeset 36642
b8ba53daa445
parent 36505
60c161851325
child 36653
4084c34c051d
permissions
-rw-r--r--

Updated libpurple to use current GPlugin

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 #error "This keyring needs some more work (see 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 /* 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
27 *
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 * 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
29 * 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
30 * - 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
31 * - 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
32 * 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
33 * - 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
34 * - 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
35 */
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
36
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
37 #include "internal.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
38 #include "account.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
39 #include "debug.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
40 #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
41 #include "plugins.h"
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
42 #include "version.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
43
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
44 #include <libsecret/secret.h>
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
45
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
46 #define SECRETSERVICE_NAME N_("Secret Service")
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
47 #define SECRETSERVICE_ID "keyring-libsecret"
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
48 #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
49
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
50 static PurpleKeyring *keyring_handler = NULL;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
51
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
52 static const SecretSchema purple_schema = {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
53 "im.pidgin.Purple", SECRET_SCHEMA_NONE,
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 {"user", SECRET_SCHEMA_ATTRIBUTE_STRING},
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
56 {"protocol", SECRET_SCHEMA_ATTRIBUTE_STRING},
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
57 {"NULL", 0}
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
58 },
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
59 /* Reserved fields */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
60 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
61 };
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
62
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
63 typedef struct _InfoStorage InfoStorage;
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 struct _InfoStorage
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
66 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
67 PurpleAccount *account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
68 gpointer cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
69 gpointer user_data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
70 };
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
71
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
72 /***********************************************/
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
73 /* Keyring interface */
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 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
76 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
77 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
78 InfoStorage *storage = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
79 PurpleAccount *account = storage->account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
80 PurpleKeyringReadCallback cb = storage->cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
81 char *password;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
82 GError *error = NULL;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
83
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
84 password = secret_password_lookup_finish(result, &error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
85
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
86 if (error != NULL) {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
87 int code = error->code;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
88
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
89 switch (code) {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
90 case G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND:
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
91 case G_DBUS_ERROR_IO_ERROR:
34129
52b91b4b8314 Proper error handling when doing a password migration, fixes reverting it.
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34116
diff changeset
92 error = g_error_new(PURPLE_KEYRING_ERROR,
34154
857c361d3791 Refine keyring error coded
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34144
diff changeset
93 PURPLE_KEYRING_ERROR_BACKENDFAIL,
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
94 "Failed to communicate with Secret Service (account : %s).",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
95 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
96 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
97 cb(account, NULL, error, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
98 g_error_free(error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
99 break;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
100
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
101 default:
34144
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
102 purple_debug_error("keyring-libsecret",
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
103 "Unknown error (account: %s (%s), domain: %s, code: %d): %s.\n",
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
104 purple_account_get_username(account),
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
105 purple_account_get_protocol_id(account),
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
106 g_quark_to_string(error->domain), code, error->message);
34129
52b91b4b8314 Proper error handling when doing a password migration, fixes reverting it.
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34116
diff changeset
107 error = g_error_new(PURPLE_KEYRING_ERROR,
34154
857c361d3791 Refine keyring error coded
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34144
diff changeset
108 PURPLE_KEYRING_ERROR_BACKENDFAIL,
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
109 "Unknown error (account : %s).",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
110 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
111 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
112 cb(account, NULL, error, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
113 g_error_free(error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
114 break;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
115 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
116
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
117 } 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
118 error = g_error_new(PURPLE_KEYRING_ERROR,
34154
857c361d3791 Refine keyring error coded
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34144
diff changeset
119 PURPLE_KEYRING_ERROR_NOPASSWORD,
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
120 "No password found for account: %s",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
121 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
122 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
123 cb(account, NULL, error, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
124 g_error_free(error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
125
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
126 } else {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
127 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
128 cb(account, password, NULL, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
129 }
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 g_free(storage);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
132 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
133
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
134 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
135 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
136 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
137 InfoStorage *storage = g_new0(InfoStorage, 1);
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 storage->account = account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
140 storage->cb = cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
141 storage->user_data = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
142
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
143 secret_password_lookup(&purple_schema,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
144 NULL, ss_read_continue, storage,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
145 "user", purple_account_get_username(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
146 "protocol", purple_account_get_protocol_id(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
147 NULL);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
148 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
149
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
150 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
151 ss_save_continue(GObject *object, GAsyncResult *result, gpointer data)
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 InfoStorage *storage = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
154 PurpleKeyringSaveCallback cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
155 GError *error = NULL;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
156 PurpleAccount *account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
157
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
158 account = storage->account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
159 cb = storage->cb;
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 secret_password_store_finish(result, &error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
162
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
163 if (error != NULL) {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
164 int code = error->code;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
165
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
166 switch (code) {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
167 case G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND:
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
168 case G_DBUS_ERROR_IO_ERROR:
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
169 purple_debug_info("keyring-libsecret",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
170 "Failed to communicate with Secret Service (account : %s (%s)).\n",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
171 purple_account_get_username(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
172 purple_account_get_protocol_id(account));
34129
52b91b4b8314 Proper error handling when doing a password migration, fixes reverting it.
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34116
diff changeset
173 error = g_error_new(PURPLE_KEYRING_ERROR,
34154
857c361d3791 Refine keyring error coded
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34144
diff changeset
174 PURPLE_KEYRING_ERROR_BACKENDFAIL,
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
175 "Failed to communicate with Secret Service (account : %s).",
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 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
178 cb(account, error, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
179 g_error_free(error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
180 break;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
181
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
182 default:
34144
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
183 purple_debug_error("keyring-libsecret",
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
184 "Unknown error (account: %s (%s), domain: %s, code: %d): %s.\n",
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
185 purple_account_get_username(account),
34144
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
186 purple_account_get_protocol_id(account),
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
187 g_quark_to_string(error->domain), code, error->message);
34129
52b91b4b8314 Proper error handling when doing a password migration, fixes reverting it.
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34116
diff changeset
188 error = g_error_new(PURPLE_KEYRING_ERROR,
34154
857c361d3791 Refine keyring error coded
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34144
diff changeset
189 PURPLE_KEYRING_ERROR_BACKENDFAIL,
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
190 "Unknown error (account : %s).",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
191 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
192 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
193 cb(account, error, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
194 g_error_free(error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
195 break;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
196 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
197
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
198 } else {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
199 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
200 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
201
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
202 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
203 cb(account, NULL, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
204 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
205
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
206 g_free(storage);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
207 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
208
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
209 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
210 ss_save(PurpleAccount *account,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
211 const gchar *password,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
212 PurpleKeyringSaveCallback cb,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
213 gpointer data)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
214 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
215 InfoStorage *storage = g_new0(InfoStorage, 1);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
216
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
217 storage->account = account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
218 storage->cb = cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
219 storage->user_data = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
220
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
221 if (password != NULL && *password != '\0') {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
222 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
223 char *label;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
224
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
225 purple_debug_info("keyring-libsecret",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
226 "Updating password for account %s (%s).\n",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
227 username, purple_account_get_protocol_id(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
228
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
229 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
230 secret_password_store(&purple_schema, SECRET_COLLECTION_DEFAULT,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
231 label, password,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
232 NULL, ss_save_continue, storage,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
233 "user", username,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
234 "protocol", purple_account_get_protocol_id(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
235 NULL);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
236 g_free(label);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
237
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
238 } else { /* password == NULL, delete password. */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
239 purple_debug_info("keyring-libsecret",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
240 "Forgetting password for account %s (%s).\n",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
241 purple_account_get_username(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
242 purple_account_get_protocol_id(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
243
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
244 secret_password_clear(&purple_schema, NULL, ss_save_continue, storage,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
245 "user", purple_account_get_username(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
246 "protocol", purple_account_get_protocol_id(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
247 NULL);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
248 }
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 static void
34155
567c48f9658c Refactor the keyring API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34154
diff changeset
252 ss_close(void)
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
253 {
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
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
256 static gboolean
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
257 ss_init(GError **error)
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
258 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
259 keyring_handler = purple_keyring_new();
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
260
34281
ad957d0a467a Keyring (and some GTK): fix translation callbacks
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34199
diff changeset
261 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
262 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
263 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
264 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
265 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
266
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
267 purple_keyring_register(keyring_handler);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
268
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
269 return TRUE;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
270 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
271
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
272 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
273 ss_uninit(void)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
274 {
34155
567c48f9658c Refactor the keyring API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34154
diff changeset
275 ss_close();
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
276 purple_keyring_unregister(keyring_handler);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
277 purple_keyring_free(keyring_handler);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
278 keyring_handler = NULL;
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
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
281 /***********************************************/
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
282 /* Plugin interface */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
283 /***********************************************/
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
284
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
285 static PurplePluginInfo *
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
286 plugin_query(GError **error)
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
287 {
36642
b8ba53daa445 Updated libpurple to use current GPlugin
Ankit Vani <a@nevitus.org>
parents: 36505
diff changeset
288 const gchar * const authors[] = {
b8ba53daa445 Updated libpurple to use current GPlugin
Ankit Vani <a@nevitus.org>
parents: 36505
diff changeset
289 "Elliott Sales de Andrade (qulogic[at]pidgin.im)",
b8ba53daa445 Updated libpurple to use current GPlugin
Ankit Vani <a@nevitus.org>
parents: 36505
diff changeset
290 NULL
b8ba53daa445 Updated libpurple to use current GPlugin
Ankit Vani <a@nevitus.org>
parents: 36505
diff changeset
291 };
b8ba53daa445 Updated libpurple to use current GPlugin
Ankit Vani <a@nevitus.org>
parents: 36505
diff changeset
292
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
293 return purple_plugin_info_new(
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
294 "id", SECRETSERVICE_ID,
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
295 "name", SECRETSERVICE_NAME,
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
296 "version", DISPLAY_VERSION,
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
297 "category", N_("Keyring"),
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
298 "summary", "Secret Service Plugin",
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
299 "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
300 "authors", authors,
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
301 "website", PURPLE_WEBSITE,
36505
60c161851325 Integrated purple ABI requirement into GPlugin's "abi-version" property
Ankit Vani <a@nevitus.org>
parents: 36502
diff changeset
302 "abi-version", PURPLE_ABI_VERSION,
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
303 "flags", GPLUGIN_PLUGIN_INFO_FLAGS_INTERNAL,
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
304 NULL
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
305 );
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
306 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
307
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
308 static gboolean
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
309 plugin_load(PurplePlugin *plugin, GError **error)
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
310 {
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
311 return ss_init(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
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
314 static gboolean
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
315 plugin_unload(PurplePlugin *plugin, GError **error)
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
316 {
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
317 if (purple_keyring_get_inuse() == keyring_handler) {
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
318 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
319 "in use.");
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
320 return FALSE;
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
321 }
34107
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 ss_uninit();
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
324
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
325 return TRUE;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
326 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
327
36502
dfce617913fe Refactored keyrings to use the new API
Ankit Vani <a@nevitus.org>
parents: 36459
diff changeset
328 PURPLE_PLUGIN_INIT(gnome_keyring, plugin_query, plugin_load, plugin_unload);
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
329

mercurial