public UserCloningResult cloneUser(long templateUserId, String newUsername,
String newPassword, String newEmail, String newPublicKey,
String subsystemForEmailIdentifier) {
UICloneUserRequest request = new UICloneUserRequest();
request.setTemplateUserId(templateUserId);
request.setUsername(newUsername);
request.setEmail(newEmail);
request.setSalt(saltSource.getSalt(newUsername));
request.setHotpSalt(hotpSaltGenerator.generate());
request.setPassword(passwordEncoder.encode(newPassword, request.getSalt()));
request.setPublicKey(newPublicKey);
RoutineResult result = createUserStrategy.cloneUser(request);
UserCloningResult userCloningResult = new UserCloningResult();
if (request.getId() != null) {
userCloningResult.setCloneId(request.getId());
}
if (result.isOk()) {
try {
hotpService.sendTableIfSupported(subsystemForEmailIdentifier, request.getId());
} catch (MessageSendException e) {
userCloningResult.setMailSendError(e.getMessage());
}
notificationService.notifyAboutUsersChanged();
}
loggerSink.info(logger, "CLONE_USER", result.isOk(), String.format("%s->%s", templateUserId, newUsername));
return userCloningResult;
}