All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.ui.login.CmsLoginForm Maven / Gradle / Ivy

/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.ui.login;

import org.opencms.db.CmsLoginMessage;
import org.opencms.i18n.CmsMessages;
import org.opencms.main.OpenCms;
import org.opencms.security.CmsOrganizationalUnit;
import org.opencms.ui.CmsVaadinUtils;
import org.opencms.ui.Messages;
import org.opencms.ui.components.CmsFakeWindow;
import org.opencms.ui.components.OpenCmsTheme;

import java.util.List;
import java.util.Locale;
import java.util.Map;

import com.google.common.collect.Maps;
import com.vaadin.annotations.DesignRoot;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.server.FontAwesome;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.themes.ValoTheme;
import com.vaadin.v7.shared.ui.label.ContentMode;
import com.vaadin.v7.ui.Label;
import com.vaadin.v7.ui.OptionGroup;
import com.vaadin.v7.ui.TextField;
import com.vaadin.v7.ui.VerticalLayout;

/**
 * Login form.

*/ @DesignRoot public class CmsLoginForm extends VerticalLayout { /** The private PC type constant. */ public static final String PC_TYPE_PRIVATE = "private"; /** The public PC type constant. */ public static final String PC_TYPE_PUBLIC = "public"; /** Version id. */ private static final long serialVersionUID = 1L; /** The login controller. */ protected CmsLoginController m_controller; /** The label showing the copyright information. */ private Label m_copyright; /** The error label. */ private Label m_error; /** Button for opening the "forgot password" dialog. */ private Button m_forgotPasswordButton; /**Fake window. */ private CmsFakeWindow m_fakeWindow; /** Label showing an optional configurable message.*/ private Label m_additionalMessage; /** Login button. */ private Button m_loginButton; /** Button to show / hide advanced options. */ private Button m_optionsButton; /** Boolean which indicated whether the advanced options are currently visible. */ private boolean m_optionsVisible; /** Widget for OU selection. */ private CmsLoginOuSelector m_ouSelect; /** Widget for entering the password. */ private CmsLoginPasswordField m_passwordField; /** The password visibility toggle. */ private Button m_showPasswordButton; /** The security field, which allows the user to choose between a private or public PC. */ private OptionGroup m_securityField; /** Widget for entering the user name. */ private TextField m_userField; private boolean m_multipleOus; /** * Creates a new instance.

* * @param controller the login controller * @param locale the locale to use */ public CmsLoginForm(CmsLoginController controller, Locale locale) { m_controller = controller; final CmsMessages messages = OpenCms.getWorkplaceManager().getMessages(locale); Map macros = Maps.newHashMap(); macros.put("showSecure", "" + controller.isShowSecure()); String pctype = controller.getPcType(); CmsVaadinUtils.readAndLocalizeDesign(this, messages, macros); m_securityField.addItem(PC_TYPE_PUBLIC); m_securityField.addItem(PC_TYPE_PRIVATE); m_securityField.setValue(pctype); m_copyright.setContentMode(ContentMode.HTML); m_copyright.setValue(CmsLoginHelper.getCopyrightHtml(locale)); CmsLoginMessage beforeLoginMessage = OpenCms.getLoginManager().getBeforeLoginMessage(); if ((beforeLoginMessage != null) && beforeLoginMessage.isEnabled()) { m_additionalMessage.setVisible(true); m_additionalMessage.setContentMode(ContentMode.HTML); m_additionalMessage.setValue(beforeLoginMessage.getMessage()); } m_securityField.setItemCaption( PC_TYPE_PRIVATE, messages.key(org.opencms.workplace.Messages.GUI_LOGIN_PCTYPE_PRIVATE_0)); m_securityField.setItemCaption( PC_TYPE_PUBLIC, messages.key(org.opencms.workplace.Messages.GUI_LOGIN_PCTYPE_PUBLIC_0)); setWidth("600px"); m_loginButton.setClickShortcut(KeyCode.ENTER); m_loginButton.addClickListener(new ClickListener() { private static final long serialVersionUID = 1L; public void buttonClick(ClickEvent event) { m_controller.onClickLogin(); } }); addAttachListener(new AttachListener() { private static final long serialVersionUID = 1L; @SuppressWarnings("synthetic-access") public void attach(AttachEvent event) { m_userField.focus(); } }); ClickListener forgotPasswordListener = new ClickListener() { private static final long serialVersionUID = 1L; public void buttonClick(ClickEvent event) { m_controller.onClickForgotPassword(); } }; m_forgotPasswordButton.addClickListener(forgotPasswordListener); m_optionsButton.addClickListener( new ClickListener() { private static final long serialVersionUID = 1L; public void buttonClick(ClickEvent event) { toggleOptionsVisible(); } }); m_error.setContentMode(ContentMode.HTML); m_showPasswordButton.addStyleName("o-login-show-password"); m_showPasswordButton.addStyleName(ValoTheme.BUTTON_BORDERLESS); m_showPasswordButton.addStyleName(OpenCmsTheme.BUTTON_UNPADDED); m_showPasswordButton.setIcon(FontAwesome.EYE_SLASH); m_showPasswordButton.addClickListener(evt -> togglePasswordVisible()); } /** * Gets the OU.

* * @return the OU */ public String getOrgUnit() { return m_ouSelect.getValue(); } /** * Gets the password.

* * @return the password */ public String getPassword() { return m_passwordField.getValue(); } /** * Gets the PC type.

* * @return the PC type */ public String getPcType() { return "" + m_securityField.getValue(); } /** * Gets the user.

* * @return the user */ public String getUser() { return m_userField.getValue(); } /** * Resets the password field.

*/ public void resetPassword() { m_passwordField.clear(); } /** * Selects a specific org unit.

* * @param preselectedOu the OU to select */ public void selectOrgUnit(String preselectedOu) { if (preselectedOu == null) { if (OpenCms.getLoginManager().isOrgUnitRequired()) { preselectedOu = CmsLoginOuSelector.OU_NONE; } else { preselectedOu = "/"; } } m_ouSelect.setValue(preselectedOu); } /** * Sets visibility of 'advanced' options.

* * @param optionsVisible true if the options should be shown, false if not */ public void setOptionsVisible(boolean optionsVisible) { m_optionsVisible = optionsVisible; boolean ousVisible = optionsVisible && !m_ouSelect.isAlwaysHidden(); m_ouSelect.setVisible(ousVisible); m_forgotPasswordButton.setVisible(optionsVisible); String optionsMessage = CmsVaadinUtils.getMessageText( optionsVisible ? Messages.GUI_LOGIN_OPTIONS_HIDE_0 : Messages.GUI_LOGIN_OPTIONS_SHOW_0); m_optionsButton.setCaption(optionsMessage); } /** * Sets the org units available for selection.

* * @param ous the ous */ public void setSelectableOrgUnits(List ous) { boolean addEmptySelection = OpenCms.getLoginManager().isOrgUnitRequired() && (ous.size() > 1); m_ouSelect.initOrgUnits(ous, addEmptySelection); boolean optionsVisible = addEmptySelection && (ous.size() > 1); setOptionsVisible(optionsVisible); } /** * Toggles visibility of 'advanced' options.

*/ public void toggleOptionsVisible() { setOptionsVisible(!m_optionsVisible); } /** * Toggles the password visibility (also changes icon for the password visibility toggle button). */ protected void togglePasswordVisible() { boolean visible = !m_passwordField.isPasswordVisible(); m_showPasswordButton.setIcon(visible ? FontAwesome.EYE : FontAwesome.EYE_SLASH); m_passwordField.setPasswordVisible(visible); } /** * Displays the given login error.

* * @param messageHTML the error message */ void displayError(String messageHTML) { // m_fakeWindow.addStyleName("waggler"); m_error.setValue(messageHTML); m_error.setVisible(true); CmsVaadinUtils.waggleMeOnce(m_fakeWindow); // //Add JavaScript code, which adds the wiggle class and removes it after a short time. // JavaScript.getCurrent().execute( // "wiggleElement=document.querySelectorAll(\".waggler\")[0];\n" // + "wiggleElement.className=wiggleElement.className + \" waggle\";\n" // + "setTimeout(function () {\n" // + "element=document.querySelectorAll(\".waggle\")[0];\n" // + "element.className=element.className.replace(/\\bwaggle\\b/g, \"\");" // + " }, 1500);"); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy