You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by sk...@apache.org on 2018/05/23 09:18:03 UTC
syncope git commit: [SYNCOPE-1316] Added support for ServiceNow
Repository: syncope
Updated Branches:
refs/heads/2_0_X 4f6c8afed -> 7d47e099e
[SYNCOPE-1316] Added support for ServiceNow
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/7d47e099
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/7d47e099
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/7d47e099
Branch: refs/heads/2_0_X
Commit: 7d47e099e97140ff6c265df6152a63d8041355a6
Parents: 4f6c8af
Author: skylark17 <ma...@tirasa.net>
Authored: Wed May 23 11:17:39 2018 +0200
Committer: skylark17 <ma...@tirasa.net>
Committed: Wed May 23 11:17:39 2018 +0200
----------------------------------------------------------------------
.../ServiceNowPropagationActions.java | 118 +++++++++++++++++++
pom.xml | 6 +
2 files changed, 124 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/7d47e099/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/ServiceNowPropagationActions.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/ServiceNowPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/ServiceNowPropagationActions.java
new file mode 100644
index 0000000..8091681
--- /dev/null
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/ServiceNowPropagationActions.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.provisioning.java.propagation;
+
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.ResourceOperation;
+import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidPlainAttrValueException;
+import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
+import org.apache.syncope.core.persistence.api.dao.UserDAO;
+import org.apache.syncope.core.persistence.api.entity.AnyUtils;
+import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
+import org.apache.syncope.core.persistence.api.entity.EntityFactory;
+import org.apache.syncope.core.persistence.api.entity.PlainSchema;
+import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
+import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
+import org.apache.syncope.core.persistence.api.entity.user.UPlainAttr;
+import org.apache.syncope.core.persistence.api.entity.user.User;
+import org.identityconnectors.framework.common.objects.ConnectorObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * This class is required during setup of an External Resource based on the ConnId
+ * <a href="https://github.com/Tirasa/ConnIdServiceNowBundle">ServiceNow connector</a>.
+ *
+ * It manages:
+ * <ol>
+ * <li>the User id provided by ServiceNow, which will need to be used for all subsequent operations</li>
+ * </ol>
+ */
+public class ServiceNowPropagationActions extends DefaultPropagationActions {
+
+ private static final Logger LOG = LoggerFactory.getLogger(ServiceNowPropagationActions.class);
+
+ @Autowired
+ private PlainSchemaDAO plainSchemaDAO;
+
+ @Autowired
+ private UserDAO userDAO;
+
+ @Autowired
+ private EntityFactory entityFactory;
+
+ @Autowired
+ private AnyUtilsFactory anyUtilsFactory;
+
+ protected String getServiceNowIdSchema() {
+ return "ServiceNowUserId";
+ }
+
+ @Transactional
+ @Override
+ public void after(final PropagationTask task, final TaskExec execution, final ConnectorObject afterObj) {
+ if (task.getOperation() == ResourceOperation.DELETE || task.getOperation() == ResourceOperation.NONE) {
+ return;
+ }
+
+ if (AnyTypeKind.USER.equals(task.getAnyTypeKind())) {
+
+ User user = userDAO.find(task.getEntityKey());
+ if (user == null) {
+ LOG.error("Could not find user {}, skipping", task.getEntityKey());
+ } else {
+ boolean modified = false;
+ AnyUtils anyUtils = anyUtilsFactory.getInstance(user);
+
+ // ServiceNow v1.1 User ID
+ PlainSchema userId = plainSchemaDAO.find(getServiceNowIdSchema());
+ if (userId == null) {
+ LOG.error("Could not find schema {}, skipping", getServiceNowIdSchema());
+ } else {
+ // set back the __UID__ received by ServiceNow service
+ UPlainAttr attr = user.getPlainAttr(getServiceNowIdSchema());
+ if (attr == null) {
+ attr = entityFactory.newEntity(UPlainAttr.class);
+ attr.setSchema(userId);
+ attr.setOwner(user);
+ user.add(attr);
+
+ try {
+ attr.add(afterObj.getUid().getUidValue(), anyUtils);
+ modified = true;
+ } catch (InvalidPlainAttrValueException e) {
+ LOG.error("Invalid value for attribute {}: {}",
+ userId.getKey(), afterObj.getUid().getUidValue(), e);
+ }
+ } else {
+ LOG.debug("User {} has already {} assigned: {}",
+ user, userId.getKey(), attr.getValuesAsStrings());
+ }
+ }
+
+ if (modified) {
+ userDAO.save(user);
+ }
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/7d47e099/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 742f470..6e39989 100644
--- a/pom.xml
+++ b/pom.xml
@@ -366,6 +366,7 @@ under the License.
<connid.googleapps.version>1.4.1</connid.googleapps.version>
<connid.azure.version>1.0.1</connid.azure.version>
<connid.scimv11.version>1.0.0</connid.scimv11.version>
+ <connid.servicenow.version>1.0.0-SNAPSHOT</connid.servicenow.version>
<cxf.version>3.1.16-SNAPSHOT</cxf.version>
@@ -1858,6 +1859,11 @@ under the License.
<artifactId>net.tirasa.connid.bundles.scimv11</artifactId>
<version>${connid.scimv11.version}</version>
</artifactItem>
+ <artifactItem>
+ <groupId>net.tirasa.connid.bundles</groupId>
+ <artifactId>net.tirasa.connid.bundles.servicenow</artifactId>
+ <version>${connid.servicenow.version}</version>
+ </artifactItem>
</artifactItems>
</configuration>
</plugin>