/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gses.webui; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Panel; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.Reindeer; import org.apache.commons.lang.StringUtils; import ru.codeinside.gses.webui.components.Logout; import ru.codeinside.gses.webui.components.sign.SignApplet; import ru.codeinside.gses.webui.components.sign.SignAppletListener; import java.security.cert.X509Certificate; final public class CertificateSelection extends CustomComponent { final CertificateListener certificateListener; final Label appletHint; public CertificateSelection(String userLogin, CertificateListener certificateListener) { this.certificateListener = certificateListener; String userName = StringUtils.trimToNull(Flash.flash().getAdminService().findEmployeeByLogin(userLogin).getFio()); if (userName == null) { userName = userLogin; } Label header = new Label("Выбор сертификата"); header.setStyleName(Reindeer.LABEL_H1); Label hint = new Label( "<b>" + userName + "</b>, для продолжения работы в Системе исполнения услуг " + "Вам необходимо выбрать сертификат, который в дальнейшем будет использоваться для " + "<a target='_blank' href='http://ru.wikipedia.org/wiki/" + "%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C'" + ">электронной подписи</a></i> предоставляемых Вами данных.", Label.CONTENT_XHTML); SignApplet applet = new SignApplet(new Protocol()); applet.setName("Выбор сертификата"); applet.setCaption(null); applet.setBindingMode(); appletHint = new Label( "Требуется поддержка <b>Java</b> в " + Flash.getActor().getBrowser() + " и наличие <b>КриптоПРО JCP</b>.<br/> " + "Справки по получению сертификата и установке программного обеспечения " + "можно получить в <a target='_blank' href='http://ca.oep-penza.ru/'" + ">Удостоверяющем центре ОАО Оператор Электронного Правительства</a>.", Label.CONTENT_XHTML); Button logout = new Button("Выход (выбрать сертификат в другой раз)", new Logout()); logout.setStyleName(Reindeer.BUTTON_SMALL); HorizontalLayout buttons = new HorizontalLayout(); buttons.setSpacing(true); buttons.setMargin(true); buttons.addComponent(logout); VerticalLayout flow = new VerticalLayout(); flow.setSizeUndefined(); flow.setMargin(true); flow.setSpacing(true); flow.addComponent(header); flow.addComponent(hint); flow.addComponent(applet); flow.addComponent(appletHint); flow.addComponent(buttons); Panel panel = new Panel(); panel.setSizeUndefined(); panel.setContent(flow); VerticalLayout center = new VerticalLayout(); center.addComponent(panel); center.setExpandRatio(panel, 1f); center.setComponentAlignment(panel, Alignment.MIDDLE_CENTER); center.setSizeFull(); setCompositionRoot(center); setSizeFull(); } final class Protocol implements SignAppletListener { @Override public void onLoading(SignApplet signApplet) { appletHint.setStyleName(Reindeer.LABEL_SMALL); } @Override public void onNoJcp(SignApplet signApplet) { appletHint.setStyleName(Reindeer.LABEL_H2); } @Override public void onCert(SignApplet signApplet, X509Certificate certificate) { signApplet.close(); certificateListener.onCertificate(certificate); } @Override public void onBlockAck(SignApplet signApplet, int i) { } @Override public void onChunkAck(SignApplet signApplet, int i) { } @Override public void onSign(SignApplet signApplet, byte[] sign) { } } }