package eu.eudat.model.censorship; import eu.eudat.authorization.Permission; import eu.eudat.convention.ConventionService; import eu.eudat.model.Description; import eu.eudat.model.censorship.descriptionproperties.PropertyDefinitionCensor; import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.tools.data.censor.CensorFactory; import gr.cite.tools.fieldset.FieldSet; import gr.cite.tools.logging.DataLogEntry; import gr.cite.tools.logging.LoggerService; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import java.util.UUID; @Component @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class DescriptionCensor extends BaseCensor { private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DescriptionCensor.class)); protected final AuthorizationService authService; protected final CensorFactory censorFactory; public DescriptionCensor(ConventionService conventionService, AuthorizationService authService, CensorFactory censorFactory) { super(conventionService); this.authService = authService; this.censorFactory = censorFactory; } public void censor(FieldSet fields, UUID userId) { logger.debug(new DataLogEntry("censoring fields", fields)); if (fields == null || fields.isEmpty()) return; this.authService.authorizeForce(Permission.BrowseDescription, Permission.DeferredAffiliation); FieldSet descriptionReferenceFields = fields.extractPrefixed(this.asIndexerPrefix(Description._descriptionReferences)); this.censorFactory.censor(DescriptionReferenceCensor.class).censor(descriptionReferenceFields, userId); FieldSet descriptionTagsFields = fields.extractPrefixed(this.asIndexerPrefix(Description._descriptionTags)); this.censorFactory.censor(DescriptionTagCensor.class).censor(descriptionTagsFields, userId); FieldSet dmpDescriptionTemplateFields = fields.extractPrefixed(this.asIndexerPrefix(Description._dmpDescriptionTemplate)); this.censorFactory.censor(DmpDescriptionTemplateCensor.class).censor(dmpDescriptionTemplateFields, userId); FieldSet descriptionTemplateFields = fields.extractPrefixed(this.asIndexerPrefix(Description._descriptionTemplate)); this.censorFactory.censor(DescriptionTemplateCensor.class).censor(descriptionTemplateFields, userId); FieldSet dmpFields = fields.extractPrefixed(this.asIndexerPrefix(Description._dmp)); this.censorFactory.censor(DmpCensor.class).censor(dmpFields, userId); FieldSet propertiesFields = fields.extractPrefixed(this.asIndexerPrefix(Description._properties)); this.censorFactory.censor(PropertyDefinitionCensor.class).censor(propertiesFields, userId); FieldSet createdByFields = fields.extractPrefixed(this.asIndexerPrefix(Description._createdBy)); this.censorFactory.censor(UserCensor.class).censor(createdByFields, userId); } }