use of org.wso2.carbon.humantask.core.engine.commands.Claim in project carbon-business-process by wso2.
the class TaskOperationsImpl method claim.
/**
* Claim responsibility for a task, i.e. set the task to status Reserved
* @param taskIdURI : task identifier
* @throws IllegalStateFault
* @throws IllegalOperationFault
* @throws IllegalArgumentFault
* @throws IllegalAccessFault
*/
public void claim(final URI taskIdURI) throws IllegalStateFault, IllegalOperationFault, IllegalArgumentFault, IllegalAccessFault {
try {
final Long taskId = validateTaskId(taskIdURI);
HumanTaskServiceComponent.getHumanTaskServer().getTaskEngine().getScheduler().execTransaction(new Callable<Object>() {
public Object call() throws Exception {
HumanTaskCommand claim = new Claim(getCaller(), taskId);
claim.execute();
return null;
}
});
} catch (Exception ex) {
handleException(ex);
}
}
use of org.wso2.carbon.humantask.core.engine.commands.Claim in project carbon-business-process by wso2.
the class UserSubstitutionUtils method handleScheduledEventByTenant.
public static synchronized boolean handleScheduledEventByTenant(int tenantId) {
boolean result = true;
TransitivityResolver resolver = SubstitutionDataHolder.getInstance().getTransitivityResolver();
ActivitiDAO activitiDAO = SubstitutionDataHolder.getInstance().getActivitiDAO();
if (SubstitutionDataHolder.getInstance().isTransitivityEnabled()) {
// update transitives, only the map is updated here
result = resolver.resolveTransitiveSubs(true, tenantId);
} else {
resolver.subsMap = activitiDAO.selectActiveSubstitutesByTenant(tenantId, new Date(System.currentTimeMillis()));
}
// flush into db
for (Map.Entry<String, SubstitutesDataModel> entry : resolver.subsMap.entrySet()) {
// go through the updated map
SubstitutesDataModel model = entry.getValue();
try {
// set carbon context
PrivilegedCarbonContext.startTenantFlow();
PrivilegedCarbonContext context = PrivilegedCarbonContext.getThreadLocalCarbonContext();
context.setUsername(model.getUser());
context.setTenantId(tenantId, true);
if (SubstitutionDataHolder.getInstance().isTransitivityEnabled()) {
activitiDAO.updateSubstituteInfo(model);
}
if (!BPMNConstants.BULK_REASSIGN_PROCESSED.equals(model.getTaskList())) {
// active substitution, not yet bulk reassigned
String sub = getActualSubstitute(model);
if (model.getTaskList() == null) {
// reassign all
if (sub != null) {
bulkReassign(model.getUser(), sub, null);
} else {
// transitivity undefined, assign to task owner or un-claim
assignToTaskOwner(model.getUser(), null);
}
} else {
List<String> taskList = getTaskListFromString(model.getTaskList());
if (sub != null) {
bulkReassign(model.getUser(), sub, taskList);
} else {
// transitivity undefined, assign to task owner or un-claim
assignToTaskOwner(model.getUser(), taskList);
}
}
model.setTaskList(BPMNConstants.BULK_REASSIGN_PROCESSED);
activitiDAO.updateSubstituteInfo(model);
}
} finally {
PrivilegedCarbonContext.endTenantFlow();
PrivilegedCarbonContext.destroyCurrentContext();
}
}
// disable expired records
disableExpiredRecords(tenantId);
return result;
}
use of org.wso2.carbon.humantask.core.engine.commands.Claim in project carbon-business-process by wso2.
the class BPSUserIdentityManager method transformQueryToClaim.
private List<Claim> transformQueryToClaim(UserQueryImpl userQuery) {
List<Claim> claimList = new ArrayList<Claim>();
if (userQuery.getEmail() != null) {
Claim claim = new Claim();
claim.setClaimUri(EMAIL_CLAIM_URI);
claim.setValue(userQuery.getEmail());
claimList.add(claim);
}
if (userQuery.getEmailLike() != null) {
Claim claim = new Claim();
claim.setClaimUri(EMAIL_CLAIM_URI);
claim.setValue("*" + userQuery.getEmailLike() + "*");
claimList.add(claim);
}
if (userQuery.getFirstName() != null) {
Claim claim = new Claim();
claim.setClaimUri(FIRST_NAME_CLAIM_URI);
claim.setValue(userQuery.getFirstName());
claimList.add(claim);
}
if (userQuery.getFirstNameLike() != null) {
Claim claim = new Claim();
claim.setClaimUri(FIRST_NAME_CLAIM_URI);
claim.setValue("*" + userQuery.getFirstNameLike() + "*");
claimList.add(claim);
}
if (userQuery.getFullNameLike() != null) {
Claim claim = new Claim();
claim.setClaimUri(FULL_NAME_CLAIM_URI);
claim.setValue("*" + userQuery.getFullNameLike() + "*");
claimList.add(claim);
}
if (userQuery.getGroupId() != null) {
Claim claim = new Claim();
claim.setClaimUri(ROLE_CLAIM_URI);
claim.setValue(userQuery.getGroupId());
claimList.add(claim);
}
if (userQuery.getId() != null) {
Claim claim = new Claim();
claim.setClaimUri(ID_CLAIM_URI);
claim.setValue(userQuery.getId());
claimList.add(claim);
}
if (userQuery.getLastName() != null) {
Claim claim = new Claim();
claim.setClaimUri(LAST_NAME_CLAIM_URI);
claim.setValue(userQuery.getLastName());
claimList.add(claim);
}
if (userQuery.getLastNameLike() != null) {
Claim claim = new Claim();
claim.setClaimUri(LAST_NAME_CLAIM_URI);
claim.setValue("*" + userQuery.getLastNameLike() + "*");
claimList.add(claim);
}
return claimList;
}
use of org.wso2.carbon.humantask.core.engine.commands.Claim in project identity-outbound-auth-sms-otp by wso2-extensions.
the class SMSOTPAuthenticator method initiateAuthenticationRequest.
/**
* Initiate the authentication request.
*/
@Override
protected void initiateAuthenticationRequest(HttpServletRequest request, HttpServletResponse response, AuthenticationContext context) throws AuthenticationFailedException {
try {
String username;
AuthenticatedUser authenticatedUser;
String mobileNumber;
String tenantDomain = context.getTenantDomain();
context.setProperty(SMSOTPConstants.AUTHENTICATION, SMSOTPConstants.AUTHENTICATOR_NAME);
if (!tenantDomain.equals(SMSOTPConstants.SUPER_TENANT)) {
IdentityHelperUtil.loadApplicationAuthenticationXMLFromRegistry(context, getName(), tenantDomain);
}
FederatedAuthenticatorUtil.setUsernameFromFirstStep(context);
username = String.valueOf(context.getProperty(SMSOTPConstants.USER_NAME));
authenticatedUser = (AuthenticatedUser) context.getProperty(SMSOTPConstants.AUTHENTICATED_USER);
// find the authenticated user.
if (authenticatedUser == null) {
if (log.isDebugEnabled()) {
log.debug("Authentication failed: Could not find the authenticated user. ");
}
throw new AuthenticationFailedException("Authentication failed: Cannot proceed further without identifying the user. ");
}
boolean isSMSOTPMandatory = SMSOTPUtils.isSMSOTPMandatory(context, getName());
boolean isUserExists = FederatedAuthenticatorUtil.isUserExistInUserStore(username);
String queryParams = FrameworkUtils.getQueryStringWithFrameworkContextId(context.getQueryParams(), context.getCallerSessionKey(), context.getContextIdentifier());
String errorPage = getErrorPage(context);
// SMS OTP authentication is mandatory and user doesn't disable SMS OTP claim in user's profile.
if (isSMSOTPMandatory) {
if (log.isDebugEnabled()) {
log.debug("SMS OTP is mandatory. Hence processing in mandatory path");
}
processSMSOTPMandatoryCase(context, request, response, queryParams, username, isUserExists);
} else if (isUserExists && !SMSOTPUtils.isSMSOTPDisableForLocalUser(username, context, getName())) {
if (context.isRetrying() && !Boolean.parseBoolean(request.getParameter(SMSOTPConstants.RESEND))) {
checkStatusCode(response, context, queryParams, errorPage);
} else {
mobileNumber = getMobileNumber(request, response, context, username, tenantDomain, queryParams);
if (StringUtils.isNotEmpty(mobileNumber)) {
proceedWithOTP(response, context, errorPage, mobileNumber, queryParams, username);
}
}
} else {
processFirstStepOnly(authenticatedUser, context);
}
} catch (SMSOTPException e) {
throw new AuthenticationFailedException("Failed to get the parameters from authentication xml fie. ", e);
} catch (UserStoreException e) {
throw new AuthenticationFailedException("Failed to get the user from User Store. ", e);
}
}
use of org.wso2.carbon.humantask.core.engine.commands.Claim in project identity-outbound-auth-sms-otp by wso2-extensions.
the class SMSOTPAuthenticator method checkWithBackUpCodes.
/**
* If user forgets the mobile, then user can use the back up codes to authenticate the user.
*
* @param context the AuthenticationContext
* @param userToken the userToken
* @param authenticatedUser the name of authenticatedUser
* @throws AuthenticationFailedException
*/
private void checkWithBackUpCodes(AuthenticationContext context, String userToken, AuthenticatedUser authenticatedUser) throws AuthenticationFailedException {
String savedOTPString = null;
String username = context.getProperty(SMSOTPConstants.USER_NAME).toString();
String tenantAwareUsername = MultitenantUtils.getTenantAwareUsername(username);
UserRealm userRealm = getUserRealm(username);
try {
if (userRealm != null) {
savedOTPString = userRealm.getUserStoreManager().getUserClaimValue(tenantAwareUsername, SMSOTPConstants.SAVED_OTP_LIST, null);
}
if (StringUtils.isEmpty(savedOTPString)) {
if (log.isDebugEnabled()) {
log.debug("The claim " + SMSOTPConstants.SAVED_OTP_LIST + " does not contain any values");
}
throw new AuthenticationFailedException("The claim " + SMSOTPConstants.SAVED_OTP_LIST + " does not contain any values");
} else if (savedOTPString.contains(userToken)) {
if (log.isDebugEnabled()) {
log.debug("Found saved backup SMS OTP for user :" + authenticatedUser);
}
context.setSubject(authenticatedUser);
savedOTPString = savedOTPString.replaceAll(userToken, "").replaceAll(",,", ",");
userRealm.getUserStoreManager().setUserClaimValue(tenantAwareUsername, SMSOTPConstants.SAVED_OTP_LIST, savedOTPString, null);
} else {
if (log.isDebugEnabled()) {
log.debug("User entered OTP :" + userToken + " does not match with any of the saved backup codes");
}
throw new AuthenticationFailedException("Verification Error due to Code " + userToken + " mismatch.");
}
} catch (UserStoreException e) {
throw new AuthenticationFailedException("Cannot find the user claim for OTP list for user : " + authenticatedUser, e);
}
}
Aggregations