finch/gntcertmgr.c

Sat, 25 Nov 2017 21:42:28 +0800

author
Tom Li <tomli@tomli.me>
date
Sat, 25 Nov 2017 21:42:28 +0800
branch
release-2.x.y
changeset 38792
fdb68b9b02b8
parent 31294
73607ab89c6f
child 34329
ddbc1337332c
permissions
-rw-r--r--

jabber.c: fix #17270, ignore STARTTLS when using BOSH.

Pidgin wants to establish a TLS connection with a STARTTLS request, but
it doesn't make any sense, since the XMPP stream is proxied by the BOSH
connection, which is already encrypted by HTTPS. It is impossible to
STARTTLS with BOSH.

According to XEP-0206: The client SHOULD ignore any Transport Layer Security
(TLS) feature since BOSH channel encryption SHOULD be negotiated at the HTTP
layer.

Failing to do it causes Pidgin fails to create any connection with BOSH to any
XMPP server with STARTTLS enabled.

https://developer.pidgin.im/ticket/17270

19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1 /**
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
2 * @file gntcertmgr.c GNT Certificate Manager API
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
3 * @ingroup finch
20147
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
4 */
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
5
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
6 /* finch
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
7 *
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
8 * Finch is the legal property of its developers, whose names are too numerous
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
9 * to list here. Please refer to the COPYRIGHT file distributed with this
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
10 * source distribution.
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
11 *
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
12 * This program is free software; you can redistribute it and/or modify
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
13 * it under the terms of the GNU General Public License as published by
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
15 * (at your option) any later version.
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
16 *
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
17 * This program is distributed in the hope that it will be useful,
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
20 * GNU General Public License for more details.
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
21 *
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
23 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19691
diff changeset
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
25 *
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
26 */
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
27
29106
51c7b2177e42 Fix all the remaining files for which internal.h doesn't end up being the first include.
Paul Aurich <darkrain42@pidgin.im>
parents: 27829
diff changeset
28 #include <internal.h>
22340
5a20c8e2a79e Include finch.h from these files, instead of internal.h.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22269
diff changeset
29 #include "finch.h"
19691
1b2dab4c0f32 Fix building on older glib versions.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19687
diff changeset
30
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
31 #include "certificate.h"
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
32 #include "debug.h"
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
33 #include "notify.h"
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
34 #include "request.h"
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
35
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
36 #include "gntcertmgr.h"
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
37
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
38 #include "gntbutton.h"
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
39 #include "gntlabel.h"
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
40 #include "gnttree.h"
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
41 #include "gntutils.h"
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
42 #include "gntwindow.h"
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
43
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
44 struct {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
45 GntWidget *window;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
46 GntWidget *tree;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
47 PurpleCertificatePool *pool;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
48 } certmgr;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
49
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
50 /* Pretty much Xerox of gtkcertmgr */
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
51
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
52 /* Add certificate */
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
53 static void
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
54 tls_peers_mgmt_import_ok2_cb(gpointer data, const char *result)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
55 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
56 PurpleCertificate *crt = (PurpleCertificate *) data;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
57 const char *id = result;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
58
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
59 /* TODO: Perhaps prompt if you're overwriting a cert? */
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
60
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
61 purple_certificate_pool_store(purple_certificate_find_pool("x509", "tls_peers"), id, crt);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
62 purple_certificate_destroy(crt);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
63 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
64
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
65 static void
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
66 tls_peers_mgmt_import_cancel2_cb(gpointer data, const char *result)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
67 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
68 PurpleCertificate *crt = (PurpleCertificate *) data;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
69 purple_certificate_destroy(crt);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
70 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
71
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
72 static void
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
73 tls_peers_mgmt_import_ok_cb(gpointer data, const char *filename)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
74 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
75 PurpleCertificateScheme *x509;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
76 PurpleCertificate *crt;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
77
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
78 x509 = purple_certificate_pool_get_scheme(purple_certificate_find_pool("x509", "tls_peers"));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
79
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
80 crt = purple_certificate_import(x509, filename);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
81
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
82 if (crt != NULL) {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
83 gchar *default_hostname;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
84 default_hostname = purple_certificate_get_subject_name(crt);
21653
621c47778132 merge of '73ae9aeda3c58fbf8437421da68d19d06f93e686'
Evan Schoenberg <evands@pidgin.im>
parents: 21233
diff changeset
85 purple_request_input(NULL,
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
86 _("Certificate Import"),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
87 _("Specify a hostname"),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
88 _("Type the host name this certificate is for."),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
89 default_hostname, FALSE, FALSE, NULL,
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
90 _("OK"), G_CALLBACK(tls_peers_mgmt_import_ok2_cb),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
91 _("Cancel"), G_CALLBACK(tls_peers_mgmt_import_cancel2_cb),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
92 NULL, NULL, NULL,
21653
621c47778132 merge of '73ae9aeda3c58fbf8437421da68d19d06f93e686'
Evan Schoenberg <evands@pidgin.im>
parents: 21233
diff changeset
93 crt);
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
94 g_free(default_hostname);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
95 } else {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
96 gchar * secondary;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
97 secondary = g_strdup_printf(_("File %s could not be imported.\nMake sure that the file is readable and in PEM format.\n"), filename);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
98 purple_notify_error(NULL,
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
99 _("Certificate Import Error"),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
100 _("X.509 certificate import failed"),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
101 secondary);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
102 g_free(secondary);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
103 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
104 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
105
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
106 static void
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
107 add_cert_cb(GntWidget *button, gpointer null)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
108 {
21653
621c47778132 merge of '73ae9aeda3c58fbf8437421da68d19d06f93e686'
Evan Schoenberg <evands@pidgin.im>
parents: 21233
diff changeset
109 purple_request_file(NULL,
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
110 _("Select a PEM certificate"),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
111 "certificate.pem",
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
112 FALSE,
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
113 G_CALLBACK(tls_peers_mgmt_import_ok_cb),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
114 NULL,
21653
621c47778132 merge of '73ae9aeda3c58fbf8437421da68d19d06f93e686'
Evan Schoenberg <evands@pidgin.im>
parents: 21233
diff changeset
115 NULL, NULL, NULL, NULL );
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
116 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
117
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
118 /* Save certs in some file */
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
119 static void
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
120 tls_peers_mgmt_export_ok_cb(gpointer data, const char *filename)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
121 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
122 PurpleCertificate *crt = (PurpleCertificate *) data;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
123
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
124 if (!purple_certificate_export(filename, crt)) {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
125 gchar * secondary;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
126
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
127 secondary = g_strdup_printf(_("Export to file %s failed.\nCheck that you have write permission to the target path\n"), filename);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
128 purple_notify_error(NULL,
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
129 _("Certificate Export Error"),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
130 _("X.509 certificate export failed"),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
131 secondary);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
132 g_free(secondary);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
133 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
134
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
135 purple_certificate_destroy(crt);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
136 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
137
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
138 static void
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
139 save_cert_cb(GntWidget *button, gpointer null)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
140 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
141 PurpleCertificate *crt;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
142 const char *key;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
143
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
144 if (!certmgr.window)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
145 return;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
146
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
147 key = gnt_tree_get_selection_data(GNT_TREE(certmgr.tree));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
148 if (!key)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
149 return;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
150
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
151 crt = purple_certificate_pool_retrieve(certmgr.pool, key);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
152 if (!crt) {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
153 purple_debug_error("gntcertmgr/tls_peers_mgmt",
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
154 "Id %s was not in the peers cache?!\n", key);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
155 return;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
156 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
157
21653
621c47778132 merge of '73ae9aeda3c58fbf8437421da68d19d06f93e686'
Evan Schoenberg <evands@pidgin.im>
parents: 21233
diff changeset
158 purple_request_file((void*)key,
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
159 _("PEM X.509 Certificate Export"),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
160 "certificate.pem", TRUE,
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
161 G_CALLBACK(tls_peers_mgmt_export_ok_cb),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
162 G_CALLBACK(purple_certificate_destroy),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
163 NULL, NULL, NULL,
21653
621c47778132 merge of '73ae9aeda3c58fbf8437421da68d19d06f93e686'
Evan Schoenberg <evands@pidgin.im>
parents: 21233
diff changeset
164 crt);
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
165 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
166
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
167 /* Show information about a cert */
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
168 static void
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
169 info_cert_cb(GntWidget *button, gpointer null)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
170 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
171 const char *key;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
172 PurpleCertificate *crt;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
173 gchar *subject;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
174 GByteArray *fpr_sha1;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
175 gchar *fpr_sha1_asc;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
176 gchar *primary, *secondary;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
177
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
178 if (!certmgr.window)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
179 return;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
180
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
181 key = gnt_tree_get_selection_data(GNT_TREE(certmgr.tree));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
182 if (!key)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
183 return;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
184
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
185 crt = purple_certificate_pool_retrieve(certmgr.pool, key);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
186 g_return_if_fail(crt);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
187
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
188 primary = g_strdup_printf(_("Certificate for %s"), key);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
189
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
190 fpr_sha1 = purple_certificate_get_fingerprint_sha1(crt);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
191 fpr_sha1_asc = purple_base16_encode_chunked(fpr_sha1->data,
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
192 fpr_sha1->len);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
193 subject = purple_certificate_get_subject_name(crt);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
194
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
195 secondary = g_strdup_printf(_("Common name: %s\n\nSHA1 fingerprint:\n%s"), subject, fpr_sha1_asc);
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 29106
diff changeset
196
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
197 purple_notify_info(NULL,
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
198 _("SSL Host Certificate"), primary, secondary);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
199
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
200 g_free(primary);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
201 g_free(secondary);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
202 g_byte_array_free(fpr_sha1, TRUE);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
203 g_free(fpr_sha1_asc);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
204 g_free(subject);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
205 purple_certificate_destroy(crt);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
206 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
207
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
208 /* Delete a cert */
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
209 static void
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
210 tls_peers_mgmt_delete_confirm_cb(gchar *id, gint dontcare)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
211 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
212 if (!purple_certificate_pool_delete(certmgr.pool, id)) {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
213 purple_debug_warning("gntcertmgr/tls_peers_mgmt",
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
214 "Deletion failed on id %s\n", id);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
215 };
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
216
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
217 g_free(id);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
218 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
219
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
220 static void
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
221 delete_cert_cb(GntWidget *button, gpointer null)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
222 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
223 gchar *primary;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
224 const char *key;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
225
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
226 if (!certmgr.window)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
227 return;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
228
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
229 key = gnt_tree_get_selection_data(GNT_TREE(certmgr.tree));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
230 if (!key)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
231 return;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
232
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
233 primary = g_strdup_printf(_("Really delete certificate for %s?"), key);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
234
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
235 purple_request_close_with_handle((void *)key);
21653
621c47778132 merge of '73ae9aeda3c58fbf8437421da68d19d06f93e686'
Evan Schoenberg <evands@pidgin.im>
parents: 21233
diff changeset
236 purple_request_yes_no((void *)key, _("Confirm certificate delete"),
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
237 primary, NULL,
22385
d14ac3ae2007 The Gnome Human Interface Guidelines say, "if pressing this button by
Mark Doliner <markdoliner@pidgin.im>
parents: 22340
diff changeset
238 0,
21653
621c47778132 merge of '73ae9aeda3c58fbf8437421da68d19d06f93e686'
Evan Schoenberg <evands@pidgin.im>
parents: 21233
diff changeset
239 NULL, NULL, NULL,
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
240 g_strdup(key),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
241 tls_peers_mgmt_delete_confirm_cb,
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
242 g_free);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
243
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
244 g_free(primary);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
245 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
246
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
247 /* populate the list */
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
248 static void
22104
56970903b8e9 Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents: 21653
diff changeset
249 populate_cert_list(void)
19687
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
250 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
251 GList *idlist, *l;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
252
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
253 if (!certmgr.window)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
254 return;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
255
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
256 gnt_tree_remove_all(GNT_TREE(certmgr.tree));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
257
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
258 idlist = purple_certificate_pool_get_idlist(purple_certificate_find_pool("x509", "tls_peers"));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
259 for (l = idlist; l; l = l->next) {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
260 gnt_tree_add_row_last(GNT_TREE(certmgr.tree), g_strdup(l->data),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
261 gnt_tree_create_row(GNT_TREE(certmgr.tree), l->data), NULL);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
262 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
263 purple_certificate_pool_destroy_idlist(idlist);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
264 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
265
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
266 static void
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
267 cert_list_added(PurpleCertificatePool *pool, const char *id, gpointer null)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
268 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
269 g_return_if_fail(certmgr.window);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
270 gnt_tree_add_row_last(GNT_TREE(certmgr.tree), g_strdup(id),
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
271 gnt_tree_create_row(GNT_TREE(certmgr.tree), id), NULL);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
272 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
273
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
274 static void
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
275 cert_list_removed(PurpleCertificatePool *pool, const char *id, gpointer null)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
276 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
277 g_return_if_fail(certmgr.window);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
278 purple_request_close_with_handle((void*)id);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
279 gnt_tree_remove(GNT_TREE(certmgr.tree), (void*)id);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
280 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
281
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
282 void finch_certmgr_show(void)
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
283 {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
284 GntWidget *win, *tree, *box, *button;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
285 PurpleCertificatePool *pool;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
286
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
287 if (certmgr.window) {
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
288 gnt_window_present(certmgr.window);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
289 return;
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
290 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
291
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
292 certmgr.window = win = gnt_vwindow_new(FALSE);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
293 gnt_box_set_title(GNT_BOX(win), _("Certificate Manager"));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
294 gnt_box_set_pad(GNT_BOX(win), 0);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
295
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
296 certmgr.tree = tree = gnt_tree_new();
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
297 gnt_tree_set_hash_fns(GNT_TREE(tree), g_str_hash, g_str_equal, g_free);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
298 gnt_tree_set_column_title(GNT_TREE(tree), 0, _("Hostname"));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
299 gnt_tree_set_show_title(GNT_TREE(tree), TRUE);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
300
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
301 gnt_box_add_widget(GNT_BOX(win), tree);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
302
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
303 box = gnt_hbox_new(FALSE);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
304 gnt_box_add_widget(GNT_BOX(win), box);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
305
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
306 button = gnt_button_new(_("Add"));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
307 gnt_box_add_widget(GNT_BOX(box), button);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
308 g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(add_cert_cb), NULL);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
309 gnt_util_set_trigger_widget(GNT_WIDGET(tree), GNT_KEY_INS, button);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
310
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
311 button = gnt_button_new(_("Save"));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
312 gnt_box_add_widget(GNT_BOX(box), button);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
313 g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(save_cert_cb), NULL);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
314
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
315 button = gnt_button_new(_("Info"));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
316 gnt_box_add_widget(GNT_BOX(box), button);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
317 g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(info_cert_cb), NULL);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
318
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
319 button = gnt_button_new(_("Delete"));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
320 gnt_box_add_widget(GNT_BOX(box), button);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
321 g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(delete_cert_cb), NULL);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
322 gnt_util_set_trigger_widget(GNT_WIDGET(tree), GNT_KEY_DEL, button);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
323
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
324 button = gnt_button_new(_("Close"));
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
325 gnt_box_add_widget(GNT_BOX(box), button);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
326 g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(gnt_widget_destroy), win);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
327
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
328 g_signal_connect_swapped(G_OBJECT(win), "destroy", G_CALLBACK(g_nullify_pointer), &certmgr.window);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
329
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
330 populate_cert_list();
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
331
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
332 pool = certmgr.pool = purple_certificate_find_pool("x509", "tls_peers");
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
333 purple_signal_connect(pool, "certificate-stored",
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
334 win, PURPLE_CALLBACK(cert_list_added), NULL);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
335 purple_signal_connect(pool, "certificate-deleted",
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
336 win, PURPLE_CALLBACK(cert_list_removed), NULL);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
337 g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(purple_signals_disconnect_by_handle), NULL);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
338
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
339 gnt_widget_show(certmgr.window);
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
340 }
13159f49d3a8 Add certificate UI in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
341

mercurial