extensions/net.sf.basedb.otp/trunk/src/net/sf/basedb/otp/OtpLoginFormFactory.java

Code
Comments
Other
Rev Date Author Line
4847 13 Jun 18 nicklas 1 package net.sf.basedb.otp;
4847 13 Jun 18 nicklas 2
4847 13 Jun 18 nicklas 3 import net.sf.basedb.clients.web.extensions.AbstractJspActionFactory;
4847 13 Jun 18 nicklas 4 import net.sf.basedb.clients.web.extensions.login.FieldInfo;
4847 13 Jun 18 nicklas 5 import net.sf.basedb.clients.web.extensions.login.LoginFormAction;
4847 13 Jun 18 nicklas 6 import net.sf.basedb.clients.web.extensions.login.LoginFormBean;
4918 08 Aug 18 nicklas 7 import net.sf.basedb.core.authentication.AuthenticationMethod;
4847 13 Jun 18 nicklas 8 import net.sf.basedb.util.extensions.InvokationContext;
4847 13 Jun 18 nicklas 9
4847 13 Jun 18 nicklas 10 /**
4847 13 Jun 18 nicklas 11   Action factory for the OTP authentication login form.
4847 13 Jun 18 nicklas 12   
4847 13 Jun 18 nicklas 13    @author nicklas
4847 13 Jun 18 nicklas 14    @since 1.0
4847 13 Jun 18 nicklas 15 */
4847 13 Jun 18 nicklas 16 public class OtpLoginFormFactory
4847 13 Jun 18 nicklas 17   extends AbstractJspActionFactory<LoginFormAction>
4847 13 Jun 18 nicklas 18 {
4847 13 Jun 18 nicklas 19   
5183 06 Dec 18 nicklas 20   public OtpLoginFormFactory()
5183 06 Dec 18 nicklas 21   {}
4848 13 Jun 18 nicklas 22
5183 06 Dec 18 nicklas 23   @Override
5183 06 Dec 18 nicklas 24   public boolean prepareContext(InvokationContext<? super LoginFormAction> context) 
4847 13 Jun 18 nicklas 25   {
5183 06 Dec 18 nicklas 26     String clientId = context.getClientContext().getSessionControl().getExternalClientId();
5183 06 Dec 18 nicklas 27     boolean ok = Otp.getConfig(true) != null && !Otp.isOtpDisabledForClient(clientId);
5183 06 Dec 18 nicklas 28     return ok && super.prepareContext(context);
5183 06 Dec 18 nicklas 29   }
4918 08 Aug 18 nicklas 30
5183 06 Dec 18 nicklas 31   /**
5183 06 Dec 18 nicklas 32     @return A single {@link LoginFormBean} instance
5183 06 Dec 18 nicklas 33   */
5183 06 Dec 18 nicklas 34   @Override
5183 06 Dec 18 nicklas 35   public LoginFormAction[] getActions(InvokationContext<? super LoginFormAction> context)
5183 06 Dec 18 nicklas 36   {
5183 06 Dec 18 nicklas 37     AuthenticationMethod authMethod = Otp.getAuthenticationMethod();
5183 06 Dec 18 nicklas 38
5151 28 Nov 18 nicklas 39     FieldInfo otpField = new FieldInfo("One-time passcode", false);
5151 28 Nov 18 nicklas 40     otpField.setClazz("requried");
5151 28 Nov 18 nicklas 41     otpField.setStyle("width: 10em;");
5151 28 Nov 18 nicklas 42     otpField.setTooltip("Use your device to generate a 6-digit code");
4918 08 Aug 18 nicklas 43
4918 08 Aug 18 nicklas 44     String helpTextWithConfigLink = "<p style=\"margin-top: 0.5em;\">"
4918 08 Aug 18 nicklas 45         + "<b>Note!</b> If you have not configured your account for OTP you can do it "
4918 08 Aug 18 nicklas 46         + "<span class=\"link auto-init\" data-auto-init=\"setup-otp\">here</span>.";
4918 08 Aug 18 nicklas 47     
5183 06 Dec 18 nicklas 48     LoginFormBean loginForm = new LoginFormBean();
5151 28 Nov 18 nicklas 49     loginForm.setDisplayName("OTP");
5151 28 Nov 18 nicklas 50     loginForm.setRememberLastLogin(true);
5151 28 Nov 18 nicklas 51     loginForm.setLoginField(FieldInfo.DEFAULT_LOGIN);
4918 08 Aug 18 nicklas 52     if (authMethod == Otp.OTP_ONLY_AUTHENTICATION_METHOD)
4918 08 Aug 18 nicklas 53     {
5151 28 Nov 18 nicklas 54       loginForm.setHelp(
4848 13 Jun 18 nicklas 55         "A one-time passcode (OTP) is required to login. Enter your username in the <b>Login</b> field. "
4848 13 Jun 18 nicklas 56         + "Use your device to generate a 6-digit code and enter it in the <b>One-time passcode</b> field. "
4918 08 Aug 18 nicklas 57         + helpTextWithConfigLink);
5151 28 Nov 18 nicklas 58       loginForm.setPasswordField(otpField);
4918 08 Aug 18 nicklas 59     }
4918 08 Aug 18 nicklas 60     else
4918 08 Aug 18 nicklas 61     {
5151 28 Nov 18 nicklas 62       loginForm.setHelp(
4918 08 Aug 18 nicklas 63         "A one-time passcode (OTP) is required to login. Enter your username in the <b>Login</b> field and your "
4918 08 Aug 18 nicklas 64         + "regular password in the <b>Password</b> field. "
4918 08 Aug 18 nicklas 65         + "Use your device to generate a 6-digit code and enter it in the <b>One-time passcode</b> field. "
4918 08 Aug 18 nicklas 66         + helpTextWithConfigLink);
5151 28 Nov 18 nicklas 67       loginForm.setPasswordField(FieldInfo.DEFAULT_PASSWORD);
5151 28 Nov 18 nicklas 68       loginForm.setExtraField(otpField);
4918 08 Aug 18 nicklas 69     }
5183 06 Dec 18 nicklas 70     
5151 28 Nov 18 nicklas 71     return new LoginFormAction[] { loginForm };
4847 13 Jun 18 nicklas 72   }
4847 13 Jun 18 nicklas 73
4847 13 Jun 18 nicklas 74   
4847 13 Jun 18 nicklas 75 }