3b84e360c1b56d6b816ea30e7b342504f84bc64b
[clamp.git] / src / main / java / org / onap / clamp / clds / service / CldsService.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP CLAMP
4  * ================================================================================
5  * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights
6  *                             reserved.
7  * ================================================================================
8  * Modifications Copyright (c) 2019 Samsung
9  * ================================================================================
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  * http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  * ============LICENSE_END============================================
22  * Modifications copyright (c) 2018 Nokia
23  * ===================================================================
24  *
25  */
26
27 package org.onap.clamp.clds.service;
28
29 import com.att.eelf.configuration.EELFLogger;
30 import com.att.eelf.configuration.EELFManager;
31
32 import java.util.Date;
33
34 import javax.servlet.http.HttpServletRequest;
35
36 import org.onap.clamp.clds.model.CldsInfo;
37 import org.onap.clamp.clds.util.LoggingUtils;
38 import org.onap.clamp.clds.util.OnapLogConstants;
39 import org.slf4j.event.Level;
40 import org.springframework.beans.factory.annotation.Autowired;
41 import org.springframework.beans.factory.annotation.Value;
42 import org.springframework.stereotype.Component;
43
44 /**
45  * Service to save and retrieve the CLDS model attributes.
46  */
47 @Component
48 public class CldsService extends SecureServiceBase {
49
50     /**
51      * The constant securityLogger.
52      */
53     protected static final EELFLogger securityLogger = EELFManager.getInstance().getSecurityLogger();
54     /**
55      * The constant logger.
56      */
57     protected static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsService.class);
58
59     private final String cldsPermissionTypeFilterVf;
60     private final String cldsPermissionInstance;
61     /**
62      * The Permission read cl.
63      */
64     final SecureServicePermission permissionReadCl;
65     /**
66      * The Permission update cl.
67      */
68     final SecureServicePermission permissionUpdateCl;
69     /**
70      * The Permission read template.
71      */
72     final SecureServicePermission permissionReadTemplate;
73     /**
74      * The Permission update template.
75      */
76     final SecureServicePermission permissionUpdateTemplate;
77     /**
78      * The Permission read tosca.
79      */
80     final SecureServicePermission permissionReadTosca;
81     /**
82      * The Permission update tosca.
83      */
84     final SecureServicePermission permissionUpdateTosca;
85
86     private LoggingUtils util = new LoggingUtils(logger);
87
88     @Autowired
89     private HttpServletRequest request;
90
91     /**
92      * Instantiates a new Clds service.
93      *
94      * @param cldsPersmissionTypeCl      the clds persmission type cl
95      * @param cldsPermissionTypeClManage the clds permission type cl manage
96      * @param cldsPermissionTypeClEvent  the clds permission type cl event
97      * @param cldsPermissionTypeFilterVf the clds permission type filter vf
98      * @param cldsPermissionTypeTemplate the clds permission type template
99      * @param cldsPermissionTypeTosca    the clds permission type tosca
100      * @param cldsPermissionInstance     the clds permission instance
101      */
102     @Autowired
103     public CldsService(
104             @Value("${clamp.config.security.permission.type.cl:permission-type-cl}") String cldsPersmissionTypeCl,
105             @Value("${clamp.config.security.permission.type.cl.manage:permission-type-cl-manage}")
106                     String cldsPermissionTypeClManage,
107             @Value("${clamp.config.security.permission.type.cl.event:permission-type-cl-event}")
108                     String cldsPermissionTypeClEvent,
109             @Value("${clamp.config.security.permission.type.filter.vf:permission-type-filter-vf}")
110                     String cldsPermissionTypeFilterVf,
111             @Value("${clamp.config.security.permission.type.template:permission-type-template}")
112                     String cldsPermissionTypeTemplate,
113             @Value("${clamp.config.security.permission.type.tosca:permission-type-tosca}")
114                     String cldsPermissionTypeTosca,
115             @Value("${clamp.config.security.permission.instance:dev}") String cldsPermissionInstance) {
116         this.cldsPermissionTypeFilterVf = cldsPermissionTypeFilterVf;
117         this.cldsPermissionInstance = cldsPermissionInstance;
118         permissionReadCl = SecureServicePermission.create(cldsPersmissionTypeCl, cldsPermissionInstance, "read");
119         permissionUpdateCl = SecureServicePermission.create(cldsPersmissionTypeCl, cldsPermissionInstance, "update");
120         permissionReadTemplate = SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance,
121                 "read");
122         permissionUpdateTemplate = SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance,
123                 "update");
124         permissionReadTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "read");
125         permissionUpdateTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance,
126                 "update");
127     }
128
129     /**
130      * Gets clds info. CLDS IFO service will return 3 things 1. User Name 2. CLDS
131      * code version that is currently installed from pom.xml file 3. User
132      * permissions
133      *
134      * @return the clds info
135      */
136     public CldsInfo getCldsInfo() {
137         util.entering(request, "CldsService: GET cldsInfo");
138         final Date startTime = new Date();
139         LoggingUtils.setTimeContext(startTime, new Date());
140
141         CldsInfoProvider cldsInfoProvider = new CldsInfoProvider(this);
142         final CldsInfo cldsInfo = cldsInfoProvider.getCldsInfo();
143
144         // audit log
145         LoggingUtils.setTimeContext(startTime, new Date());
146         securityLogger.info("GET cldsInfo completed");
147         util.exiting("200", "Get cldsInfo success", Level.INFO, OnapLogConstants.ResponseStatus.COMPLETED);
148         return cldsInfo;
149     }
150
151     /**
152      * Determine if the user is authorized for a particular VF by its invariant
153      * UUID.
154      *
155      * @param vfInvariantUuid the vf invariant uuid
156      * @return boolean or throws NotAuthorizedException
157      */
158     public boolean isAuthorizedForVf(String vfInvariantUuid) {
159         if (cldsPermissionTypeFilterVf != null && !cldsPermissionTypeFilterVf.isEmpty()) {
160             SecureServicePermission permission = SecureServicePermission.create(cldsPermissionTypeFilterVf,
161                     cldsPermissionInstance, vfInvariantUuid);
162             return isAuthorized(permission);
163         } else {
164             // if CLDS_PERMISSION_TYPE_FILTER_VF property is not provided, then
165             // VF filtering is turned off
166             logger.warn("VF filtering turned off");
167             return true;
168         }
169     }
170
171     /**
172      * Sets logging util.
173      *
174      * @param utilP the util p
175      */
176     // Created for the integration test
177     public void setLoggingUtil(LoggingUtils utilP) {
178         util = utilP;
179     }
180 }