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