@Override protected Details<AnyObjectTO> addOptionalDetailsPanel(final AnyWrapper<AnyObjectTO> modelObject) { return new AnyObjectDetails( modelObject, mode == AjaxWizard.Mode.TEMPLATE, modelObject.getInnerObject().getKey() != null, pageRef); } }
@Override public ProvisioningResult<AnyObjectTO> delete(final String key, final boolean nullPriorityAsync) { AnyObjectTO anyObject = binder.getAnyObjectTO(key); Pair<AnyObjectTO, List<LogicActions>> before = beforeDelete(anyObject); Set<String> effectiveRealms = RealmUtils.getEffective( AuthContextUtils.getAuthorizations().get(AnyEntitlement.DELETE.getFor(before.getLeft().getType())), before.getLeft().getRealm()); securityChecks(effectiveRealms, before.getLeft().getRealm(), before.getLeft().getKey()); List<PropagationStatus> statuses = provisioningManager.delete(before.getLeft().getKey(), nullPriorityAsync); AnyObjectTO anyObjectTO = new AnyObjectTO(); anyObjectTO.setKey(before.getLeft().getKey()); return afterDelete(anyObjectTO, statuses, before.getRight()); }
@Override public void onClick(final AjaxRequestTarget target, final AnyObjectTO ignore) { try { restClient.delete(model.getObject().getETagValue(), model.getObject().getKey()); SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED)); target.add(container); } catch (SyncopeClientException e) { LOG.error("While deleting object {}", model.getObject().getKey(), e); SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage()); } ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target); }
@Override public void onClick(final AjaxRequestTarget target, final AnyObjectTO ignore) { target.add(utilityModal.setContent(new AnyPropagationTasks( utilityModal, AnyTypeKind.ANY_OBJECT, model.getObject().getKey(), pageRef))); utilityModal.header(new StringResourceModel("any.propagation.tasks", model)); utilityModal.show(true); } }, ActionType.PROPAGATION_TASKS, StandardEntitlement.TASK_LIST);
@Override public void onClick(final AjaxRequestTarget target, final AnyObjectTO ignore) { target.add(utilityModal.setContent( new NotificationTasks(AnyTypeKind.ANY_OBJECT, model.getObject().getKey(), pageRef))); utilityModal.header(new StringResourceModel("any.notification.tasks", model)); utilityModal.show(true); target.add(utilityModal); } }, ActionType.NOTIFICATION_TASKS, StandardEntitlement.TASK_LIST);
@Override public Response update(final AnyObjectTO anyObjectTO) { anyObjectTO.setKey(getActualKey(getAnyDAO(), anyObjectTO.getKey())); AnyObjectTO before = logic.read(anyObjectTO.getKey()); checkETag(before.getETagValue()); ProvisioningResult<AnyObjectTO> updated = logic.update(AnyOperations.diff(anyObjectTO, before, false), isNullPriorityAsync()); return modificationResponse(updated); }
@Override public ProvisioningResult<AnyObjectTO> unassign( final String key, final Collection<String> resources, final boolean nullPriorityAsync) { // security checks AnyObjectTO anyObjectTO = binder.getAnyObjectTO(key); Set<String> effectiveRealms = RealmUtils.getEffective( AuthContextUtils.getAuthorizations().get(AnyEntitlement.UPDATE.getFor(anyObjectTO.getType())), anyObjectTO.getRealm()); securityChecks(effectiveRealms, anyObjectTO.getRealm(), anyObjectTO.getKey()); AnyObjectPatch patch = new AnyObjectPatch(); patch.setKey(key); patch.getResources().addAll(resources.stream().map(resource -> new StringPatchItem.Builder().operation(PatchOperation.DELETE).value(resource).build()). collect(Collectors.toList())); return update(patch, nullPriorityAsync); }
@Override public AnyObjectTO unlink(final String key, final Collection<String> resources) { // security checks AnyObjectTO anyObjectTO = binder.getAnyObjectTO(key); Set<String> effectiveRealms = RealmUtils.getEffective( AuthContextUtils.getAuthorizations().get(AnyEntitlement.UPDATE.getFor(anyObjectTO.getType())), anyObjectTO.getRealm()); securityChecks(effectiveRealms, anyObjectTO.getRealm(), anyObjectTO.getKey()); AnyObjectPatch patch = new AnyObjectPatch(); patch.setKey(key); patch.getResources().addAll(resources.stream().map(resource -> new StringPatchItem.Builder().operation(PatchOperation.DELETE).value(resource).build()). collect(Collectors.toList())); return binder.getAnyObjectTO(provisioningManager.unlink(patch)); }
@Override public void onClick(final AjaxRequestTarget target, final AnyObjectTO ignore) { send(AnyObjectDirectoryPanel.this, Broadcast.EXACT, new AjaxWizard.EditItemActionEvent<>( new AnyWrapper<>(new AnyObjectRestClient().read(model.getObject().getKey())), target)); } }, ActionType.EDIT,
@Override protected AnyObjectTO resolveReference(final Method method, final Object... args) throws UnresolvedReferenceException { String key = null; if (ArrayUtils.isNotEmpty(args)) { for (int i = 0; key == null && i < args.length; i++) { if (args[i] instanceof String) { key = (String) args[i]; } else if (args[i] instanceof AnyObjectTO) { key = ((AnyObjectTO) args[i]).getKey(); } else if (args[i] instanceof AnyObjectPatch) { key = ((AnyObjectPatch) args[i]).getKey(); } } } if (key != null) { try { return binder.getAnyObjectTO(key); } catch (Throwable ignore) { LOG.debug("Unresolved reference", ignore); throw new UnresolvedReferenceException(ignore); } } throw new UnresolvedReferenceException(); } }
@Override public AnyObjectTO link(final String key, final Collection<String> resources) { // security checks AnyObjectTO anyObjectTO = binder.getAnyObjectTO(key); Set<String> effectiveRealms = RealmUtils.getEffective( AuthContextUtils.getAuthorizations().get(AnyEntitlement.UPDATE.getFor(anyObjectTO.getType())), anyObjectTO.getRealm()); securityChecks(effectiveRealms, anyObjectTO.getRealm(), anyObjectTO.getKey()); AnyObjectPatch patch = new AnyObjectPatch(); patch.setKey(key); patch.getResources().addAll(resources.stream().map(resource -> new StringPatchItem.Builder().operation(PatchOperation.ADD_REPLACE).value(resource).build()). collect(Collectors.toList())); return binder.getAnyObjectTO(provisioningManager.link(patch)); }
@Override public ProvisioningResult<AnyObjectTO> assign( final String key, final Collection<String> resources, final boolean changepwd, final String password, final boolean nullPriorityAsync) { // security checks AnyObjectTO anyObjectTO = binder.getAnyObjectTO(key); Set<String> effectiveRealms = RealmUtils.getEffective( AuthContextUtils.getAuthorizations().get(AnyEntitlement.UPDATE.getFor(anyObjectTO.getType())), anyObjectTO.getRealm()); securityChecks(effectiveRealms, anyObjectTO.getRealm(), anyObjectTO.getKey()); AnyObjectPatch patch = new AnyObjectPatch(); patch.setKey(key); patch.getResources().addAll(resources.stream().map(resource -> new StringPatchItem.Builder().operation(PatchOperation.ADD_REPLACE).value(resource).build()). collect(Collectors.toList())); return update(patch, nullPriorityAsync); }
@Override public ProvisioningResult<AnyObjectTO> deprovision( final String key, final Collection<String> resources, final boolean nullPriorityAsync) { // security checks AnyObjectTO anyObjectTO = binder.getAnyObjectTO(key); Set<String> effectiveRealms = RealmUtils.getEffective( AuthContextUtils.getAuthorizations().get(AnyEntitlement.UPDATE.getFor(anyObjectTO.getType())), anyObjectTO.getRealm()); securityChecks(effectiveRealms, anyObjectTO.getRealm(), anyObjectTO.getKey()); List<PropagationStatus> statuses = provisioningManager.deprovision(key, resources, nullPriorityAsync); ProvisioningResult<AnyObjectTO> result = new ProvisioningResult<>(); result.setEntity(binder.getAnyObjectTO(key)); result.getPropagationStatuses().addAll(statuses); return result; }
@Override public ProvisioningResult<AnyObjectTO> provision( final String key, final Collection<String> resources, final boolean changePwd, final String password, final boolean nullPriorityAsync) { // security checks AnyObjectTO anyObjectTO = binder.getAnyObjectTO(key); Set<String> effectiveRealms = RealmUtils.getEffective( AuthContextUtils.getAuthorizations().get(AnyEntitlement.UPDATE.getFor(anyObjectTO.getType())), anyObjectTO.getRealm()); securityChecks(effectiveRealms, anyObjectTO.getRealm(), anyObjectTO.getKey()); List<PropagationStatus> statuses = provisioningManager.provision(key, resources, nullPriorityAsync); ProvisioningResult<AnyObjectTO> result = new ProvisioningResult<>(); result.setEntity(binder.getAnyObjectTO(key)); result.getPropagationStatuses().addAll(statuses); return result; }
} else if (modelObject instanceof AnyWrapper && AnyWrapper.class.cast(modelObject).getInnerObject() instanceof AnyObjectTO) { key = ((AnyObjectTO) ((AnyWrapper) modelObject).getInnerObject()).getKey(); } else if (modelObject instanceof Attr) { key = ((Attr) modelObject).getSchema();
@Override protected Serializable onApplyInternal(final AnyWrapper<AnyObjectTO> modelObject) { final AnyObjectTO inner = modelObject.getInnerObject(); ProvisioningResult<AnyObjectTO> result; if (inner.getKey() == null) { AnyObjectCR req = new AnyObjectCR(); EntityTOUtils.toAnyCR(inner, req); result = anyObjectRestClient.create(req); } else { fixPlainAndVirAttrs(inner, getOriginalItem().getInnerObject()); AnyObjectUR req = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false); // update just if it is changed if (req.isEmpty()) { result = new ProvisioningResult<>(); result.setEntity(inner); } else { result = anyObjectRestClient.update(getOriginalItem().getInnerObject().getETagValue(), req); } } return result; }