[ofbiz-framework] branch trunk updated: Implemented: Remove the user login security question.

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[ofbiz-framework] branch trunk updated: Implemented: Remove the user login security question.

mbrohl
This is an automated email from the ASF dual-hosted git repository.

mbrohl pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
     new bb698b9  Implemented: Remove the user login security question.
bb698b9 is described below

commit bb698b9b96c92e6d541b16850fa9bd3fe99b4142
Author: Michael Brohl <[hidden email]>
AuthorDate: Fri Mar 13 17:31:49 2020 +0100

    Implemented: Remove the user login security question.
   
    (OFBIZ-11244)
   
    Thanks Wiebke Pätzold for providing the patch.
---
 applications/party/minilang/user/UserEvents.xml    |  7 -----
 applications/party/widget/partymgr/PartyForms.xml  |  9 ------
 .../ofbiz/securityext/login/LoginEvents.java       | 26 ------------------
 framework/common/config/SecurityUiLabels.xml       | 12 --------
 framework/common/config/SecurityextUiLabels.xml    | 16 -----------
 framework/common/data/CommonTypeData.xml           |  1 -
 framework/common/servicedef/services.xml           |  2 --
 framework/common/servicedef/services_security.xml  | 16 -----------
 .../apache/ofbiz/common/login/LoginServices.java   | 19 -------------
 framework/common/widget/CommonScreens.xml          |  7 -----
 framework/common/widget/SecurityForms.xml          | 14 ----------
 framework/security/data/SecurityTypeDemoData.xml   | 31 ---------------------
 framework/security/entitydef/entitymodel.xml       | 13 ---------
 themes/common-theme/template/ChangePassword.ftl    | 15 ----------
 themes/common-theme/template/ForgotPassword.ftl    | 28 ++-----------------
 .../common-theme/template/GetSecurityQuestion.ftl  | 31 ++++-----------------
 themes/common-theme/widget/CommonScreens.xml       |  8 ------
 themes/rainbowstone/template/ChangePassword.ftl    | 13 ---------
 themes/rainbowstone/template/ForgotPassword.ftl    | 28 ++-----------------
 .../rainbowstone/template/GetSecurityQuestion.ftl  | 32 ++++------------------
 20 files changed, 17 insertions(+), 311 deletions(-)

diff --git a/applications/party/minilang/user/UserEvents.xml b/applications/party/minilang/user/UserEvents.xml
index 4afc8d2..6a3fa50 100644
--- a/applications/party/minilang/user/UserEvents.xml
+++ b/applications/party/minilang/user/UserEvents.xml
@@ -424,13 +424,6 @@ under the License.
         <set field="createProductStoreRoleMap.productStoreId" from-field="parameters.PRODUCT_STORE_ID"/>
         <call-service service-name="createProductStoreRole" in-map-name="createProductStoreRoleMap"/>
 
-        <if-not-empty field="parameters.securityAnswer">
-            <set field="createULSQContext.userLoginId" from-field="parameters.USERNAME"/>
-            <set field="createULSQContext.questionEnumId" from-field="parameters.securityQuestion"/>
-            <set field="createULSQContext.securityAnswer" from-field="parameters.securityAnswer"/>
-            <call-service service-name="createUserLoginSecurityQuestion" in-map-name="createULSQContext" />
-        </if-not-empty>
-
         <!--send New User Email Notification-->
         <set field="emailContext.partyId" from-field="partyId"/>
         <set field="emailContext.productStoreId" from-field="parameters.PRODUCT_STORE_ID"/>
diff --git a/applications/party/widget/partymgr/PartyForms.xml b/applications/party/widget/partymgr/PartyForms.xml
index 38417d7..343e419 100644
--- a/applications/party/widget/partymgr/PartyForms.xml
+++ b/applications/party/widget/partymgr/PartyForms.xml
@@ -656,15 +656,6 @@ under the License.
         <field use-when="displayPassword!='Y'" name="USERNAME" title="${uiLabelMap.CommonUsername}" tooltip="* ${uiLabelMap.PartyTemporaryPassword}" required-field="true"><text size="30" maxlength="250"/></field>
         <!--<field name="RequiredNote" title=" "><display description="${uiLabelMap.PartyRequiredNote}" also-hidden="false"/></field> -->
 
-        <field name="securityQuestion">
-          <drop-down allow-empty="true">
-              <entity-options entity-name="Enumeration" key-field-name="enumId" description="${description}">
-                 <entity-constraint name="enumTypeId" operator="equals" value="SQ_STANDARD" />
-              </entity-options>
-          </drop-down>
-        </field>
-        <field name="securityAnswer" title="${uiLabelMap.SecurityAnswer}"><text /></field>
-
         <field name="PRODUCT_STORE_ID" title="Product Store" tooltip="${uiLabelMap.CommonRequired}" widget-style="required">
             <drop-down>
                 <entity-options entity-name="ProductStore" key-field-name="productStoreId" description="${storeName} (${productStoreId})">
diff --git a/applications/securityext/src/main/java/org/apache/ofbiz/securityext/login/LoginEvents.java b/applications/securityext/src/main/java/org/apache/ofbiz/securityext/login/LoginEvents.java
index 69d8b50..ecc8e4a 100644
--- a/applications/securityext/src/main/java/org/apache/ofbiz/securityext/login/LoginEvents.java
+++ b/applications/securityext/src/main/java/org/apache/ofbiz/securityext/login/LoginEvents.java
@@ -142,32 +142,6 @@ public class LoginEvents {
             return "error";
         }
 
-        String questionEnumId = request.getParameter("securityQuestion");
-        String securityAnswer = request.getParameter("securityAnswer");
-        if (UtilValidate.isEmpty(questionEnumId) && UtilValidate.isEmpty(securityAnswer)) {
-            return "success";
-        }
-
-        try {
-            GenericValue userLoginSecurityQuestion = EntityQuery.use(delegator).from("UserLoginSecurityQuestion").where("questionEnumId", questionEnumId, "userLoginId", userLoginId).cache().queryOne();
-            if (userLoginSecurityQuestion != null) {
-                if (UtilValidate.isEmpty(securityAnswer)) {
-                    errMsg = UtilProperties.getMessage(resource, "loginservices.security_answer_empty", UtilHttp.getLocale(request));
-                    request.setAttribute("_ERROR_MESSAGE_", errMsg);
-                    return "error";
-                }
-                String ulSecurityAnswer = userLoginSecurityQuestion.getString("securityAnswer");
-                if (UtilValidate.isNotEmpty(ulSecurityAnswer) && ! securityAnswer.equalsIgnoreCase(ulSecurityAnswer)) {
-                    errMsg = UtilProperties.getMessage(resource, "loginservices.security_answer_not_match", UtilHttp.getLocale(request));
-                    request.setAttribute("_ERROR_MESSAGE_", errMsg);
-                    return "error";
-                }
-            }
-        } catch (GenericEntityException e) {
-            errMsg = UtilProperties.getMessage(resource, "loginevents.problem_getting_security_question_record", UtilHttp.getLocale(request));
-            Debug.logError(e, errMsg, module);
-        }
-
         GenericValue supposedUserLogin = null;
         String passwordHint = null;
         
diff --git a/framework/common/config/SecurityUiLabels.xml b/framework/common/config/SecurityUiLabels.xml
index 3a7a6d8..2fef15b 100644
--- a/framework/common/config/SecurityUiLabels.xml
+++ b/framework/common/config/SecurityUiLabels.xml
@@ -83,10 +83,6 @@
         <value xml:lang="zh">把用户登录添加到安全组</value>
         <value xml:lang="zh-TW">把使用者登入增加到安全群組</value>
     </property>
-    <property key="AnswerSecurityQuestion">
-        <value xml:lang="en">Answer your Security Question</value>
-        <value xml:lang="fr">Répondez à votre question de sécurité</value>
-    </property>
     <property key="CertComponent">
         <value xml:lang="de">Komponente</value>
         <value xml:lang="en">Component</value>
@@ -715,10 +711,6 @@
         <value xml:lang="en">Click Here To Reset Password</value>
         <value xml:lang="fr">Cliquez ici pour créer un nouveau mot de passe</value>
     </property>
-    <property key="SecurityAnswer">
-        <value xml:lang="en">Security Answer</value>
-        <value xml:lang="fr">Réponse de sécurité</value>
-    </property>
     <property key="SecurityGroups">
         <value xml:lang="de">Sicherheitsgruppen</value>
         <value xml:lang="en">Security Groups</value>
@@ -753,10 +745,6 @@
         <value xml:lang="zh">安全组列表</value>
         <value xml:lang="zh-TW">安全群組清單</value>
     </property>
-    <property key="SecurityQuestion">
-        <value xml:lang="en">Security Question</value>
-        <value xml:lang="fr">Question de sécurité</value>
-    </property>
     <property key="SecurityViewPermissionError">
         <value xml:lang="de">Sicherheitsfehler: Sie haben nicht die Berechtigung diese Seite anzusehen. ("SECURITY_VIEW" oder "SECURITY_ADMIN" benötigt) </value>
         <value xml:lang="en">SecurityViewPermissionError You do not have permission to view this page. ("SECURITY_VIEW" or "SECURITY_ADMIN" needed)</value>
diff --git a/framework/common/config/SecurityextUiLabels.xml b/framework/common/config/SecurityextUiLabels.xml
index 8fcde94..5aa7472 100644
--- a/framework/common/config/SecurityextUiLabels.xml
+++ b/framework/common/config/SecurityextUiLabels.xml
@@ -267,10 +267,6 @@
         <value xml:lang="zh">密码是空的,请重新输入。</value>
         <value xml:lang="zh-TW">密碼是空的, 請重新輸入.</value>
     </property>
-    <property key="loginevents.problem_getting_security_question_record">
-        <value xml:lang="en">Problem getting User Login Security Question record.</value>
-        <value xml:lang="fr">Problème durant la lecture de votre question de sécurité</value>
-    </property>
     <property key="loginevents.problems_with_configuration_contact_customer_service">
         <value xml:lang="de">Fehler bei der Konfiguration; bitte wenden Sie sich an den Kundenservice.</value>
         <value xml:lang="en">Problems with configuration; please contact customer service.</value>
@@ -551,10 +547,6 @@
         <value xml:lang="zh">无法禁用旧的登录用户(写错误):${errorMessage}。</value>
         <value xml:lang="zh-TW">無法停用舊有使用者(寫入錯誤): ${errorMessage}.</value>
     </property>
-    <property key="loginservices.error_setting_security_question">
-        <value xml:lang="en">Exception thrown while setting security question for the UserLogin:</value>
-        <value xml:lang="fr">Problème durant l'écriture de votre question de sécurité</value>
-    </property>
     <property key="loginservices.ldap_authentication_failed">
         <value xml:lang="de">LDAP Anmeldung nicht möglich</value>
         <value xml:lang="en">LDAP authentication failed.</value>
@@ -838,14 +830,6 @@
         <value xml:lang="zh">密码提示(${userLoginId})。</value>
         <value xml:lang="zh-TW">密碼提示(${userLoginId}).</value>
     </property>
-    <property key="loginservices.security_answer_empty">
-        <value xml:lang="en">The security answer is missing</value>
-        <value xml:lang="fr">La question de sécurité manque</value>
-    </property>
-    <property key="loginservices.security_answer_not_match">
-        <value xml:lang="en">The answer does not match records, re-enter</value>
-        <value xml:lang="fr">Votre réponse à la question de sécurité ne correspond, essayez à nouveau.</value>
-    </property>
     <property key="loginservices.since_datetime">
         <value xml:lang="de">(seit ${disabledDateTime})</value>
         <value xml:lang="en">since ${disabledDateTime}.</value>
diff --git a/framework/common/data/CommonTypeData.xml b/framework/common/data/CommonTypeData.xml
index e14d904..9f82a75 100644
--- a/framework/common/data/CommonTypeData.xml
+++ b/framework/common/data/CommonTypeData.xml
@@ -112,7 +112,6 @@ under the License.
     <Enumeration enumId="VT_LOGIN_TMPLT_LOC" description="Login Template Location" enumTypeId="VT_RES_TYPE" sequenceId="21"/>
     <Enumeration enumId="VT_CHPWD_TMPLT_LOC" description="Change Password Template Location" enumTypeId="VT_RES_TYPE" sequenceId="22"/>
     <Enumeration enumId="VT_FGPWD_TMPLT_LOC" description="Forget Password Template Location" enumTypeId="VT_RES_TYPE" sequenceId="23"/>
-    <Enumeration enumId="VT_GSQUE_TMPLT_LOC" description="Security Question Template Location" enumTypeId="VT_RES_TYPE" sequenceId="24"/>
     <Enumeration enumId="VT_IMPERSO_TMPLT_LOC" description="Impersonated Template Location" enumTypeId="VT_RES_TYPE" sequenceId="25"/>
     <Enumeration enumId="VT_STYLESHEET_LESS" description="Style Sheet Less URL" enumTypeId="VT_RES_TYPE" sequenceId="25"/>
 
diff --git a/framework/common/servicedef/services.xml b/framework/common/servicedef/services.xml
index 87554d5..baac0de 100644
--- a/framework/common/servicedef/services.xml
+++ b/framework/common/servicedef/services.xml
@@ -406,8 +406,6 @@ under the License.
         <attribute name="requirePasswordChange" type="String" mode="IN" optional="true"/>
         <attribute name="externalAuthId" type="String" mode="IN" optional="true"/>
         <attribute name="partyId" type="String" mode="IN" optional="true"/>
-        <attribute name="securityQuestion" type="String" mode="IN" optional="true"/>
-        <attribute name="securityAnswer" type="String" mode="IN" optional="true"/>
     </service>
     <service name="updateUserLoginId" engine="java" location="org.apache.ofbiz.common.login.LoginServices" invoke="updateUserLoginId" auth="true">
         <description>Update a UserLoginId by creating a new one and expiring the old one</description>
diff --git a/framework/common/servicedef/services_security.xml b/framework/common/servicedef/services_security.xml
index 4ef8768..0df3262 100644
--- a/framework/common/servicedef/services_security.xml
+++ b/framework/common/servicedef/services_security.xml
@@ -144,22 +144,6 @@ under the License.
         <implements service="permissionInterface"/>
         <attribute name="primaryPermission" type="String" mode="IN" optional="true" default-value="SECURITY"/>
     </service>
-    
-    <service name="createUserLoginSecurityQuestion" engine="entity-auto" invoke="create" default-entity-name="UserLoginSecurityQuestion" auth="true">
-        <description>Create a UserLoginSecurityQuestion</description>
-        <auto-attributes include="pk" mode="IN" optional="false"/>
-        <auto-attributes include="nonpk" mode="IN" optional="true"/>
-    </service>
-    <service name="updateUserLoginSecurityQuestion" engine="entity-auto" invoke="update" default-entity-name="UserLoginSecurityQuestion" auth="true">
-        <description>Update a UserLoginSecurityQuestion</description>
-        <auto-attributes include="pk" mode="IN" optional="false"/>
-        <auto-attributes include="nonpk" mode="IN" optional="true"/>
-    </service>
-    <service name="removeUserLoginSecurityQuestion" engine="entity-auto" invoke="delete" default-entity-name="UserLoginSecurityQuestion" auth="true">
-        <description>Remove UserLoginSecurityQuestion</description>
-        <auto-attributes include="pk" mode="IN" optional="false"/>
-        <auto-attributes include="nonpk" mode="IN" optional="true"/>
-    </service>
 
     <service name="deleteSecurityGroup" default-entity-name="SecurityGroup" engine="entity-auto" invoke="delete" auth="true">
         <description>Delete a SecurityGroup</description>
diff --git a/framework/common/src/main/java/org/apache/ofbiz/common/login/LoginServices.java b/framework/common/src/main/java/org/apache/ofbiz/common/login/LoginServices.java
index 19bd37b..e17845a 100644
--- a/framework/common/src/main/java/org/apache/ofbiz/common/login/LoginServices.java
+++ b/framework/common/src/main/java/org/apache/ofbiz/common/login/LoginServices.java
@@ -57,7 +57,6 @@ import org.apache.ofbiz.entity.util.EntityUtilProperties;
 import org.apache.ofbiz.security.Security;
 import org.apache.ofbiz.security.SecurityUtil;
 import org.apache.ofbiz.service.DispatchContext;
-import org.apache.ofbiz.service.GenericServiceException;
 import org.apache.ofbiz.service.LocalDispatcher;
 import org.apache.ofbiz.service.ModelService;
 import org.apache.ofbiz.service.ServiceUtil;
@@ -621,7 +620,6 @@ public class LoginServices {
     public static Map<String, Object> createUserLogin(DispatchContext ctx, Map<String, ?> context) {
         Map<String, Object> result =  new LinkedHashMap<>();
         Delegator delegator = ctx.getDelegator();
-        LocalDispatcher dispatcher = ctx.getDispatcher();
         Security security = ctx.getSecurity();
         GenericValue loggedInUserLogin = (GenericValue) context.get("userLogin");
         List<String> errorMessageList = new LinkedList<>();
@@ -639,9 +637,6 @@ public class LoginServices {
         String externalAuthId = (String) context.get("externalAuthId");
         String errMsg = null;
 
-        String questionEnumId = (String) context.get("securityQuestion");
-        String securityAnswer = (String) context.get("securityAnswer");
-        
         // security: don't create a user login if the specified partyId (if not empty) already exists
         // unless the logged in user has permission to do so (same partyId or PARTYMGR_CREATE)
         if (UtilValidate.isNotEmpty(partyId)) {
@@ -712,20 +707,6 @@ public class LoginServices {
             return ServiceUtil.returnError(errMsg);
         }
 
-        try {
-            if (UtilValidate.isNotEmpty(securityAnswer)) {
-                Map<String, Object> resultMap = dispatcher.runSync("createUserLoginSecurityQuestion",
-                        UtilMisc.toMap("userLogin", loggedInUserLogin, "userLoginId", userLoginId, "questionEnumId", questionEnumId, "securityAnswer", securityAnswer));
-                if (ServiceUtil.isError(resultMap)) {
-                    errMsg = ServiceUtil.getErrorMessage(resultMap);
-                    errorMessageList.add(errMsg);
-                    Debug.logError(errMsg, module);
-                }
-            }
-        } catch (GenericServiceException e1) {
-            errMsg = UtilProperties.getMessage(resource,"loginservices.error_setting_security_question", locale);
-            Debug.logError(e1, errMsg, module);
-        }
         result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
         return result;
     }
diff --git a/framework/common/widget/CommonScreens.xml b/framework/common/widget/CommonScreens.xml
index b156def..d794276 100644
--- a/framework/common/widget/CommonScreens.xml
+++ b/framework/common/widget/CommonScreens.xml
@@ -256,13 +256,6 @@ under the License.
         <section>
             <actions>
                 <set field="userLoginId" from-field="parameters.USERNAME"/>
-                <entity-and entity-name="UserLoginSecurityQuestion" list="securityQuestions">
-                    <field-map field-name="userLoginId" />
-                </entity-and>
-                <set field="questionEnumId" from-field="securityQuestions[0].questionEnumId" />
-                <entity-one entity-name="Enumeration" value-field="securityQuestion">
-                    <field-map field-name="enumId" from-field="questionEnumId" />
-                </entity-one>
             </actions>
             <widgets>
                 <include-screen name="MinimalActions" />
diff --git a/framework/common/widget/SecurityForms.xml b/framework/common/widget/SecurityForms.xml
index cebc997..87dab35 100644
--- a/framework/common/widget/SecurityForms.xml
+++ b/framework/common/widget/SecurityForms.xml
@@ -79,20 +79,6 @@ under the License.
                 <option key="N" description="${uiLabelMap.CommonN}"/>
             </drop-down>
         </field>
-        <field name="securityQuestion">
-          <drop-down allow-empty="true">
-              <entity-options entity-name="Enumeration" key-field-name="enumId" description="${description}">
-                 <entity-constraint name="enumTypeId" operator="equals" value="SQ_STANDARD" />
-              </entity-options>
-          </drop-down>
-        </field>
-        <field name="securityAnswer" title="${uiLabelMap.SecurityAnswer}"><text /></field>
-        <field name="submitButton" title="${uiLabelMap.CommonSave}" widget-style="smallSubmit"><submit button-type="text-link"/></field>
-        <field name="cancelLink" title=" " widget-style="smallSubmit">
-            <hyperlink description="${uiLabelMap.CommonCancelDone}" target="${cancelPage}" also-hidden="false">
-                <parameter param-name="partyId"/>
-            </hyperlink>
-        </field>
     </form>
 
     <form name="AddUserLoginSecurityGroup" type="single" target="${addUserLoginSecurityGroupURI}"
diff --git a/framework/security/data/SecurityTypeDemoData.xml b/framework/security/data/SecurityTypeDemoData.xml
deleted file mode 100644
index 1efdc6f..0000000
--- a/framework/security/data/SecurityTypeDemoData.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<entity-engine-xml>
-    <!-- OFBiz Core security -->
-
-    <EnumerationType enumTypeId="SECURITY_QUESTION" description="Security Question"/>
-    <EnumerationType enumTypeId="SQ_CUSTOM" parentTypeId="SECURITY_QUESTION" description="Custom Security Question"/>
-    <EnumerationType enumTypeId="SQ_STANDARD" parentTypeId="SECURITY_QUESTION" description="Standard Security Question"/>
-    <Enumeration enumId="SQ_STD_NCKNM" enumTypeId="SQ_STANDARD" sequenceId="0" description="What is your nick name"/>
-    <Enumeration enumId="SQ_STD_MOTNM" enumTypeId="SQ_STANDARD" sequenceId="1" description="What is your mother's maiden name"/>
-    <Enumeration enumId="SQ_STD_FAVTCH" enumTypeId="SQ_STANDARD" sequenceId="2" description="What is your favorite teacher's name"/>
-    <Enumeration enumId="SQ_STD_PETNM" enumTypeId="SQ_STANDARD" sequenceId="2" description="What is your pet's name"/>
-    <Enumeration enumId="SQ_STD_BSTFRND" enumTypeId="SQ_STANDARD" sequenceId="3" description="Who is your best childhood friend"/>
-</entity-engine-xml>
diff --git a/framework/security/entitydef/entitymodel.xml b/framework/security/entitydef/entitymodel.xml
index d179569..a1de8a7 100644
--- a/framework/security/entitydef/entitymodel.xml
+++ b/framework/security/entitydef/entitymodel.xml
@@ -259,17 +259,4 @@ under the License.
       <prim-key field="viewNameId"/>
       <prim-key field="userLoginId"/>
     </entity>
-    <entity entity-name="UserLoginSecurityQuestion" package-name="org.apache.ofbiz.security.login">
-      <field name="questionEnumId" type="id" />
-      <field name="userLoginId" type="id-vlong" />
-      <field name="securityAnswer" type="description" />
-      <prim-key field="questionEnumId"/>
-      <prim-key field="userLoginId"/>
-      <relation rel-entity-name="Enumeration" type="one" fk-name="SECQ_ENUM">
-        <key-map field-name="questionEnumId" rel-field-name="enumId"/>
-      </relation>
-      <relation rel-entity-name="UserLogin" type="one" fk-name="ULGNSECQ_ULGN">
-        <key-map field-name="userLoginId"/>
-      </relation>
-    </entity>
 </entitymodel>
diff --git a/themes/common-theme/template/ChangePassword.ftl b/themes/common-theme/template/ChangePassword.ftl
index b0b76e0..9c6ad36 100644
--- a/themes/common-theme/template/ChangePassword.ftl
+++ b/themes/common-theme/template/ChangePassword.ftl
@@ -57,21 +57,6 @@ under the License.
           <td class="label">${uiLabelMap.CommonNewPasswordVerify}</td>
           <td><input type="password" name="newPasswordVerify" autocomplete="off" value="" size="20"/></td>
         </tr>
-        <#if securityQuestion?has_content>
-          <tr>
-            <td class="label">${uiLabelMap.SecurityQuestiom}</td>
-            <td>
-              <input type="hidden" name="securityQuestion" value="${securityQuestion.enumId!}" />
-                ${securityQuestion.description!}
-            </td>
-          </tr>
-          <tr>
-            <td class="label">${uiLabelMap.SecurityAnswer}</td>
-            <td>
-              <input type="text" class='inputBox' name="securityAnswer" id="SECURITY_ANSWER" value="" maxlength="100" />
-            </td>
-          </tr>
-        </#if>
         <tr>
           <td colspan="2" align="center">
             <input type="submit" value="${uiLabelMap.CommonSubmit}"/>
diff --git a/themes/common-theme/template/ForgotPassword.ftl b/themes/common-theme/template/ForgotPassword.ftl
index 3e936e4..44c5e63 100644
--- a/themes/common-theme/template/ForgotPassword.ftl
+++ b/themes/common-theme/template/ForgotPassword.ftl
@@ -16,11 +16,8 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<#if securityQuestion??>
-    <#assign messageTitle = uiLabelMap.AnswerSecurityQuestion>
-<#else>
-    <#assign messageTitle = uiLabelMap.CommonForgotYourPassword>
-</#if>
+
+<#assign messageTitle = uiLabelMap.CommonForgotYourPassword>
 <#if ! userLoginId??>
     <#assign userLoginId = requestParameters.USERNAME!>
     <#if ! userLoginId?? && autoUserLogin??>
@@ -39,26 +36,7 @@ under the License.
                         <td class="label">${uiLabelMap.CommonUsername}</td>
                         <td><input type="text" size="20" name="USERNAME" value="${userLoginId!}"/></td>
                     </tr>
-                  <#if securityQuestion?has_content>
-                      <tr>
-                          <td class="label">${uiLabelMap.SecurityQuestion}</td>
-                          <td>
-                              ${securityQuestion.description!}
-                              <input type="hidden" name="securityQuestion" value="${securityQuestion.enumId!}" />
-                          </td>
-                      </tr>
-                      <tr>
-                          <td class="label">${uiLabelMap.SecurityAnswer}</td>
-                          <td>
-                              <input type="text" name="securityAnswer" class="" value="" />&nbsp;
-                          </td>
-                      </tr>
-                      <tr>
-                          <td colspan="2" align="center">
-                              <input type="submit" name="GET_PASSWORD_HINT" class="smallSubmit" value="${uiLabelMap.CommonGetPasswordHint}"/>
-                          </td>
-                      </tr>
-                  <#elseif requestParameters.token??>
+                  <#if requestParameters.token??>
                       <input type="hidden" name="token" value="${requestParameters.token}"/>
                       <tr>
                           <td class="label">${uiLabelMap.CommonNewPassword}</td>
diff --git a/themes/common-theme/template/GetSecurityQuestion.ftl b/themes/common-theme/template/GetSecurityQuestion.ftl
index 68d9295..aa1d3aa 100644
--- a/themes/common-theme/template/GetSecurityQuestion.ftl
+++ b/themes/common-theme/template/GetSecurityQuestion.ftl
@@ -20,37 +20,16 @@ under the License.
 <center>
   <div class="screenlet login-screenlet">
     <div class="screenlet-title-bar">
-      <#if securityQuestion?has_content>
-        <h3>${uiLabelMap.AnswerSecurityQuestion}</h3>
-      <#else>
-        <h3>${uiLabelMap.CommonForgotYourPassword}</h3>
-      </#if>
+      <h3>${uiLabelMap.CommonForgotYourPassword}</h3>
     </div>
     <div class="screenlet-body">
       <form method="post" action="<@ofbizUrl>forgotPassword_step3${previousParams?if_exists}</@ofbizUrl>" name="forgotpassword">
         <table class="basic-table" cellspacing="0">
           <#if userLoginId?has_content>
-            <#if securityQuestion?has_content>
-              <tr>
-                <td class="label">${uiLabelMap.SecurityQuestion}</td>
-                <td>
-                  ${securityQuestion.description!}
-                  <input type="hidden" name="securityQuestion" value="${securityQuestion.enumId!}" />
-                  <input type="hidden" name="USERNAME" value="${userLoginId!}" />
-                </td>
-              </tr>
-              <tr>
-                <td class="label">${uiLabelMap.SecurityAnswer}</td>
-                <td>
-                  <input type="text" name="securityAnswer" class="" value="" />&nbsp;
-                </td>
-              </tr>
-            <#else>
-              <tr>
-                <td class="label">${uiLabelMap.CommonUsername}</td>
-                <td><input type="text" size="20" name="USERNAME" value="<#if requestParameters.USERNAME?has_content>${requestParameters.USERNAME}<#elseif autoUserLogin?has_content>${autoUserLogin.userLoginId}</#if>" /></td>
-              </tr>
-            </#if>
+            <tr>
+              <td class="label">${uiLabelMap.CommonUsername}</td>
+              <td><input type="text" size="20" name="USERNAME" value="<#if requestParameters.USERNAME?has_content>${requestParameters.USERNAME}<#elseif autoUserLogin?has_content>${autoUserLogin.userLoginId}</#if>" /></td>
+            </tr>
             <tr>
               <td colspan="2" align="center">
                 <input type="submit" name="GET_PASSWORD_HINT" class="smallSubmit" value="${uiLabelMap.CommonGetPasswordHint}" />&nbsp;
diff --git a/themes/common-theme/widget/CommonScreens.xml b/themes/common-theme/widget/CommonScreens.xml
index 9993deb..7b281f0 100644
--- a/themes/common-theme/widget/CommonScreens.xml
+++ b/themes/common-theme/widget/CommonScreens.xml
@@ -642,14 +642,6 @@ under the License.
                                     </condition>
                                     <actions>
                                         <set field="userLoginId" from-field="parameters.USERNAME"/>
-                                        <entity-and entity-name="UserLoginSecurityQuestion" list="securityQuestions">
-                                            <field-map field-name="userLoginId" />
-                                        </entity-and>
-                                        <set field="questionEnumId" from-field="securityQuestions[0].questionEnumId" />
-                                        <entity-one entity-name="Enumeration" value-field="securityQuestion">
-                                            <field-map field-name="enumId" from-field="questionEnumId"/>
-                                        </entity-one>
-                                        <set field="securityQuestion" from-field="securityQuestion"/>
                                     </actions>
                                 </section>
                                 <platform-specific>
diff --git a/themes/rainbowstone/template/ChangePassword.ftl b/themes/rainbowstone/template/ChangePassword.ftl
index 3fdb8ee..d6e920c 100644
--- a/themes/rainbowstone/template/ChangePassword.ftl
+++ b/themes/rainbowstone/template/ChangePassword.ftl
@@ -57,19 +57,6 @@ under the License.
           <td class="label">${uiLabelMap.CommonNewPasswordVerify}</td>
           <td><input type="password" name="newPasswordVerify" autocomplete="off" value="" size="20"/></td>
         </tr>
-        <#if securityQuestion?has_content>
-          <tr>
-            <td class="label">${uiLabelMap.SecurityQuestiom}</td>
-            <td>
-              <input type="hidden" name="securityQuestion" value="${securityQuestion.enumId!}" />
-                ${securityQuestion.description!}
-            </td>
-          </tr>
-          <tr>
-            <td class="label">${uiLabelMap.SecurityAnswer}</td>
-            <td><input type="text" class='inputBox' name="securityAnswer" id="SECURITY_ANSWER" value="" maxlength="100" /></td>
-          </tr>
-        </#if>
         <tr>
           <td colspan="2" align="center">
             <input type="submit" value="${uiLabelMap.CommonSubmit}"/>
diff --git a/themes/rainbowstone/template/ForgotPassword.ftl b/themes/rainbowstone/template/ForgotPassword.ftl
index a2ef71f..ef98e39 100644
--- a/themes/rainbowstone/template/ForgotPassword.ftl
+++ b/themes/rainbowstone/template/ForgotPassword.ftl
@@ -16,11 +16,8 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<#if securityQuestion??>
-    <#assign messageTitle = uiLabelMap.AnswerSecurityQuestion>
-<#else>
-    <#assign messageTitle = uiLabelMap.CommonForgotYourPassword>
-</#if>
+
+<#assign messageTitle = uiLabelMap.CommonForgotYourPassword>
 <#if ! userLoginId??>
     <#assign userLoginId = requestParameters.USERNAME!>
     <#if ! userLoginId?? && autoUserLogin??>
@@ -40,26 +37,7 @@ under the License.
                         <td class="label">${uiLabelMap.CommonUsername}</td>
                         <td><input type="text" size="20" name="USERNAME" value="${userLoginId!}"/></td>
                     </tr>
-                  <#if securityQuestion?has_content>
-                      <tr>
-                          <td class="label">${uiLabelMap.SecurityQuestion}</td>
-                          <td>
-                              ${securityQuestion.description!}
-                              <input type="hidden" name="securityQuestion" value="${securityQuestion.enumId!}" />
-                          </td>
-                      </tr>
-                      <tr>
-                          <td class="label">${uiLabelMap.SecurityAnswer}</td>
-                          <td>
-                              <input type="text" name="securityAnswer" class="" value="" />&nbsp;
-                          </td>
-                      </tr>
-                      <tr>
-                          <td colspan="2" align="center">
-                              <input type="submit" name="GET_PASSWORD_HINT" class="smallSubmit" value="${uiLabelMap.CommonGetPasswordHint}"/>
-                          </td>
-                      </tr>
-                  <#elseif requestParameters.token??>
+                  <#if requestParameters.token??>
                       <input type="hidden" name="token" value="${requestParameters.token}"/>
                       <tr>
                           <td class="label">${uiLabelMap.CommonNewPassword}</td>
diff --git a/themes/rainbowstone/template/GetSecurityQuestion.ftl b/themes/rainbowstone/template/GetSecurityQuestion.ftl
index 46b87d1..f6e6918 100644
--- a/themes/rainbowstone/template/GetSecurityQuestion.ftl
+++ b/themes/rainbowstone/template/GetSecurityQuestion.ftl
@@ -16,11 +16,8 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<#if securityQuestion?has_content>
-  <#assign messageTitle = uiLabelMap.AnswerSecurityQuestion>
-<#else>
-  <#assign messageTitle = uiLabelMap.CommonForgotYourPassword>
-</#if>
+
+<#assign messageTitle = uiLabelMap.CommonForgotYourPassword>
 <div id="loginBar"><span>${messageTitle}</span><div id="company-logo"></div></div>
 <center>
   <div class="screenlet login-screenlet">
@@ -31,27 +28,10 @@ under the License.
       <form method="post" action="<@ofbizUrl>forgotPassword_step3${previousParams?if_exists}</@ofbizUrl>" name="forgotpassword">
         <table class="basic-table" cellspacing="0">
           <#if userLoginId?has_content>
-            <#if securityQuestion?has_content>
-              <tr>
-                <td class="label">${uiLabelMap.SecurityQuestion}</td>
-                <td>
-                   ${securityQuestion.description!}
-                   <input type="hidden" name="securityQuestion" value="${securityQuestion.enumId!}" />
-                   <input type="hidden" name="USERNAME" value="${userLoginId!}" />
-                </td>
-              </tr>
-              <tr>
-                <td class="label">${uiLabelMap.SecurityAnswer}</td>
-                <td>
-                  <input type="text" name="securityAnswer" class="" value="" />&nbsp;
-                </td>
-              </tr>
-            <#else>
-              <tr>
-                <td class="label">${uiLabelMap.CommonUsername}</td>
-                <td><input type="text" size="20" name="USERNAME" value="<#if requestParameters.USERNAME?has_content>${requestParameters.USERNAME}<#elseif autoUserLogin?has_content>${autoUserLogin.userLoginId}</#if>" /></td>
-              </tr>
-            </#if>
+            <tr>
+              <td class="label">${uiLabelMap.CommonUsername}</td>
+              <td><input type="text" size="20" name="USERNAME" value="<#if requestParameters.USERNAME?has_content>${requestParameters.USERNAME}<#elseif autoUserLogin?has_content>${autoUserLogin.userLoginId}</#if>" /></td>
+            </tr>
             <tr>
               <td colspan="2" align="center">
                 <input type="submit" name="GET_PASSWORD_HINT" class="smallSubmit" value="${uiLabelMap.CommonGetPasswordHint}" />&nbsp;