3a2cb0926cb876fa97073b2b6b106a69955fca88
[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 import com.google.gson.reflect.TypeToken;
32
33 import java.lang.reflect.Type;
34 import java.util.Date;
35 import java.util.List;
36
37 import javax.servlet.http.HttpServletRequest;
38
39 import org.apache.camel.Produce;
40 import org.onap.clamp.clds.camel.CamelProxy;
41 import org.onap.clamp.clds.model.CldsInfo;
42 import org.onap.clamp.clds.model.sdc.SdcServiceInfo;
43 import org.onap.clamp.clds.util.LoggingUtils;
44 import org.onap.clamp.clds.util.ONAPLogConstants;
45 import org.slf4j.event.Level;
46 import org.springframework.beans.factory.annotation.Autowired;
47 import org.springframework.beans.factory.annotation.Value;
48 import org.springframework.stereotype.Component;
49
50 /**
51  * Service to save and retrieve the CLDS model attributes.
52  */
53 @Component
54 public class CldsService extends SecureServiceBase {
55
56     /**
57      * The constant LIST_OF_SDC_SERVICE_INFO_TYPE.
58      */
59     public static final Type LIST_OF_SDC_SERVICE_INFO_TYPE = new TypeToken<List<SdcServiceInfo>>() {
60     }.getType();
61     @Produce(uri = "direct:processSubmit")
62     private CamelProxy camelProxy;
63     /**
64      * The constant securityLogger.
65      */
66     protected static final EELFLogger securityLogger = EELFManager.getInstance().getSecurityLogger();
67     /**
68      * The constant logger.
69      */
70     protected static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsService.class);
71
72     private final String cldsPermissionTypeFilterVf;
73     private final String cldsPermissionInstance;
74     /**
75      * The Permission read cl.
76      */
77     final SecureServicePermission permissionReadCl;
78     /**
79      * The Permission update cl.
80      */
81     final SecureServicePermission permissionUpdateCl;
82     /**
83      * The Permission read template.
84      */
85     final SecureServicePermission permissionReadTemplate;
86     /**
87      * The Permission update template.
88      */
89     final SecureServicePermission permissionUpdateTemplate;
90     /**
91      * The Permission read tosca.
92      */
93     final SecureServicePermission permissionReadTosca;
94     /**
95      * The Permission update tosca.
96      */
97     final SecureServicePermission permissionUpdateTosca;
98
99     private LoggingUtils util = new LoggingUtils(logger);
100
101     @Autowired
102     private HttpServletRequest request;
103
104     /**
105      * Instantiates a new Clds service.
106      *
107      * @param cldsPersmissionTypeCl      the clds persmission type cl
108      * @param cldsPermissionTypeClManage the clds permission type cl manage
109      * @param cldsPermissionTypeClEvent  the clds permission type cl event
110      * @param cldsPermissionTypeFilterVf the clds permission type filter vf
111      * @param cldsPermissionTypeTemplate the clds permission type template
112      * @param cldsPermissionTypeTosca    the clds permission type tosca
113      * @param cldsPermissionInstance     the clds permission instance
114      */
115     @Autowired
116     public CldsService(
117             @Value("${clamp.config.security.permission.type.cl:permission-type-cl}") String cldsPersmissionTypeCl,
118             @Value("${clamp.config.security.permission.type.cl.manage:permission-type-cl-manage}") String cldsPermissionTypeClManage,
119             @Value("${clamp.config.security.permission.type.cl.event:permission-type-cl-event}") String cldsPermissionTypeClEvent,
120             @Value("${clamp.config.security.permission.type.filter.vf:permission-type-filter-vf}") String cldsPermissionTypeFilterVf,
121             @Value("${clamp.config.security.permission.type.template:permission-type-template}") String cldsPermissionTypeTemplate,
122             @Value("${clamp.config.security.permission.type.tosca:permission-type-tosca}") String cldsPermissionTypeTosca,
123             @Value("${clamp.config.security.permission.instance:dev}") String cldsPermissionInstance) {
124         this.cldsPermissionTypeFilterVf = cldsPermissionTypeFilterVf;
125         this.cldsPermissionInstance = cldsPermissionInstance;
126         permissionReadCl = SecureServicePermission.create(cldsPersmissionTypeCl, cldsPermissionInstance, "read");
127         permissionUpdateCl = SecureServicePermission.create(cldsPersmissionTypeCl, cldsPermissionInstance, "update");
128         permissionReadTemplate = SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance,
129                 "read");
130         permissionUpdateTemplate = SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance,
131                 "update");
132         permissionReadTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "read");
133         permissionUpdateTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance,
134                 "update");
135     }
136
137     /**
138      * Gets clds info. CLDS IFO service will return 3 things 1. User Name 2. CLDS
139      * code version that is currently installed from pom.xml file 3. User
140      * permissions
141      * 
142      * @return the clds info
143      */
144     public CldsInfo getCldsInfo() {
145         util.entering(request, "CldsService: GET cldsInfo");
146         final Date startTime = new Date();
147         LoggingUtils.setTimeContext(startTime, new Date());
148
149         CldsInfoProvider cldsInfoProvider = new CldsInfoProvider(this);
150         final CldsInfo cldsInfo = cldsInfoProvider.getCldsInfo();
151
152         // audit log
153         LoggingUtils.setTimeContext(startTime, new Date());
154         securityLogger.info("GET cldsInfo completed");
155         util.exiting("200", "Get cldsInfo success", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
156         return cldsInfo;
157     }
158
159     /**
160      * Determine if the user is authorized for a particular VF by its invariant
161      * UUID.
162      *
163      * @param vfInvariantUuid the vf invariant uuid
164      * @return boolean or throws NotAuthorizedException
165      */
166     public boolean isAuthorizedForVf(String vfInvariantUuid) {
167         if (cldsPermissionTypeFilterVf != null && !cldsPermissionTypeFilterVf.isEmpty()) {
168             SecureServicePermission permission = SecureServicePermission.create(cldsPermissionTypeFilterVf,
169                     cldsPermissionInstance, vfInvariantUuid);
170             return isAuthorized(permission);
171         } else {
172             // if CLDS_PERMISSION_TYPE_FILTER_VF property is not provided, then
173             // VF filtering is turned off
174             logger.warn("VF filtering turned off");
175             return true;
176         }
177     }
178
179     /**
180      * Sets logging util.
181      *
182      * @param utilP the util p
183      */
184     // Created for the integration test
185     public void setLoggingUtil(LoggingUtils utilP) {
186         util = utilP;
187     }
188 }