Commit 6a17cb69 by Nilu

forgot password - applicant portal

parent 915561ae
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
<column name="object_created_date" type="Date" nullable="false" length="22"/> <column name="object_created_date" type="Date" nullable="false" length="22"/>
<column name="object_type" type="String" nullable="false" length="30"/> <column name="object_type" type="String" nullable="false" length="30"/>
<column name="phone" type="String" nullable="true" length="30"/> <column name="phone" type="String" nullable="true" length="30"/>
<column name="forgot_password_mail_send_date" type="Date" nullable="true"/>
<column name="forgot_password_key" type="String" nullable="true" length="10"/>
<column name="verification_mail_send_date" type="Date" nullable="true"/> <column name="verification_mail_send_date" type="Date" nullable="true"/>
<column name="verification_key" type="String" nullable="true" length="10"/> <column name="verification_key" type="String" nullable="true" length="10"/>
<column name="is_account_verified" type="Boolean" nullable="true"/> <column name="is_account_verified" type="Boolean" nullable="true"/>
......
...@@ -9,6 +9,8 @@ CREATE TABLE oneit_sec_user_extension ( ...@@ -9,6 +9,8 @@ CREATE TABLE oneit_sec_user_extension (
object_created_date datetime DEFAULT getdate() NOT NULL object_created_date datetime DEFAULT getdate() NOT NULL
, object_type varchar(30) NOT NULL , , object_type varchar(30) NOT NULL ,
phone varchar(30) NULL, phone varchar(30) NULL,
forgot_password_mail_send_date datetime NULL,
forgot_password_key varchar(10) NULL,
verification_mail_send_date datetime NULL, verification_mail_send_date datetime NULL,
verification_key varchar(10) NULL, verification_key varchar(10) NULL,
is_account_verified char(1) NULL, is_account_verified char(1) NULL,
......
...@@ -10,6 +10,8 @@ CREATE TABLE oneit_sec_user_extension ( ...@@ -10,6 +10,8 @@ CREATE TABLE oneit_sec_user_extension (
object_created_date date DEFAULT SYSDATE NOT NULL object_created_date date DEFAULT SYSDATE NOT NULL
, object_type varchar2(30) NOT NULL , , object_type varchar2(30) NOT NULL ,
phone varchar2(30) NULL, phone varchar2(30) NULL,
forgot_password_mail_send_date date NULL,
forgot_password_key varchar2(10) NULL,
verification_mail_send_date date NULL, verification_mail_send_date date NULL,
verification_key varchar2(10) NULL, verification_key varchar2(10) NULL,
is_account_verified char(1) NULL, is_account_verified char(1) NULL,
......
...@@ -10,6 +10,8 @@ CREATE TABLE oneit_sec_user_extension ( ...@@ -10,6 +10,8 @@ CREATE TABLE oneit_sec_user_extension (
object_created_date timestamp DEFAULT NOW() NOT NULL object_created_date timestamp DEFAULT NOW() NOT NULL
, object_type varchar(30) NOT NULL , , object_type varchar(30) NOT NULL ,
phone varchar(30) NULL, phone varchar(30) NULL,
forgot_password_mail_send_date timestamp NULL,
forgot_password_key varchar(10) NULL,
verification_mail_send_date timestamp NULL, verification_mail_send_date timestamp NULL,
verification_key varchar(10) NULL, verification_key varchar(10) NULL,
is_account_verified char(1) NULL, is_account_verified char(1) NULL,
......
...@@ -3,6 +3,7 @@ package performa.form; ...@@ -3,6 +3,7 @@ package performa.form;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import oneit.business.content.Article;
import oneit.components.ParticipantInitialisationContext; import oneit.components.ParticipantInitialisationContext;
import oneit.email.ConfigurableEmailer; import oneit.email.ConfigurableEmailer;
import oneit.logging.*; import oneit.logging.*;
...@@ -18,7 +19,9 @@ import oneit.utils.transform.MapTransform; ...@@ -18,7 +19,9 @@ import oneit.utils.transform.MapTransform;
import oneit.utils.transform.param.ErrorTransform; import oneit.utils.transform.param.ErrorTransform;
import oneit.utils.transform.param.ORMTransform; import oneit.utils.transform.param.ORMTransform;
import oneit.utils.transform.param.PrefixCompoundTransform; import oneit.utils.transform.param.PrefixCompoundTransform;
import performa.orm.Candidate;
import performa.orm.CompanyUser; import performa.orm.CompanyUser;
import performa.utils.WebUtils;
public class ForgotPasswordFP extends SaveFP public class ForgotPasswordFP extends SaveFP
...@@ -34,7 +37,8 @@ public class ForgotPasswordFP extends SaveFP ...@@ -34,7 +37,8 @@ public class ForgotPasswordFP extends SaveFP
HttpServletRequest request = submission.getRequest(); HttpServletRequest request = submission.getRequest();
ObjectTransaction objTran = process.getTransaction(); ObjectTransaction objTran = process.getTransaction();
String email = (String) request.getParameter("email"); String email = (String) request.getParameter("email");
String nextPage = (String) request.getAttribute("nextPage");
Debug.assertion(email != null, "Email not avaialble"); Debug.assertion(email != null, "Email not avaialble");
email = StringUtils.trim(email); email = StringUtils.trim(email);
...@@ -58,22 +62,46 @@ public class ForgotPasswordFP extends SaveFP ...@@ -58,22 +62,46 @@ public class ForgotPasswordFP extends SaveFP
{ {
LogMgr.log(LOG, LogLevel.PROCESSING1, "Inside ForgotPasswordFP for send reset pasword link mail to ", email); LogMgr.log(LOG, LogLevel.PROCESSING1, "Inside ForgotPasswordFP for send reset pasword link mail to ", email);
CompanyUser companyUser = secUser.getExtensionOrCreate(CompanyUser.REFERENCE_CompanyUser); Map emailParams;
if(companyUser.getForgotPasswordKey()==null) CompanyUser companyUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
if(companyUser != null)
{ {
String resetCode = new RandomStringGen().generateHumanAlphaNum(new Integer(DEFAULT_PASSWORD_LENGTH)); if(companyUser.getForgotPasswordKey() == null)
companyUser.setForgotPasswordKey(resetCode); {
String resetCode = new RandomStringGen().generateHumanAlphaNum(new Integer(DEFAULT_PASSWORD_LENGTH));
companyUser.setForgotPasswordKey(resetCode);
}
companyUser.setForgotPasswordMailSendDate(new Date());
emailParams = CollectionUtils.mapEntry("resetcode", companyUser.getForgotPasswordKey())
.mapEntry("url", LoopbackHTTP.getRemoteAccessURL()
+ "/extensions/adminportal/reset_password.jsp"
+ "?id=" + companyUser.getID()
+ "&key=" + companyUser.getForgotPasswordKey()).toMap();
} }
else
companyUser.setForgotPasswordMailSendDate(new Date()); {
Candidate candidate = secUser.getExtension(Candidate.REFERENCE_Candidate);
Map emailParams = CollectionUtils.mapEntry("resetcode", companyUser.getForgotPasswordKey()) Article applyJobArticle = WebUtils.getArticleByShortCut(objTran, WebUtils.APPLY_JOB);
.mapEntry("url", LoopbackHTTP.getRemoteAccessURL()
+ "/extensions/adminportal/reset_password.jsp" if(candidate.getForgotPasswordKey() == null)
+ "?id=" + companyUser.getID() {
+ "&key=" + companyUser.getForgotPasswordKey()).toMap(); String resetCode = new RandomStringGen().generateHumanAlphaNum(new Integer(DEFAULT_PASSWORD_LENGTH));
candidate.setForgotPasswordKey(resetCode);
}
candidate.setForgotPasswordMailSendDate(new Date());
emailParams = CollectionUtils.mapEntry("resetcode", candidate.getForgotPasswordKey())
.mapEntry("url", LoopbackHTTP.getRemoteAccessURL(request)
+ applyJobArticle.getLink(request, CollectionUtils.EMPTY_MAP, "/")
+ "?id=" + candidate.getID()
+ "&key=" + candidate.getForgotPasswordKey()).toMap();
}
PrefixCompoundTransform compoundTransform = new PrefixCompoundTransform(); PrefixCompoundTransform compoundTransform = new PrefixCompoundTransform();
ObjectTransform defaultTransform = new MapTransform(emailParams); ObjectTransform defaultTransform = new MapTransform(emailParams);
...@@ -101,10 +129,13 @@ public class ForgotPasswordFP extends SaveFP ...@@ -101,10 +129,13 @@ public class ForgotPasswordFP extends SaveFP
throw new BusinessException("Sorry, we don't recognize that email address."); throw new BusinessException("Sorry, we don't recognize that email address.");
} }
return super.processForm(process, submission, params); process.completeAndRestart();
return new ProcessRedirectResult(nextPage, new String[0]);
} }
@Override
public void init(ParticipantInitialisationContext context) throws InitialisationException public void init(ParticipantInitialisationContext context) throws InitialisationException
{ {
super.init(context); super.init(context);
......
...@@ -8,6 +8,7 @@ import oneit.security.SecUser; ...@@ -8,6 +8,7 @@ import oneit.security.SecUser;
import oneit.servlets.forms.*; import oneit.servlets.forms.*;
import oneit.servlets.process.*; import oneit.servlets.process.*;
import oneit.utils.*; import oneit.utils.*;
import performa.orm.Candidate;
import performa.orm.CompanyUser; import performa.orm.CompanyUser;
import performa.utils.Utils; import performa.utils.Utils;
...@@ -22,13 +23,20 @@ public class ResetPasswordFP extends ORMProcessFormProcessor ...@@ -22,13 +23,20 @@ public class ResetPasswordFP extends ORMProcessFormProcessor
{ {
SecUser user = (SecUser) process.getAttribute("SecUser"); SecUser user = (SecUser) process.getAttribute("SecUser");
CompanyUser companyUser = user.getExtension(CompanyUser.REFERENCE_CompanyUser); CompanyUser companyUser = user.getExtension(CompanyUser.REFERENCE_CompanyUser);
Candidate candidate = user.getExtension(Candidate.REFERENCE_Candidate);
if(companyUser != null) if(companyUser != null)
{ {
LogMgr.log(LOG, LogLevel.PROCESSING1, "Inside ResetPasswordFP for reset pasword to ", user); LogMgr.log(LOG, LogLevel.PROCESSING1, "Inside ResetPasswordFP for Company User reset pasword to ", user);
companyUser.setForgotPasswordKey(null); companyUser.setForgotPasswordKey(null);
} }
else if (candidate != null)
{
LogMgr.log(LOG, LogLevel.PROCESSING1, "Inside ResetPasswordFP for Candidate reset pasword to ", user);
candidate.setForgotPasswordKey(null);
}
return Utils.processSuccessfulLogin(process, submission, params, user); return Utils.processSuccessfulLogin(process, submission, params, user);
} }
......
...@@ -132,4 +132,23 @@ public class Candidate extends BaseCandidate ...@@ -132,4 +132,23 @@ public class Candidate extends BaseCandidate
new ObjectTransform[] {CultureCriteriaAnswer.pipesCultureCriteriaAnswer().toObjectID()}, new ObjectTransform[] {CultureCriteriaAnswer.pipesCultureCriteriaAnswer().toObjectID()},
new Comparator[]{CollectionUtils.DEFAULT_COMPARATOR}); new Comparator[]{CollectionUtils.DEFAULT_COMPARATOR});
} }
public static Candidate getCandidateForForgotPassword(ObjectTransaction transaction, String userIDStr, String code)
{
userIDStr = StringUtils.subBlanks(userIDStr);
code = StringUtils.subBlanks(code);
if(userIDStr != null && code!=null)
{
Candidate candidate = Candidate.getCandidateByID(transaction, Long.parseLong(userIDStr));
if(candidate != null && CollectionUtils.equals(candidate.getForgotPasswordKey(), code))
{
return candidate;
}
}
return null;
}
} }
\ No newline at end of file
...@@ -13,11 +13,12 @@ ...@@ -13,11 +13,12 @@
<TABLE name="oneit_sec_user_extension" tablePrefix="object" polymorphic="TRUE"> <TABLE name="oneit_sec_user_extension" tablePrefix="object" polymorphic="TRUE">
<ATTRIB name="Phone" type="String" dbcol="phone" length="30"/> <ATTRIB name="Phone" type="String" dbcol="phone" length="30"/>
<ATTRIB name="ForgotPasswordMailSendDate" type="Date" dbcol="forgot_password_mail_send_date" />
<ATTRIB name="VerificationMailSendDate" type="Date" dbcol="verification_mail_send_date" /> <ATTRIB name="ForgotPasswordKey" type="String" dbcol="forgot_password_key" length="10"/>
<ATTRIB name="VerificationKey" type="String" dbcol="verification_key" length="10"/> <ATTRIB name="VerificationMailSendDate" type="Date" dbcol="verification_mail_send_date" />
<ATTRIB name="IsAccountVerified" type="Boolean" dbcol="is_account_verified" defaultValue="Boolean.FALSE"/> <ATTRIB name="VerificationKey" type="String" dbcol="verification_key" length="10"/>
<ATTRIB name="IsAccountVerified" type="Boolean" dbcol="is_account_verified" defaultValue="Boolean.FALSE"/>
<SINGLEREFERENCE name="TestInput" type="TestInput" dbcol="test_input_id" backreferenceName="Candidates" /> <SINGLEREFERENCE name="TestInput" type="TestInput" dbcol="test_input_id" backreferenceName="Candidates" />
<SINGLEREFERENCE name="User" type="SecUser" dbcol="user_id" backreferenceName="Extensions" inSuper='TRUE'/> <SINGLEREFERENCE name="User" type="SecUser" dbcol="user_id" backreferenceName="Extensions" inSuper='TRUE'/>
......
...@@ -44,6 +44,7 @@ public class WebUtils ...@@ -44,6 +44,7 @@ public class WebUtils
public static final String RESET_PASSWORD_ARTICLE = "ResetPasswordEmail"; public static final String RESET_PASSWORD_ARTICLE = "ResetPasswordEmail";
public static final String COMPANY_ACCOUNT_VERIFICATION = "CompanyAccountVerification"; public static final String COMPANY_ACCOUNT_VERIFICATION = "CompanyAccountVerification";
public static final String MY_DETAILS = "MyDetails"; public static final String MY_DETAILS = "MyDetails";
public static final String RESET_PASSWORD = "ResetPassword";
public static String getArticleLink(HttpServletRequest request, ObjectTransaction objTran, String articleShortcut, String renderMode) public static String getArticleLink(HttpServletRequest request, ObjectTransaction objTran, String articleShortcut, String renderMode)
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<NODE name="dynamic_content_form::APPLICANT_PORTAL" factory="Participant"> <NODE name="dynamic_content_form::APPLICANT_PORTAL" factory="Participant">
<FORM name="*.signIn" factory="Participant" class="performa.form.SignInCandidateFP"/> <FORM name="*.signIn" factory="Participant" class="performa.form.SignInCandidateFP"/>
<FORM name="*.verifyIdentity" factory="Participant" class="performa.form.VerifyIdentityFP"> <FORM name="*.verifyIdentity" factory="Participant" class="performa.form.VerifyIdentityFP">
<AccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="AccountCreatedMail"/> <AccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="AccountCreatedMail"/>
</FORM> </FORM>
<FORM name="*.completeApplication" factory="Participant" class="performa.form.CompleteApplicationFP"/> <FORM name="*.completeApplication" factory="Participant" class="performa.form.CompleteApplicationFP"/>
<FORM name="*.saveAndExitExperienece" factory="Participant" class="performa.form.SaveAndExitExperienceFP"/> <FORM name="*.saveAndExitExperienece" factory="Participant" class="performa.form.SaveAndExitExperienceFP"/>
...@@ -16,6 +16,10 @@ ...@@ -16,6 +16,10 @@
<FORM name="*.facebookOAuthLogin" factory="Participant" class="oneit.security.oauth.form.FacebookOAuthLoginFP"/> <FORM name="*.facebookOAuthLogin" factory="Participant" class="oneit.security.oauth.form.FacebookOAuthLoginFP"/>
<FORM name="*.googleOAuthLogin" factory="Participant" class="oneit.security.oauth.form.GoogleOAuthLoginFP"/> <FORM name="*.googleOAuthLogin" factory="Participant" class="oneit.security.oauth.form.GoogleOAuthLoginFP"/>
<!--<FORM name="*.linkedinOAuthLogin" factory="Participant" class="performa.form.LinkedInOAuthLoginFP"/>--> <!--<FORM name="*.linkedinOAuthLogin" factory="Participant" class="performa.form.LinkedInOAuthLoginFP"/>-->
<FORM name="*.forgotPassword" factory="Participant" class="performa.form.ForgotPasswordFP">
<ResetCodeEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="ResetCodeEmail"/>
</FORM>
<FORM name="*.resetPassword" factory="Participant" class="performa.form.ResetPasswordFP"/>
</NODE> </NODE>
<NODE name="dynamic_content_form_applicant" factory="Participant"> <NODE name="dynamic_content_form_applicant" factory="Participant">
......
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
<RenderMode name="Page" preIncludeJSP="extensions/applicantportal/job_overview.jsp"/> <RenderMode name="Page" preIncludeJSP="extensions/applicantportal/job_overview.jsp"/>
<RenderMode name="SignIn" preIncludeJSP="extensions/applicantportal/sign_in.jsp"/> <RenderMode name="SignIn" preIncludeJSP="extensions/applicantportal/sign_in.jsp"/>
<RenderMode name="ForgotPassword" preIncludeJSP="extensions/applicantportal/forgot_password.jsp"/> <RenderMode name="ForgotPassword" preIncludeJSP="extensions/applicantportal/forgot_password.jsp"/>
<RenderMode name="ResetPassword" preIncludeJSP="extensions/applicantportal/forgot_password.jsp"/>
<RenderMode name="ResetPasswordSent" preIncludeJSP="extensions/applicantportal/reset_password_sent.jsp"/>
</NODE> </NODE>
......
...@@ -53,9 +53,8 @@ ...@@ -53,9 +53,8 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<oneit:button value="Send" name="forgotPassword" cssClass="box-btn send-btn" <oneit:button value="Send" name="gotoPage" cssClass="box-btn send-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", "sign_in.jsp?sent=true") requestAttribs="<%= CollectionUtils.mapEntry("nextPage", WebUtils.getSamePageInRenderMode(request, "ResetPasswordSent"))
.mapEntry(NotificationUtils.NOTIFICATION_MSG_PARAM, "resetPasswordEmailSent")
.toMap() %>"/> .toMap() %>"/>
</div> </div>
</div> </div>
......
<%@ page extends="oneit.servlets.jsp.JSPInclude" %>
<%@ include file="/setuprequest.jsp" %>
<%@ include file="/inc/stdimports50.jsp" %><%-- This is in cougar --%>
<%@ include file="/extensions/performa/inc/stdimports.jsp" %>
<oneit:dynIncluded>
<%
ORMProcessState process = (ORMProcessState)ProcessDecorator.getDefaultProcess(request);
String candidateID = (String) process.getAttribute("candidateID"); //request.getParameter("id");
String forgotpasswordCode = (String) process.getAttribute("forgotpasswordCode"); //request.getParameter("key");
SecUser user = (SecUser) process.getAttribute("SecUser");
Article home = WebUtils.getArticleByShortCut(process.getTransaction(), WebUtils.ADMIN_HOME);
String nextPage = home.getLink(request);
if(request.getParameter("id")!=null)
{
candidateID = request.getParameter("id");
process.setAttribute("candidateID", candidateID);
}
if(request.getParameter("key")!=null)
{
forgotpasswordCode = request.getParameter("key");
process.setAttribute("forgotpasswordCode", forgotpasswordCode);
}
if(StringUtils.subBlanks(companyUserID) != null)
{
Canddate candidate = CompanyUser.getCandidateForForgotPassword(process.getTransaction(), candidateID, forgotpasswordCode);
if(candidate != null)
{
user = candidate.getUser();
// if(StringUtils.subBlanks(forgotpasswordCode) != null)
// {
// RandomStringGen random = new RandomStringGen();
//
// user.setAttribute("md5:Password", random.generateAlphaNum(8));
// }
process.setAttribute("SecUser", user);
}
}
%>
<script type="text/javascript">
$(document).ready(function() {
validate();
$('input').on('change keyup', function() { validate() });
});
function validate() {
var empty = false;
$('.password-field').each(function() {
if ( $.trim($( this ).val()) == '') {
empty = true;
}
});
if (empty) {
$('.reset-btn').attr('disabled', 'disabled');
} else {
$('.reset-btn').removeAttr('disabled');
}
}
</script>
<style>
button[disabled] {
opacity: 0.6;
background-color: #0582ba;
}
</style>
<oneit:form name="resetPassword" method="post">
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<%
if(user!=null)
{
String key = Utils.getPwdKeyOfSecUser(request, user, true);
%>
<div class="main-box-layout login-box">
<div class="text-left">
<p >
Please enter a new password below.
</p>
</div>
<div>&nbsp;</div>
<div class="form-group text-left">
<label>Password *</label>
<oneit:input type="password" name="<%= key %>" class="form-control password-field"/>
</div> <!-- form-group -->
<div class="form-group text-left">
<label>Confirm Password *</label>
<oneit:input type="password" name="<%= key + 2 %>" class="form-control password-field"/>
</div> <!-- form-group -->
<div class="col-sm-12">
<oneit:button value="Set New Password" name="resetPassword" cssClass="box-btn reset-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage).toMap() %>"/>
</div>
</div>
<%
}
else
{
%>
<h3 class="text-danger">Invalid User or this link has been expired, generate new link to access this page.</h3>
<%
}
%>
</oneit:form>
</oneit:dynIncluded>
\ No newline at end of file
<%@ page extends="oneit.servlets.jsp.JSPInclude" %>
<%@ include file="/setuprequest.jsp" %>
<%@ include file="/inc/stdimports50.jsp" %><%-- This is in cougar --%>
<%@ include file="/extensions/performa/inc/stdimports.jsp" %>
<oneit:dynIncluded>
<div class="main-verify-identity">
<div class="login-logo"><img src="<%= request.getContextPath() %>/images/logo.svg" /></div>
<div class="main-box-layout login-box">
<div class="text-left">
<p>
Enter your email address below. If we find a matching account, then you'll receive an email with a password reset link.
</p>
</div>
</div>
</div>
</oneit:dynIncluded>
\ No newline at end of file
...@@ -144,6 +144,7 @@ ...@@ -144,6 +144,7 @@
<div class="form-group"> <div class="form-group">
<oneit:button value="Forgot password?" name="gotoPage" cssClass="forgot-pass" skin="link" <oneit:button value="Forgot password?" name="gotoPage" cssClass="forgot-pass" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", WebUtils.getSamePageInRenderMode(request, "ForgotPassword")) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", WebUtils.getSamePageInRenderMode(request, "ForgotPassword"))
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap())
.toMap() %>"/> .toMap() %>"/>
<oneit:button value="Sign In" name="signIn" cssClass="box-btn sign-in-btn" <oneit:button value="Sign In" name="signIn" cssClass="box-btn sign-in-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage) requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS name="" xmlns:oneit="http://www.1iT.com.au">
<NODE name="Script" factory="Vector">
<NODE name="DDL" factory="Participant" class="oneit.sql.transfer.RedefineTableOperation">
<tableName factory="String">oneit_sec_user_extension</tableName>
<column name="forgot_password_mail_send_date" type="Date" nullable="true"/>
<column name="forgot_password_key" type="String" nullable="true" length="10"/>
</NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment