8e5faf4ce9fe8dd627d3acbb3c8091364003844b
[aaf/authz.git] / cadi / core / src / main / java / org / onap / aaf / cadi / config / SecurityInfoC.java
1 /**
2  * ============LICENSE_START====================================================
3  * org.onap.aaf
4  * ===========================================================================
5  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
6  * ===========================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END====================================================
19  *
20  */
21
22 package org.onap.aaf.cadi.config;
23
24 import java.net.HttpURLConnection;
25 import java.util.HashMap;
26 import java.util.Map;
27
28 import org.onap.aaf.cadi.Access;
29 import org.onap.aaf.cadi.CadiException;
30 import org.onap.aaf.cadi.SecuritySetter;
31
32
33 public class SecurityInfoC<CLIENT> extends SecurityInfo {
34         public static final String DEF_ID = "ID not Set";
35         private static Map<Class<?>,SecurityInfoC<?>> sicMap = new HashMap<>();
36         public SecuritySetter<CLIENT> defSS;
37  
38
39         public SecurityInfoC(Access access) throws CadiException {
40                 super(access);
41                 defSS = new DEFSS<CLIENT>();
42         }
43         
44         @SuppressWarnings("unchecked")
45         public static synchronized <CLIENT> SecurityInfoC<CLIENT> instance(Access access, Class<CLIENT> cls) throws CadiException {
46                 SecurityInfoInit<CLIENT> sii;
47                 if(cls.isAssignableFrom(HttpURLConnection.class)) {
48                         try {
49                                 @SuppressWarnings("rawtypes")
50                                 Class<SecurityInfoInit> initCls = (Class<SecurityInfoInit>)Class.forName("org.onap.aaf.cadi.http.HSecurityInfoInit");
51                                 sii = initCls.newInstance();
52                         } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
53                                 throw new CadiException("CADI using HttpURLConnection requires cadi-client jar",e);
54                         }
55                 } else {
56                         sii = new SecurityInfoInit<CLIENT>() {
57                                 @Override
58                                 public SecuritySetter<CLIENT> bestDefault(SecurityInfoC<CLIENT> si) throws CadiException {
59                                         return new DEFSS<CLIENT>();
60                                 }
61                         }; 
62                 }
63                 
64                 SecurityInfoC<CLIENT> sic = (SecurityInfoC<CLIENT>) sicMap.get(cls);
65                 if(sic==null) {
66                         sic = new SecurityInfoC<CLIENT>(access);
67                         sic.set(sii.bestDefault(sic));
68                         sicMap.put(cls, sic);
69                 }
70                 return sic;
71         }
72
73         public SecurityInfoC<CLIENT> set(SecuritySetter<CLIENT> defSS) {
74                 this.defSS = defSS;
75                 return this;
76         }
77
78         private static class DEFSS<C> implements SecuritySetter<C> {
79                 @Override
80                 public String getID() {
81                         return DEF_ID;
82                 }
83
84                 @Override
85                 public void setSecurity(C client) throws CadiException {
86                         throw new CadiException("No Client Credentials set.");
87                 }
88
89                 @Override
90                 public int setLastResponse(int respCode) {
91                         return 0;
92                 }
93         };
94 }