Simplify AaaCertProvider.getCipherSuites()
[aaa.git] / aaa-cert / src / main / java / org / opendaylight / aaa / cert / impl / AaaCertProvider.java
1 /*
2  * Copyright (c) 2015, 2017 Inocybe Technologies. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.aaa.cert.impl;
9
10 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
11 import java.security.KeyStore;
12 import org.opendaylight.aaa.cert.api.IAaaCertProvider;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.CtlKeystore;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.TrustKeystore;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.ctlkeystore.CipherSuites;
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
18
19 /**
20  * AaaCertProvider use to manage the certificates manipulation operations add,
21  * revoke and update.
22  *
23  * @author mserngawy
24  *
25  */
26 public class AaaCertProvider implements IAaaCertProvider {
27
28     private static final Logger LOG = LoggerFactory.getLogger(AaaCertProvider.class);
29
30     private final CtlKeystore ctlKeyStore;
31     private final ODLKeyTool odlKeyTool;
32     private final TrustKeystore trustKeyStore;
33
34     public AaaCertProvider(final CtlKeystore ctlKeyStore, final TrustKeystore trustKeyStore) {
35         odlKeyTool = new ODLKeyTool();
36         this.ctlKeyStore = ctlKeyStore;
37         this.trustKeyStore = trustKeyStore;
38         LOG.info("aaa Certificate Service Initalized");
39     }
40
41     @Override
42     public TrustKeystore getTrustKeyStoreInfo() {
43         return trustKeyStore;
44     }
45
46     @Override
47     public CtlKeystore getOdlKeyStoreInfo() {
48         return ctlKeyStore;
49     }
50
51     @Override
52     public boolean addCertificateODLKeyStore(final String storePasswd, final String alias, final String certificate) {
53         final KeyStore keyStore = odlKeyTool.addCertificate(odlKeyTool.loadKeyStore(ctlKeyStore.getName(), storePasswd),
54                 certificate, alias, true);
55         return odlKeyTool.exportKeystore(keyStore, storePasswd, ctlKeyStore.getName());
56     }
57
58     @Override
59     public boolean addCertificateODLKeyStore(final String alias, final String certificate) {
60         return addCertificateODLKeyStore(ctlKeyStore.getStorePassword(), alias, certificate);
61     }
62
63     @Override
64     public boolean addCertificateTrustStore(final String storePasswd, final String alias, final String certificate) {
65         final KeyStore keyStore = odlKeyTool.addCertificate(
66                 odlKeyTool.loadKeyStore(trustKeyStore.getName(), storePasswd), certificate, alias, true);
67         return odlKeyTool.exportKeystore(keyStore, storePasswd, trustKeyStore.getName());
68     }
69
70     @Override
71     public boolean addCertificateTrustStore(final String alias, final String certificate) {
72         return addCertificateTrustStore(trustKeyStore.getStorePassword(), alias, certificate);
73     }
74
75     @Override
76     public boolean createKeyStores() {
77         if (!KeyStoreConstant.checkKeyStoreFile(ctlKeyStore.getName())) {
78             final KeyStore keyStore = odlKeyTool.createKeyStoreWithSelfSignCert(ctlKeyStore.getName(),
79                     ctlKeyStore.getStorePassword(), ctlKeyStore.getDname(), ctlKeyStore.getAlias(),
80                     ctlKeyStore.getValidity(), ctlKeyStore.getKeyAlg(), ctlKeyStore.getKeysize(),
81                     ctlKeyStore.getSignAlg());
82             if (!odlKeyTool.exportKeystore(keyStore, ctlKeyStore.getStorePassword(), ctlKeyStore.getName())) {
83                 return false;
84             }
85         }
86         if (!KeyStoreConstant.checkKeyStoreFile(trustKeyStore.getName())) {
87             final KeyStore keyStore = odlKeyTool.createEmptyKeyStore(trustKeyStore.getStorePassword());
88             if (!odlKeyTool.exportKeystore(keyStore, trustKeyStore.getStorePassword(), trustKeyStore.getName())) {
89                 return false;
90             }
91         }
92         return true;
93     }
94
95     @Override
96     public String genODLKeyStoreCertificateReq(final String storePasswd, final boolean withTag) {
97         return odlKeyTool.generateCertificateReq(odlKeyTool.loadKeyStore(ctlKeyStore.getName(), storePasswd),
98                 storePasswd, ctlKeyStore.getAlias(), ctlKeyStore.getSignAlg(), withTag);
99     }
100
101     @Override
102     public String genODLKeyStoreCertificateReq(final boolean withTag) {
103         return genODLKeyStoreCertificateReq(ctlKeyStore.getStorePassword(), withTag);
104     }
105
106     @Override
107     public String getCertificateTrustStore(final String storePasswd, final String aliase, final boolean withTag) {
108         return odlKeyTool.getCertificate(odlKeyTool.loadKeyStore(trustKeyStore.getName(), storePasswd), aliase,
109                 withTag);
110     }
111
112     @Override
113     public String getCertificateTrustStore(final String aliase, final boolean withTag) {
114         return getCertificateTrustStore(trustKeyStore.getStorePassword(), aliase, withTag);
115     }
116
117     @Override
118     public String getODLKeyStoreCertificate(final String storePasswd, final boolean withTag) {
119         return odlKeyTool.getCertificate(odlKeyTool.loadKeyStore(ctlKeyStore.getName(), storePasswd),
120                 ctlKeyStore.getAlias(), withTag);
121     }
122
123     @Override
124     public String getODLKeyStoreCertificate(final boolean withTag) {
125         return getODLKeyStoreCertificate(ctlKeyStore.getStorePassword(), withTag);
126     }
127
128     @Override
129     public KeyStore getODLKeyStore() {
130         return odlKeyTool.loadKeyStore(ctlKeyStore.getName(), ctlKeyStore.getStorePassword());
131     }
132
133     @Override
134     public KeyStore getTrustKeyStore() {
135         return odlKeyTool.loadKeyStore(trustKeyStore.getName(), trustKeyStore.getStorePassword());
136     }
137
138     @Override
139     public String[] getCipherSuites() {
140         return ctlKeyStore.nonnullCipherSuites().stream()
141             .map(CipherSuites::getSuiteName)
142             .filter(name -> !name.isEmpty())
143             .toArray(String[]::new);
144     }
145
146     @Override
147     @SuppressFBWarnings("PZLA_PREFER_ZERO_LENGTH_ARRAYS")
148     public String[] getTlsProtocols() {
149         String tlsProtocols = ctlKeyStore.getTlsProtocols();
150         if (tlsProtocols != null && !tlsProtocols.isEmpty()) {
151             // remove white spaces in tlsProtocols string
152             tlsProtocols = tlsProtocols.replace(" ", "");
153             if (tlsProtocols.contains(",")) {
154                 return tlsProtocols.split(",");
155             } else {
156                 return new String[] { tlsProtocols };
157             }
158         }
159         return null;
160     }
161 }