4e365fba779f60fb0c7d0b2fa94d949c8b1e4477
[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 }