package com.thingtrack.konekti.view.web.workbench; import java.util.Date; import java.util.List; import org.vaadin.addon.formbinder.ViewBoundForm; import com.thingtrack.konekti.domain.Application; import com.thingtrack.konekti.domain.User; import com.thingtrack.konekti.service.api.UserService; import com.thingtrack.konekti.service.security.SecurityService; import com.thingtrack.konekti.view.addon.ui.AbstractView; import com.thingtrack.konekti.view.addon.ui.SliderView; import com.thingtrack.konekti.view.kernel.ui.layout.IPanelView; import com.thingtrack.konekti.view.kernel.ui.layout.IToolbar; import com.thingtrack.konekti.view.security.LoginViewForm; import com.vaadin.data.util.BeanItem; import com.vaadin.event.ShortcutAction.KeyCode; import com.vaadin.terminal.UserError; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; @SuppressWarnings("serial") public class SecurityAccessView extends AbstractView { private SecurityService securityService; private UserService userService; private SliderView sliderView; private ViewBoundForm viewBoundForm; private Window loginWindow; private LoginViewForm loginViewForm; private VerticalLayout mainLayout; private User grantedUser; private Button loginBtn; private VerticalLayout content; private String version; private String logo; private boolean demo; private static final String DEMO_USERNAME = "demo"; private static final String DEMO_PASSWORD = "demo"; private static final String APP_NAME = "konekti.view.web.workbench"; public User getGrantedUser() { return grantedUser; } public SecurityAccessView(SecurityService securityService, UserService userService, SliderView sliderView, String version, String logo, boolean demo) { this.securityService = securityService; this.userService = userService; this.sliderView = sliderView; this.version = version; this.logo = logo; this.demo = demo; mainLayout = new VerticalLayout(); setCompositionRoot(mainLayout); } @Override public void attach() { super.attach(); loginWindow = new Window(); // create view bound form VerticalLayout content = buildMainLayout(); content.setMargin(false); loginWindow.setContent(content); loginWindow.center(); loginWindow.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.workbench.SecurityAccessView.loginWindow.caption")); loginWindow.setModal(true); loginWindow.setResizable(false); loginWindow.setClosable(false); User loginUser = new User(); BeanItem<User> userBean = new BeanItem<User>(loginUser); viewBoundForm.setItemDataSource(userBean); getWindow().addWindow(loginWindow); } private VerticalLayout buildMainLayout() { // common part: create layout VerticalLayout mainLayout = new VerticalLayout(); mainLayout.setImmediate(false); mainLayout.setSizeUndefined(); mainLayout.setMargin(false); viewBoundForm = buildLoginLayout(); mainLayout.addComponent(viewBoundForm); mainLayout.setExpandRatio(viewBoundForm, 1.0f); return mainLayout; } private ViewBoundForm buildLoginLayout() { viewBoundForm = new ViewBoundForm(); viewBoundForm.setImmediate(false); viewBoundForm.setWidth("100%"); viewBoundForm.setHeight("100%"); viewBoundForm.setWriteThrough(false); viewBoundForm.setInvalidCommitted(false); loginViewForm = new LoginViewForm(version, logo, demo); viewBoundForm.setContent(loginViewForm); viewBoundForm.getFooter().addComponent(buildFooterWindow()); viewBoundForm.getFooter().addStyleName("windowdialog-footer"); return viewBoundForm; } private HorizontalLayout buildFooterWindow() { HorizontalLayout footerWindow = new HorizontalLayout(); footerWindow.setImmediate(false); footerWindow.setWidth(loginViewForm.getWidth(), UNITS_PIXELS); footerWindow.setHeight("-1px"); footerWindow.setMargin(true); footerWindow.setSpacing(true); loginBtn = new Button("Entrar", this, "loginBtn_Click"); loginBtn.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.workbench.SecurityAccessView.loginBtn.caption")); loginBtn.setImmediate(true); loginBtn.setWidth("-1px"); loginBtn.setHeight("-1px"); loginBtn.setClickShortcut(KeyCode.ENTER); loginBtn.addStyleName("primary"); footerWindow.addComponent(loginBtn); footerWindow.setComponentAlignment(loginBtn, new Alignment(34)); return footerWindow; } /** * Login result button */ public void loginBtn_Click(Button.ClickEvent event) { String userName ; String password; try{ viewBoundForm.commit(); BeanItem<User> userBean = (BeanItem<User>) viewBoundForm.getItemDataSource(); if (demo) { userName = DEMO_USERNAME; password = DEMO_PASSWORD; } else { userName = userBean.getBean().getUsername(); password = userBean.getBean().getPassword(); } // get garnted user grantedUser = securityService.authenticate(userName, password); // get Konekti user and check if is active User user = userService.getByUsername(grantedUser.getUsername()); if (!user.isActive()) { viewBoundForm.setComponentError(new UserError(getI18N().getMessage("com.thingtrack.konekti.view.security.LoginViewForm.warning.isActive"))); return; } // check if the user have access to this application if (!access(user)) { viewBoundForm.setComponentError(new UserError(getI18N().getMessage("com.thingtrack.konekti.view.security.LoginViewForm.warning.notAccess"))); return; } // check if the user have expiration user account if (!expiration(user)) { viewBoundForm.setComponentError(new UserError(getI18N().getMessage("com.thingtrack.konekti.view.security.LoginViewForm.warning.expirationDate"))); return; } getWindow().removeWindow(loginWindow); sliderView.rollNext(); } catch(Exception e){ viewBoundForm.setComponentError(new UserError(getI18N().getMessage("com.thingtrack.konekti.view.security.LoginViewForm.warning.errorCredentials"))); } } private boolean access(User user) { for (Application app : user.getApplications()) { if (app.getName().equals(APP_NAME)) return true; } return false; } private boolean expiration(User user) { if (user.getExpirationDate() != null && user.getExpirationDate().compareTo(new Date()) < 0) return false; return true; } @Override public void addPanelView(IPanelView arg0) { // TODO Auto-generated method stub } @Override public void addToolbar(IToolbar arg0) { // TODO Auto-generated method stub } @Override public List<IPanelView> getPanelView() { // TODO Auto-generated method stub return null; } @Override public List<IToolbar> getToolbars() { // TODO Auto-generated method stub return null; } @Override public void removeAllPanelView() { // TODO Auto-generated method stub } @Override public void removeAllToolbar() { // TODO Auto-generated method stub } @Override public void removePanelView(IPanelView arg0) { // TODO Auto-generated method stub } @Override public void removeToolbar(IToolbar arg0) { // TODO Auto-generated method stub } @Override protected void updateLabels() { } }