Skip to content

Commit

Permalink
smal improvements for self registration - preregistered user.
Browse files Browse the repository at this point in the history
  • Loading branch information
katkav committed Nov 7, 2016
1 parent 28fcb68 commit 9121f5b
Showing 1 changed file with 66 additions and 53 deletions.
Expand Up @@ -40,7 +40,11 @@
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.prism.delta.ContainerDelta;
import com.evolveum.midpoint.prism.delta.ItemDelta;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.delta.PropertyDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.polystring.PolyString;
import com.evolveum.midpoint.prism.query.ObjectPaging;
import com.evolveum.midpoint.prism.query.ObjectQuery;
Expand Down Expand Up @@ -80,6 +84,8 @@
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;
import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType;

import net.sf.jasperreports.components.map.ItemData;

//"http://localhost:8080/midpoint/confirm/registrationid=" + newUser.getOid()
//+ "/token=" + userType.getCostCenter() + "/roleId=00000000-0000-0000-0000-000000000008";
@PageDescriptor(url = "/registration")
Expand Down Expand Up @@ -178,8 +184,7 @@ public PrismObject<UserType> run() {
}

private UserType instantiateUser(){
PrismObjectDefinition<UserType> userDef = getPrismContext().getSchemaRegistry()
.findObjectDefinitionByCompileTimeClass(UserType.class);
PrismObjectDefinition<UserType> userDef = getUserDefinition();
PrismObject<UserType> user;
try {
user = userDef.instantiate();
Expand All @@ -190,6 +195,11 @@ private UserType instantiateUser(){
}
return user.asObjectable();
}

private PrismObjectDefinition<UserType> getUserDefinition(){
return getPrismContext().getSchemaRegistry()
.findObjectDefinitionByCompileTimeClass(UserType.class);
}

private void initLayout() {

Expand Down Expand Up @@ -425,85 +435,88 @@ private void updateCaptcha(AjaxRequestTarget target) {
}

private void saveUser(Task task, OperationResult result) {
UserType userType = prepareUserToSave(task,
result);
ObjectDelta<UserType> userDelta = ObjectDelta.createAddDelta(userType.asPrismObject());

ObjectDelta<UserType> userDelta = prepareUserDelta(task, result);
userDelta.setPrismContext(getPrismContext());

WebModelServiceUtils.save(userDelta, ModelExecuteOptions.createOverwrite(), result, task, PageSelfRegistration.this);
result.computeStatus();

}

private ObjectDelta<UserType> prepareUserDelta(Task task, OperationResult result) {
if (getOidFromParams(getPageParameters()) == null) {
UserType userType = prepareUserToSave(task, result);
return ObjectDelta.createAddDelta(userType.asPrismObject());
} else {
ObjectDelta<UserType> delta = ObjectDelta.createEmptyModifyDelta(UserType.class, getOidFromParams(getPageParameters()), getPrismContext());
if (getSelfRegistrationConfiguration().getInitialLifecycleState() != null) {
delta.addModificationReplaceProperty(UserType.F_LIFECYCLE_STATE, getSelfRegistrationConfiguration().getInitialLifecycleState());
}
delta.addModificationReplaceProperty(SchemaConstants.PATH_PASSWORD_VALUE, createPassword().getValue());
delta.addModificationReplaceContainer(SchemaConstants.PATH_NONCE, createNonce(getSelfRegistrationConfiguration().getNoncePolicy(), task, result).asPrismContainerValue());
return delta;

}
}

private UserType prepareUserToSave(Task task,
OperationResult result) {

SelfRegistrationDto selfRegistrationConfiguration = getSelfRegistrationConfiguration();
UserType userType = userModel.getObject();
UserType userToSave = userType.clone();
if (selfRegistrationConfiguration.getRequiredLifecycleState() != null) {
String userLifecycle = userType.getLifecycleState();
String userLifecycle = userToSave.getLifecycleState();
if (!selfRegistrationConfiguration.getRequiredLifecycleState().equals(userLifecycle)){
getSession().error(createStringResource("PageSelfRegistration.registration.failed.unsatisfied.registration.configuration").getString());
throw new RestartResponseException(this);
}

// if (getOidFromParams(getPageParameters()) == null) {
// getSession().error(createStringResource("PageSelfRegistration.registration.failed.unsatisfied.registration.configuration").getString());
// throw new RestartResponseException(this);
// }
//
//
//// ObjectQuery query = QueryBuilder.queryFor(UserType.class, getPrismContext())
//// .item(UserType.F_EMAIL_ADDRESS).eq(userType.getEmailAddress())
//// .build();
//// SearchResultList<PrismObject<UserType>> users = null;
//// try {
//// users = getModelService().searchObjects(UserType.class, query, null, task, result);
//// } catch (SchemaException | ObjectNotFoundException | SecurityViolationException
//// | CommunicationException | ConfigurationException e) {
//// // TODO Auto-generated catch block
//// }
//
// WebModelServiceUtils.loadObject(type, oid, page, task, result)
//
// if (users == null || users.size() == 0 || users.size() > 1) {
// getSession().error(createStringResource("PageSelfRegistration.registration.failed.unsatisfied.registration.configuration").getString());
// throw new RestartResponseException(this);
//
// }
//
// PrismObject<UserType> preregisteredUser = users.iterator().next();
//
// userType.setOid(preregisteredUser.getOid());

}

CredentialsType credentials = createCredentials(selfRegistrationConfiguration.getNoncePolicy(), task, result);
userToSave.setCredentials(credentials);
if (selfRegistrationConfiguration.getInitialLifecycleState() != null) {
userToSave.setLifecycleState(selfRegistrationConfiguration.getInitialLifecycleState());
}

try {
getPrismContext().adopt(userToSave);
} catch (SchemaException e) {
// nothing to do, try without it
}

return userToSave;

}

private CredentialsType createCredentials(NonceCredentialsPolicyType noncePolicy, Task task, OperationResult result) {
NonceType nonceType = createNonce(noncePolicy, task, result);

PasswordType password = createPassword();
CredentialsType credentials = new CredentialsType();
credentials.setNonce(nonceType);
credentials.setPassword(password);
return credentials;

}

private NonceType createNonce(NonceCredentialsPolicyType noncePolicy, Task task, OperationResult result) {
ProtectedStringType nonceCredentials = new ProtectedStringType();
nonceCredentials.setClearValue(generateNonce(selfRegistrationConfiguration.getNoncePolicy(), task, result));
nonceCredentials.setClearValue(generateNonce(noncePolicy, task, result));

NonceType nonceType = new NonceType();
nonceType.setValue(nonceCredentials);

return nonceType;
}

private PasswordType createPassword() {
PasswordType password = new PasswordType();
ProtectedStringType protectedString = new ProtectedStringType();
protectedString.setClearValue(getPassword());
password.setValue(protectedString);

CredentialsType credentials = new CredentialsType();
credentials.setNonce(nonceType);
credentials.setPassword(password);

userType.setCredentials(credentials);
userType.setLifecycleState(getSelfRegistrationConfiguration().getInitialLifecycleState());

try {
getPrismContext().adopt(userType);
} catch (SchemaException e) {
// nothing to do, try without it
}

return userType;

return password;
}

private String generateNonce(NonceCredentialsPolicyType noncePolicy, Task task, OperationResult result) {
Expand Down

0 comments on commit 9121f5b

Please sign in to comment.