1
2 #include "gcr-shooter.h"
3 #include "gcr.h"
4
5 static gpointer
load_gcr_test_file(const gchar * name,gsize * length)6 load_gcr_test_file (const gchar *name, gsize *length)
7 {
8 GError *error = NULL;
9 gchar *contents;
10 gchar *filename;
11
12 filename = g_build_filename (TOPDIR, "gcr", "tests", "files", name, NULL);
13 if (!g_file_get_contents (filename, &contents, length, &error))
14 g_error ("couldn't read file: %s: %s", filename, error->message);
15 g_free (filename);
16 return contents;
17 }
18
19 static GcrShooterInfo *
create_certificate_widget(const gchar * name)20 create_certificate_widget (const gchar *name)
21 {
22 GcrCertificate *certificate;
23 GtkWidget *widget;
24 GtkWidget *align;
25 gchar *contents;
26 gsize length;
27
28 contents = load_gcr_test_file ("cacert.org.cer", &length);
29 certificate = gcr_simple_certificate_new (contents, length);
30 g_free (contents);
31
32 widget = GTK_WIDGET (gcr_certificate_widget_new (certificate));
33 g_object_unref (certificate);
34
35 align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
36 gtk_container_add (GTK_CONTAINER (align), widget);
37
38 return gcr_shooter_info_new (name, align, GCR_SHOOTER_LARGE);
39 }
40
41 static void
on_parser_key_parsed(GcrParser * parser,gpointer unused)42 on_parser_key_parsed (GcrParser *parser, gpointer unused)
43 {
44 GckAttributes **attrs = unused;
45 *attrs = gck_attributes_ref (gcr_parser_get_parsed_attributes (parser));
46 }
47
48 static GcrShooterInfo *
create_key_widget(const gchar * name)49 create_key_widget (const gchar *name)
50 {
51 GError *error = NULL;
52 GckAttributes *attrs = NULL;
53 GtkWidget *widget;
54 GtkWidget *align;
55 GcrParser *parser;
56 gchar *contents;
57 gsize length;
58
59 contents = load_gcr_test_file ("der-dsa-1024.key", &length);
60 parser = gcr_parser_new ();
61 g_signal_connect (parser, "parsed", G_CALLBACK (on_parser_key_parsed), &attrs);
62 if (!gcr_parser_parse_data (parser, contents, length, &error))
63 g_error ("couldn't parse data: %s", error->message);
64 g_object_unref (parser);
65 g_free (contents);
66
67 g_assert (attrs);
68 widget = GTK_WIDGET (gcr_key_widget_new (attrs));
69 gck_attributes_unref (attrs);
70
71 align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
72 gtk_container_add (GTK_CONTAINER (align), widget);
73
74 return gcr_shooter_info_new (name, align, GCR_SHOOTER_LARGE);
75 }
76
77 static GcrShooterInfo *
create_combo_selector(const gchar * name)78 create_combo_selector (const gchar *name)
79 {
80 GcrComboSelector *selector;
81 GcrCertificate *certificate;
82 GcrCollection *collection;
83 GtkWidget *align;
84 gchar *contents;
85 gsize length;
86
87 contents = load_gcr_test_file ("cacert.org.cer", &length);
88 certificate = gcr_simple_certificate_new (contents, length);
89 g_free (contents);
90
91 collection = gcr_simple_collection_new ();
92 gcr_simple_collection_add (GCR_SIMPLE_COLLECTION (collection), G_OBJECT (certificate));
93
94 selector = gcr_combo_selector_new (collection);
95 g_object_unref (collection);
96
97 gcr_combo_selector_set_selected (selector, G_OBJECT (certificate));
98 g_object_unref (certificate);
99
100 align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
101 gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (selector));
102
103 return gcr_shooter_info_new (name, align, GCR_SHOOTER_MEDIUM);
104 }
105
106 static GcrShooterInfo *
create_tree_selector(const gchar * name)107 create_tree_selector (const gchar *name)
108 {
109 GcrTreeSelector *selector;
110 GcrCertificate *certificate;
111 GcrCollection *collection;
112 GtkWidget *align;
113 gchar *contents;
114 gsize length;
115 GList *selected = NULL;
116
117 collection = gcr_simple_collection_new ();
118 selector = gcr_tree_selector_new (collection, GCR_CERTIFICATE_COLUMNS);
119
120 contents = load_gcr_test_file ("cacert.org.cer", &length);
121 certificate = gcr_simple_certificate_new (contents, length);
122 g_free (contents);
123 gcr_simple_collection_add (GCR_SIMPLE_COLLECTION (collection), G_OBJECT (certificate));
124 selected = g_list_append (selected, certificate);
125 gcr_tree_selector_set_selected (selector, selected);
126 g_list_free (selected);
127 g_object_unref (certificate);
128
129 contents = load_gcr_test_file ("der-certificate-dsa.cer", &length);
130 certificate = gcr_simple_certificate_new (contents, length);
131 g_free (contents);
132 gcr_simple_collection_add (GCR_SIMPLE_COLLECTION (collection), G_OBJECT (certificate));
133 g_object_unref (certificate);
134
135 g_object_unref (collection);
136
137 align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
138 gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (selector));
139
140 return gcr_shooter_info_new (name, align, GCR_SHOOTER_MEDIUM);
141 }
142
143 static GcrShooterInfo *
create_list_selector(const gchar * name)144 create_list_selector (const gchar *name)
145 {
146 GcrListSelector *selector;
147 GcrCertificate *certificate;
148 GcrCollection *collection;
149 GtkWidget *align;
150 gchar *contents;
151 gsize length;
152 GList *selected = NULL;
153
154 collection = gcr_simple_collection_new ();
155 selector = gcr_list_selector_new (collection);
156
157 contents = load_gcr_test_file ("cacert.org.cer", &length);
158 certificate = gcr_simple_certificate_new (contents, length);
159 g_free (contents);
160 gcr_simple_collection_add (GCR_SIMPLE_COLLECTION (collection), G_OBJECT (certificate));
161 selected = g_list_append (selected, certificate);
162 gcr_list_selector_set_selected (selector, selected);
163 g_list_free (selected);
164 g_object_unref (certificate);
165
166 contents = load_gcr_test_file ("der-certificate-dsa.cer", &length);
167 certificate = gcr_simple_certificate_new (contents, length);
168 g_free (contents);
169 gcr_simple_collection_add (GCR_SIMPLE_COLLECTION (collection), G_OBJECT (certificate));
170 g_object_unref (certificate);
171
172 g_object_unref (collection);
173
174 align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
175 gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (selector));
176
177 return gcr_shooter_info_new (name, align, GCR_SHOOTER_MEDIUM);
178 }
179
180 static GcrShooterInfo *
create_import_button(const gchar * name)181 create_import_button (const gchar *name)
182 {
183 GcrImportButton *import;
184 GtkWidget *align;
185
186 import = gcr_import_button_new ("Import");
187
188 align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
189 gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (import));
190
191 return gcr_shooter_info_new (name, align, GCR_SHOOTER_MEDIUM);
192 }
193
194 static GcrShooterInfo *
create_viewer_widget(const gchar * name)195 create_viewer_widget (const gchar *name)
196 {
197 GcrViewerWidget *viewer;
198 GtkWidget *align;
199 gchar *contents;
200 gsize length;
201
202 contents = load_gcr_test_file ("email.p12", &length);
203 viewer = gcr_viewer_widget_new ();
204 gcr_viewer_widget_load_data (viewer, "Email certificate", (gpointer)contents, length);
205 g_free (contents);
206
207 align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
208 gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (viewer));
209
210 return gcr_shooter_info_new (name, align, GCR_SHOOTER_LARGE);
211 }
212
213 GcrShooterInfo*
gcr_widgets_create(const gchar * name)214 gcr_widgets_create (const gchar *name)
215 {
216 g_assert (name);
217
218 if (g_str_equal (name, "certificate-widget"))
219 return create_certificate_widget (name);
220 else if (g_str_equal (name, "combo-selector"))
221 return create_combo_selector (name);
222 else if (g_str_equal (name, "import-button"))
223 return create_import_button (name);
224 else if (g_str_equal (name, "key-widget"))
225 return create_key_widget (name);
226 else if (g_str_equal (name, "list-selector"))
227 return create_list_selector (name);
228 else if (g_str_equal (name, "tree-selector"))
229 return create_tree_selector (name);
230 else if (g_str_equal (name, "viewer-widget"))
231 return create_viewer_widget (name);
232 else
233 g_assert_not_reached ();
234
235 return NULL;
236 }
237