Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
PERFORMA_REPLICA
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Muhammad Usman
PERFORMA_REPLICA
Commits
062e43f0
Commit
062e43f0
authored
Aug 30, 2017
by
Nilu
Committed by
Harsh Shah
Sep 06, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
social media login for applicant portal
parent
09fa47d6
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
246 additions
and
30 deletions
+246
-30
PerformaOAuthCallbackDecorator.java
...pp/src/performa/utils/PerformaOAuthCallbackDecorator.java
+194
-0
PerformaSetupUserHelper.java
cmsWebApp/src/performa/utils/PerformaSetupUserHelper.java
+0
-3
CustomServlets_adminPortal.xml
...oot/extensions/adminportal/CustomServlets_adminPortal.xml
+2
-1
CustomServlets_applicantPortal.xml
...nsions/applicantportal/CustomServlets_applicantPortal.xml
+4
-3
sign_in.jsp
cmsWebApp/webroot/extensions/applicantportal/sign_in.jsp
+46
-23
No files found.
cmsWebApp/src/performa/utils/PerformaOAuthCallbackDecorator.java
0 → 100644
View file @
062e43f0
package
performa
.
utils
;
import
java.net.MalformedURLException
;
import
java.net.URL
;
import
java.util.HashMap
;
import
java.util.Map
;
import
javax.servlet.http.HttpSession
;
import
oneit.components.*
;
import
oneit.logging.LogLevel
;
import
oneit.logging.LogMgr
;
import
oneit.logging.LoggingArea
;
import
oneit.objstore.ObjectTransaction
;
import
oneit.objstore.services.TransactionServicesFactory
;
import
oneit.security.Role
;
import
oneit.security.SecUser
;
import
oneit.security.oauth.decorator.OAuthCallbackDecorator
;
import
oneit.security.oauth.utils.BaseOAuthLoginHandler
;
import
oneit.servlets.security.SessionSecUserDecorator
;
import
oneit.servlets.utils.BaseHttpServletRequest
;
import
oneit.servlets.utils.BaseHttpServletResponse
;
import
oneit.servlets.utils.decorator.ServletDecorator
;
import
oneit.servlets.utils.decorator.ServletDecoratorConfig
;
import
oneit.utils.*
;
import
performa.orm.Candidate
;
/**
* This is almost similar class to OAuthCallbackDecorator,
* except setup user extensions using redirect URL before redirect request.
*
* @see OAuthCallbackDecorator
*/
public
class
PerformaOAuthCallbackDecorator
implements
ServletDecorator
,
InitialisationParticipant
{
private
LoggingArea
LOG
=
LoggingArea
.
createLoggingArea
(
"OAuthCallbackDecorator"
);
private
TransactionServicesFactory
servicesFactory
;
public
static
final
String
REDIRECT_URL_ATTRIB_NAME
=
"oauth.returnURL"
;
public
static
final
String
TOKEN_ATTRIB_NAME
=
"oauth.token"
;
public
static
final
String
ACCESS_DENY_URL_ATTRIB_NAME
=
"oauth.accessDenyURL"
;
public
static
final
String
ACCESS_DENY_ERROR_KEY
=
"oauth.accessDenyError"
;
/**
* Map <Callback Service, Callback Handler>
*/
public
Map
handlerMap
;
@Override
public
void
processRequest
(
ServletDecoratorConfig
config
,
BaseHttpServletRequest
request
,
BaseHttpServletResponse
response
)
throws
Exception
{
String
callbackURL
=
request
.
getServletPath
();
HttpSession
session
=
request
.
getSession
();
try
{
LogMgr
.
log
(
LOG
,
LogLevel
.
DEBUG1
,
"Entering into OAuthCallbackDecorator"
);
if
(
handlerMap
!=
null
&&
handlerMap
.
containsKey
(
callbackURL
))
{
LogMgr
.
log
(
LOG
,
LogLevel
.
PROCESSING1
,
"Catching in OAuthCallbackDecorator RE for callback :: "
,
callbackURL
);
BaseOAuthLoginHandler
loginHandler
=
(
BaseOAuthLoginHandler
)
handlerMap
.
get
(
callbackURL
);
// Validate request is authorized or not.
loginHandler
.
validateRequest
(
request
);
// Create or Get Login user from oauth process
ObjectTransaction
transaction
=
new
ObjectTransaction
(
servicesFactory
);
String
fullURL
=
(
String
)
session
.
getAttribute
(
REDIRECT_URL_ATTRIB_NAME
);
try
{
SecUser
secUser
=
loginHandler
.
getOrCreateSecuser
(
request
,
transaction
);
if
(
fullURL
.
contains
(
WebUtils
.
APPLICANT_PORTAL
))
{
secUser
.
addRole
(
Role
.
searchNAME
(
secUser
.
getTransaction
(),
Utils
.
ROLE_APPLICANT
));
Candidate
candidate
=
secUser
.
getExtensionOrCreate
(
Candidate
.
REFERENCE_Candidate
);
candidate
.
setUser
(
secUser
);
}
else
if
(
fullURL
.
contains
(
WebUtils
.
ADMIN_PORTAL
))
{
secUser
.
addRole
(
Role
.
searchNAME
(
secUser
.
getTransaction
(),
Utils
.
ROLE_CLIENT
));
}
transaction
.
commit
();
transaction
.
commitResources
();
// Store user in session for login.
session
.
setAttribute
(
SecUser
.
SEC_USER_ID
,
secUser
);
session
.
setAttribute
(
SessionSecUserDecorator
.
REFRESH_SECURITY
,
Boolean
.
TRUE
);
}
finally
{
transaction
.
releaseResources
();
}
LogMgr
.
log
(
LOG
,
LogLevel
.
PROCESSING1
,
"Redirecting user to next page after login. "
,
fullURL
);
if
(
fullURL
==
null
||
fullURL
.
isEmpty
())
{
LogMgr
.
log
(
LOG
,
LogLevel
.
PROCESSING1
,
"Can't find returnURL in Session."
);
config
.
forwardRequest
(
request
,
response
);
return
;
}
// Redirect user on next page after login
request
.
setAttribute
(
"DecoratorFilter.TERMINATE"
,
"YES"
);
LogMgr
.
log
(
LOG
,
LogLevel
.
PROCESSING1
,
"Redirecting form OAuthCallbackDecorator ON :: "
+
fullURL
);
response
.
sendRedirect
(
fullURL
);
return
;
}
LogMgr
.
log
(
LOG
,
LogLevel
.
DEBUG1
,
"Exit from OAuthCallbackDecorator"
);
config
.
forwardRequest
(
request
,
response
);
}
catch
(
Exception
e
)
{
if
(
e
instanceof
BaseOAuthLoginHandler
.
LoadProfileException
)
{
LogMgr
.
log
(
LOG
,
LogLevel
.
PROCESSING1
,
e
);
Map
<
String
,
String
>
paramsMap
=
getURLParams
((
String
)
session
.
getAttribute
(
REDIRECT_URL_ATTRIB_NAME
));
if
(
StringUtils
.
subBlanks
(
paramsMap
.
get
(
ACCESS_DENY_URL_ATTRIB_NAME
))
==
null
)
{
throw
new
NestedException
(
e
);
}
request
.
setAttribute
(
"DecoratorFilter.TERMINATE"
,
"YES"
);
session
.
setAttribute
(
ACCESS_DENY_ERROR_KEY
,
e
.
getMessage
());
response
.
sendRedirect
(
paramsMap
.
get
(
ACCESS_DENY_URL_ATTRIB_NAME
));
return
;
}
LogMgr
.
log
(
LOG
,
LogLevel
.
SYSTEMERROR1
,
e
,
"Error occurred during decorator filter."
);
throw
NestedException
.
wrap
(
e
);
}
finally
{
session
.
removeAttribute
(
TOKEN_ATTRIB_NAME
);
session
.
removeAttribute
(
REDIRECT_URL_ATTRIB_NAME
);
}
}
@Override
public
void
init
(
ParticipantInitialisationContext
context
)
throws
InitialisationException
{
context
.
setObject
(
this
);
handlerMap
=
context
.
getChildMap
(
"Handler"
);
}
/**
* Get request parameters as a map, from given URL.
*
* @param urlString
* @return
*/
public
static
Map
<
String
,
String
>
getURLParams
(
String
urlString
)
{
Map
<
String
,
String
>
urlParamsMap
=
new
HashMap
<
String
,
String
>();
URL
url
;
try
{
url
=
new
URL
(
urlString
);
}
catch
(
MalformedURLException
ex
)
{
LogMgr
.
log
(
LoggingArea
.
ALL
,
LogLevel
.
SYSTEMERROR1
,
ex
,
"\n Malformed URL:"
+
urlString
);
return
urlParamsMap
;
}
String
[]
params
=
url
.
getQuery
()
!=
null
?
url
.
getQuery
().
split
(
"&"
)
:
new
String
[]
{};
for
(
String
param:
params
)
{
String
key
=
param
.
substring
(
0
,
param
.
indexOf
(
'='
));
urlParamsMap
.
put
(
key
,
param
.
substring
(
param
.
indexOf
(
'='
)
+
1
));
}
return
urlParamsMap
;
}
}
cmsWebApp/src/performa/utils/PerformaSetupUserHelper.java
View file @
062e43f0
...
@@ -11,8 +11,6 @@ public class PerformaSetupUserHelper extends SetupUserHelper
...
@@ -11,8 +11,6 @@ public class PerformaSetupUserHelper extends SetupUserHelper
public
void
setUpDefaultRole
(
SecUser
secUser
)
public
void
setUpDefaultRole
(
SecUser
secUser
)
{
{
LogMgr
.
log
(
LoggingArea
.
ALL
,
LogLevel
.
PROCESSING1
,
"Inside setUpDefaultRole in PerformaSetupUserHelper for "
,
secUser
);
LogMgr
.
log
(
LoggingArea
.
ALL
,
LogLevel
.
PROCESSING1
,
"Inside setUpDefaultRole in PerformaSetupUserHelper for "
,
secUser
);
secUser
.
addRole
(
Role
.
searchNAME
(
secUser
.
getTransaction
(),
Utils
.
ROLE_CLIENT
));
}
}
@Override
@Override
...
@@ -24,7 +22,6 @@ public class PerformaSetupUserHelper extends SetupUserHelper
...
@@ -24,7 +22,6 @@ public class PerformaSetupUserHelper extends SetupUserHelper
@Override
@Override
public
void
setUpDefaultExtensions
(
SecUser
secUser
)
public
void
setUpDefaultExtensions
(
SecUser
secUser
)
{
{
//TODO: Handle Company login
LogMgr
.
log
(
LoggingArea
.
ALL
,
LogLevel
.
PROCESSING1
,
"Inside setUpDefaultExtensions in PerformaSetupUserHelper for "
,
secUser
);
LogMgr
.
log
(
LoggingArea
.
ALL
,
LogLevel
.
PROCESSING1
,
"Inside setUpDefaultExtensions in PerformaSetupUserHelper for "
,
secUser
);
}
}
}
}
cmsWebApp/webroot/extensions/adminportal/CustomServlets_adminPortal.xml
View file @
062e43f0
...
@@ -78,9 +78,10 @@
...
@@ -78,9 +78,10 @@
<NODE
name=
"SetupUserHelper"
factory=
"Participant"
class=
"performa.utils.PerformaSetupUserHelper"
/>
<NODE
name=
"SetupUserHelper"
factory=
"Participant"
class=
"performa.utils.PerformaSetupUserHelper"
/>
<NODE
name=
"DecoratorFilter::ADMIN_PORTAL"
>
<NODE
name=
"DecoratorFilter::ADMIN_PORTAL"
>
<DECORATOR
factory=
"Participant"
class=
"
oneit.security.oauth.decorator.
OAuthCallbackDecorator"
>
<DECORATOR
factory=
"Participant"
class=
"
performa.utils.Performa
OAuthCallbackDecorator"
>
<NODE
name=
"servicesFactory"
factory=
"ConfigMgr"
system=
"CONFIG.GLOBAL"
paramname=
"TransactionServices"
/>
<NODE
name=
"servicesFactory"
factory=
"ConfigMgr"
system=
"CONFIG.GLOBAL"
paramname=
"TransactionServices"
/>
...
...
cmsWebApp/webroot/extensions/applicantportal/CustomServlets_applicantPortal.xml
View file @
062e43f0
...
@@ -13,16 +13,17 @@
...
@@ -13,16 +13,17 @@
<FORM
name=
"*.sendVerificationMail"
factory=
"Participant"
class=
"performa.form.SendVerificationMailFP"
>
<FORM
name=
"*.sendVerificationMail"
factory=
"Participant"
class=
"performa.form.SendVerificationMailFP"
>
<AccountVerificationEmailer
factory=
"Participant"
class=
"oneit.email.ConfigurableArticleTemplateEmailer"
templateShortcut=
"AccountVerificationMail"
/>
<AccountVerificationEmailer
factory=
"Participant"
class=
"oneit.email.ConfigurableArticleTemplateEmailer"
templateShortcut=
"AccountVerificationMail"
/>
</FORM>
</FORM>
<FORM
name=
"*.facebookOAuthLogin"
factory=
"Participant"
class=
"oneit.security.oauth.form.FacebookOAuthLoginFP"
/>
<FORM
name=
"*.googleOAuthLogin"
factory=
"Participant"
class=
"oneit.security.oauth.form.GoogleOAuthLoginFP"
/>
<!--<FORM name="*.linkedinOAuthLogin" factory="Participant" class="performa.form.LinkedInOAuthLoginFP"/>-->
</NODE>
</NODE>
<NODE
name=
"dynamic_content_form_applicant"
factory=
"Participant"
>
<NODE
name=
"dynamic_content_form_applicant"
factory=
"Participant"
>
<INHERITS
factory=
"Named"
nodename=
"dynamic_content_form"
/>
<INHERITS
factory=
"Named"
nodename=
"dynamic_content_form"
/>
<DECORATOR
id=
"auth"
factory=
"MetaComponent"
component=
"ApplicantPortalAuthDecorator"
priv=
"TL_AccessApplicantPortal"
/>
<DECORATOR
id=
"auth"
factory=
"MetaComponent"
component=
"ApplicantPortalAuthDecorator"
priv=
"TL_AccessApplicantPortal"
/>
</NODE>
</NODE>
<NODE
name=
"ApplicantPortalAuthDecorator"
factory=
"Participant"
class=
"oneit.servlets.utils.decorator.AuthenticatorDecorator"
>
<NODE
name=
"ApplicantPortalAuthDecorator"
factory=
"Participant"
class=
"oneit.servlets.utils.decorator.AuthenticatorDecorator"
>
<AUTHENTICATOR
factory=
"Participant"
class=
"oneit.security.SecurityAuthenticator"
>
<AUTHENTICATOR
factory=
"Participant"
class=
"oneit.security.SecurityAuthenticator"
>
<PRIVILEGE
factory=
"Parameter"
param=
"priv"
/>
<PRIVILEGE
factory=
"Parameter"
param=
"priv"
/>
...
...
cmsWebApp/webroot/extensions/applicantportal/sign_in.jsp
View file @
062e43f0
...
@@ -17,12 +17,14 @@
...
@@ -17,12 +17,14 @@
}
}
Debug.assertion(job != null, "Job is null in applicant portal");
Debug.assertion(job != null, "Job is null in applicant portal");
String socialLoginNextPage = nextPage + "&JobID=" + job.getID().toString();
%>
%>
<script type="text/javascript">
<script type="text/javascript">
$(document.body).addClass('bg-color');
$(document.body).addClass('bg-color');
$(document).ready(function() {
$(document).ready(function() {
recalcFunction = setupRecalc ($("
form
"), {'recalcOnError':true});
recalcFunction = setupRecalc ($("
#applyJob
"), {'recalcOnError':true});
$('#applyJob').on('keyup keypress', function(e) {
$('#applyJob').on('keyup keypress', function(e) {
var keyCode = e.keyCode || e.which;
var keyCode = e.keyCode || e.which;
...
@@ -76,26 +78,46 @@
...
@@ -76,26 +78,46 @@
}
}
</style>
</style>
<oneit:form name="applyJob" method="post" enctype="multipart/form-data">
<div class="main-verify-identity">
<div class="verify-aust-logo"><img src="images/australia-post.png"></div>
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="pl-verify">Please verify your identity before applying to:</div>
<div class="verify-i-title">
<oneit:toString value="<%= job.getPageTitle() %>" mode="EscapeHTML"/>
</div>
<div class="main-box-layout verify-i-setpone">
<div class="box-label">Sign in using your social network of choice</div>
<oneit:form name="socialLogin" method="post">
<ul class="social-login">
<li>
<oneit:button value=" " name="linkedinOAuthLogin" skin="link" cssClass="social_login_btn"
requestAttribs="<%= CollectionUtils.mapEntry ("nextPage", socialLoginNextPage).toMap() %>">
<img src="<%= request.getContextPath() %>/images/login-linkedin-icon.svg" />
</oneit:button>
</li>
<li>
<oneit:button value=" " name="facebookOAuthLogin" skin="link" cssClass="social_login_btn"
requestAttribs="<%= CollectionUtils.mapEntry ("nextPage", socialLoginNextPage).toMap() %>">
<img src="<%= request.getContextPath() %>/images/login-facebok-icon.svg" />
</oneit:button>
</li>
<li>
<oneit:button value=" " name="googleOAuthLogin" skin="link" cssClass="social_login_btn"
requestAttribs="<%= CollectionUtils.mapEntry ("nextPage", socialLoginNextPage).toMap() %>">
<img src="<%= request.getContextPath() %>/images/login-google.png" />
</oneit:button>
</li>
</ul>
</oneit:form>
<div class="box-br-line"><span></span></div>
<div class="main-verify-identity">
<oneit:form name="applyJob" method="post" enctype="multipart/form-data">
<div class="verify-aust-logo"><img src="images/australia-post.png"></div>
<div class="pl-verify">Please verify your identity before applying to:</div>
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="verify-i-title">
<oneit:toString value="<%= job.getPageTitle() %>" mode="EscapeHTML"/>
<div class="box-label">Or sign in via email</div>
</div>
<div class="main-box-layout verify-i-setpone">
<!-- <div class="box-label">Sign in using your social network of choice</div>
<ul class="social-login">
<li><a href="#"><img src="images/login-linkedin-icon.svg"></a></li>
<li><a href="#"><img src="images/login-facebok-icon.svg"></a></li>
<li><a href="#"><img src="images/login-google.png"></a></li>
</ul>
<div class="box-br-line"><span></span></div>-->
<!--<div class="box-label">Or sign in via email</div>-->
<div class="box-label">Sign in via email</div>
<div class="form-group text-left" id="email-div">
<div class="form-group text-left" id="email-div">
<label>Email Address</label>
<label>Email Address</label>
<oneit:ormInput obj="<%= job %>" type="text" attributeName="Email" cssClass="form-control second-style" style="text-transform: lowercase"/>
<oneit:ormInput obj="<%= job %>" type="text" attributeName="Email" cssClass="form-control second-style" style="text-transform: lowercase"/>
...
@@ -130,7 +152,7 @@
...
@@ -130,7 +152,7 @@
.toMap() %>"/>
.toMap() %>"/>
</div>
</div>
</oneit:recalcClass>
</oneit:recalcClass>
</
div
>
</
oneit:form
>
</div>
</div>
</
oneit:form
>
</
div
>
</oneit:dynIncluded>
</oneit:dynIncluded>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment