Fix for Penetration test _ Session and cookie management
[vid.git] / vid-app-common / src / main / java / org / onap / vid / services / CategoryParameterServiceWithRoles.kt
1 package org.onap.vid.services
2
3 import com.fasterxml.jackson.annotation.JsonIgnore
4 import org.onap.vid.category.CategoryParameterOptionRep
5 import org.onap.vid.category.CategoryParametersResponse
6 import org.onap.vid.model.CategoryParameter
7 import org.onap.vid.properties.Features
8 import org.onap.vid.roles.RoleProvider
9 import org.onap.vid.roles.WithPermissionPropertiesOwningEntity
10 import org.springframework.beans.factory.annotation.Qualifier
11 import org.springframework.stereotype.Service
12 import org.togglz.core.manager.FeatureManager
13 import javax.servlet.http.HttpServletRequest
14
15 @Service
16 @Qualifier("WithRoles")
17 class CategoryParameterServiceWithRoles(
18         private val categoryParameterService: CategoryParameterService,
19         private val featureManager: FeatureManager,
20         private val roleProvider: RoleProvider,
21         private val request: HttpServletRequest
22 ) : CategoryParameterService by categoryParameterService {
23
24     private val owningEntityKey = "owningEntity"
25
26     private fun shouldTreatPermissions() = featureManager.isActive(Features.FLAG_2006_LIMIT_OWNING_ENTITY_SELECTION_BY_ROLES)
27
28     override fun getCategoryParameters(familyName: CategoryParameter.Family?): CategoryParametersResponse {
29         val categoryParameters =
30                 categoryParameterService.getCategoryParameters(familyName)
31
32         return if (shouldTreatPermissions()) {
33             treatPermissions(categoryParameters)
34         } else {
35             categoryParameters
36         }
37     }
38
39     internal fun treatPermissions(categoryParametersResponse: CategoryParametersResponse): CategoryParametersResponse {
40         val extractedCategoryParameters = categoryParametersResponse.categoryParameters
41         val owningEntities = extractedCategoryParameters[owningEntityKey]
42
43         return CategoryParametersResponse(
44                 extractedCategoryParameters + (owningEntityKey to removeNonPermitted(owningEntities)))
45     }
46
47     private fun removeNonPermitted(owningEntities: MutableList<CategoryParameterOptionRep>?): List<CategoryParameterOptionRep>? {
48         val userRolesValidator = roleProvider.getUserRolesValidator(request)
49         return owningEntities
50                 ?.map { OwningEntityOptionRep(it) }
51                 ?.filter { userRolesValidator.isServicePermitted(it) }
52     }
53
54     /**
55      * Encapsulates a CategoryParameterOptionRep where id field  contains an owningEntityId
56      */
57     class OwningEntityOptionRep(option: CategoryParameterOptionRep) :
58             CategoryParameterOptionRep(option.id, option.name), WithPermissionPropertiesOwningEntity {
59         override val owningEntityId: String?
60             @JsonIgnore get() = id
61     }
62 }