/* * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a * aplicativos mainframe. Registro no INPI sob o nome G3270. * * Copyright (C) <2008> * * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela * Free Software Foundation. * * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para * obter mais detalhes. * * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin * St, Fifth Floor, Boston, MA 02110-1301 USA * * Este programa está nomeado como - e possui - linhas de código. * * Contatos: * * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) * */ #include #define ENABLE_NLS #include #include #include #include #include #include #include /*--[ Implement ]------------------------------------------------------------------------------------*/ static GtkWidget * label_new(const char *text) { GtkLabel *widget = GTK_LABEL(gtk_label_new("")); gtk_label_set_markup(widget,text); #if GTK_CHECK_VERSION(3,16,0) gtk_label_set_xalign(widget,0); #else gtk_misc_set_alignment(GTK_MISC(widget),0,0.5); #endif // GTK_CHECK_VERSION return GTK_WIDGET(widget); } static GtkWidget * text_view_new(const char *contents) { GtkWidget * container = gtk_scrolled_window_new(NULL,NULL); GtkWidget * view = gtk_text_view_new(); gtk_container_set_border_width(GTK_CONTAINER(container),5); gtk_container_set_border_width(GTK_CONTAINER(view),5); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(container),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE); GtkTextIter itr; GtkTextBuffer * text = GTK_TEXT_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(view))); gtk_text_buffer_get_end_iter(text,&itr); gtk_text_buffer_insert(text,&itr,contents,strlen(contents)); gtk_container_add(GTK_CONTAINER(container),view); gtk_text_view_set_monospace(GTK_TEXT_VIEW(view),TRUE); return container; } LIB3270_EXPORT GtkWidget * v3270_security_dialog_new(GtkWidget *widget) { GtkGrid * grid = GTK_GRID(gtk_grid_new()); #ifdef G_OS_UNIX gtk_container_set_border_width(GTK_CONTAINER(grid),10); #endif // UNIX gtk_grid_set_row_spacing(grid,5); gtk_grid_set_column_spacing(grid,5); H3270 *hSession = NULL; if(GTK_IS_V3270(widget)) hSession = v3270_get_session(widget); if(hSession) { gtk_grid_attach( grid, gtk_image_new_from_icon_name(lib3270_get_ssl_state_icon_name(hSession),GTK_ICON_SIZE_DIALOG), 0,0, 2,2 ); g_autofree gchar * message = g_strdup_printf("%s",lib3270_get_ssl_state_message(hSession)); gtk_grid_attach( grid, label_new(message), 3,0, 6,1 ); gtk_grid_attach( grid, label_new(lib3270_get_ssl_state_description(hSession)), 3,1, 6,1 ); lib3270_autoptr(char) crl = lib3270_get_ssl_crl_text(hSession); lib3270_autoptr(char) peer = lib3270_get_ssl_peer_certificate_text(hSession); if(!peer) peer = g_strdup(""); if(crl) { GtkWidget * frame = gtk_notebook_new(); gtk_widget_set_hexpand(GTK_WIDGET(frame),TRUE); gtk_widget_set_vexpand(GTK_WIDGET(frame),TRUE); gtk_notebook_append_page( GTK_NOTEBOOK(frame), text_view_new(peer), gtk_label_new(_("Peer certificate")) ); gtk_notebook_append_page( GTK_NOTEBOOK(frame), text_view_new(crl), gtk_label_new(_("Revocation list")) ); gtk_grid_attach( grid, frame, 3,2, 6,6 ); } else { GtkWidget * frame = gtk_frame_new(_("Peer certificate")); gtk_container_add(GTK_CONTAINER(frame),text_view_new(peer)); gtk_widget_set_hexpand(GTK_WIDGET(frame),TRUE); gtk_widget_set_vexpand(GTK_WIDGET(frame),TRUE); gtk_grid_attach( grid, frame, 3,2, 6,6 ); } } else { gtk_grid_attach( grid, gtk_image_new_from_icon_name("dialog-error",GTK_ICON_SIZE_DIALOG), 0,0, 2,2 ); gtk_grid_attach( grid, label_new(_("Invalid state")), 3,0, 6,1 ); gtk_grid_attach( grid, label_new(_("There's no security information in the session")), 3,1, 6,1 ); } return GTK_WIDGET(grid); } LIB3270_EXPORT void v3270_popup_security_dialog(GtkWidget *widget) { /* GtkWidget * dialog = gtk_dialog_new_with_buttons( _("About security"), GTK_WINDOW(gtk_widget_get_toplevel(widget)), GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, _( "_Close" ), GTK_RESPONSE_ACCEPT, NULL ); */ gboolean use_header = FALSE; #if GTK_CHECK_VERSION(3,12,0) GtkWidget * dialog = GTK_WIDGET(g_object_new( GTK_TYPE_DIALOG, "use-header-bar", (v3270_dialog_get_use_header() ? 1 : 0), NULL )); #else GtkWidget * dialog = GTK_WIDGET(g_object_new(GTK_TYPE_DIALOG, NULL)); #endif // GTK 3.12 if(!use_header) { gtk_dialog_add_buttons( GTK_DIALOG(dialog), _("_Close"), GTK_RESPONSE_CANCEL, NULL ); } gtk_window_set_title(GTK_WINDOW(dialog),_("About security")); gtk_window_set_default_size(GTK_WINDOW(dialog), 800, 500); gtk_dialog_set_toplevel(dialog,widget); gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),v3270_security_dialog_new(widget),TRUE,TRUE,2); gtk_widget_show_all(dialog); g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL); g_signal_connect(dialog,"response",G_CALLBACK(gtk_widget_destroy),NULL); }