[ https://issues.apache.org/jira/browse/SYNCOPE-880?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15389018#comment-15389018 ]
ASF GitHub Bot commented on SYNCOPE-880: ---------------------------------------- Github user ilgrosso commented on a diff in the pull request: https://github.com/apache/syncope/pull/26#discussion_r71833002 --- Diff: core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/Recertify.java --- @@ -0,0 +1,102 @@ +/* + * Copyright 2016 The Apache Software Foundation. + * + * Licensed 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.workflow.activiti.task; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.apache.syncope.common.lib.types.AnyTypeKind; +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.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.user.UPlainAttr; +import org.apache.syncope.core.persistence.api.entity.user.User; +import org.apache.syncope.core.workflow.activiti.ActivitiUserWorkflowAdapter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Recertify extends AbstractActivitiServiceTask { + + public static final String LAST_RECERTIFICATOR_ATTR = "lastRecertificator"; + + public static final String LAST_RECERTIFICATION_ATTR = "lastRecertification"; + + public static final String RECERTIFICATION_TIME = "identity.recertification.day.interval"; + + @Autowired + protected UserDAO userDAO; + + @Autowired + protected EntityFactory entityFactory; + + @Autowired + private PlainSchemaDAO plainSchemaDAO; + + @Autowired + protected AnyUtilsFactory anyUtilsFactory; + + private PlainSchema lastRecertificationSchema; + + private PlainSchema lastRecertificatorSchema; + + @Override + protected void doExecute(final String executionId) { + + LOG.debug("Processing Recertification {}", executionId); + User user = engine.getRuntimeService(). + getVariable(executionId, ActivitiUserWorkflowAdapter.USER, User.class); + String submitter = engine.getRuntimeService(). + getVariable(executionId, ActivitiUserWorkflowAdapter.FORM_SUBMITTER, String.class); + + LOG.debug("Saving Recertification information for user {}", user.getUsername()); + + lastRecertificatorSchema = plainSchemaDAO.find(LAST_RECERTIFICATOR_ATTR); + lastRecertificationSchema = plainSchemaDAO.find(LAST_RECERTIFICATION_ATTR); + setSchemaReadonly(false); + + + UPlainAttr recertifierAttr = entityFactory.newEntity(UPlainAttr.class); + recertifierAttr.setOwner(user); + recertifierAttr.setSchema(lastRecertificatorSchema); + + recertifierAttr.add(submitter, anyUtilsFactory.getInstance(AnyTypeKind.USER)); + + DateFormat format = new SimpleDateFormat(lastRecertificationSchema.getConversionPattern()); + String recertificationDate = format.format(new Date()); + UPlainAttr recertAttr = entityFactory.newEntity(UPlainAttr.class); + recertAttr.setOwner(user); + recertAttr.setSchema(lastRecertificationSchema); + + recertAttr.add(recertificationDate, anyUtilsFactory.getInstance(AnyTypeKind.USER)); + + user.add(recertAttr); + user.add(recertifierAttr); + + setSchemaReadonly(true); + + userDAO.save(user); + } + + private void setSchemaReadonly(final boolean readonly) { --- End diff -- This method can be removed for the same reasons stated above for static fields; however, it wasn't needed anyway as read-only attributes are meant for being managed via DAO rather than via DataBider. > Identity Recertification > ------------------------ > > Key: SYNCOPE-880 > URL: https://issues.apache.org/jira/browse/SYNCOPE-880 > Project: Syncope > Issue Type: New Feature > Components: console, core > Reporter: Nicola Scendoni > Priority: Minor > > Identify Re-certification is required for many national and international > standards like SOX, GxP, etc. > The idea is to implement one scheduled task that filter users basing on some > attributes (example: last recertification date, role,...) and move then on > one state "to be certified" and assign one task to some group that has the > responsibility to recertified the user, or delete it from the system. > Some report should report evidence about when the users have been recertified > and who was the certifier. > > This feature would be also the starting point to create account, role and > groups re-certifications. -- This message was sent by Atlassian JIRA (v6.3.4#6332)