2 * ============LICENSE_START====================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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====================================================
22 package org.onap.aaf.auth.cm.mapper;
24 import java.io.IOException;
25 import java.util.ArrayList;
26 import java.util.List;
29 import org.onap.aaf.auth.cm.data.CertDrop;
30 import org.onap.aaf.auth.cm.data.CertRenew;
31 import org.onap.aaf.auth.cm.data.CertReq;
32 import org.onap.aaf.auth.cm.data.CertResp;
33 import org.onap.aaf.auth.cm.validation.CertmanValidator;
34 import org.onap.aaf.auth.dao.cass.ArtiDAO;
35 import org.onap.aaf.auth.dao.cass.ArtiDAO.Data;
36 import org.onap.aaf.auth.dao.cass.CertDAO;
37 import org.onap.aaf.auth.env.AuthzTrans;
38 import org.onap.aaf.auth.layer.Result;
39 import org.onap.aaf.cadi.util.Vars;
41 import aaf.v2_0.Error;
42 import certman.v1_0.Artifacts;
43 import certman.v1_0.Artifacts.Artifact;
44 import certman.v1_0.BaseRequest;
45 import certman.v1_0.CertInfo;
46 import certman.v1_0.CertificateDrop;
47 import certman.v1_0.CertificateRenew;
48 import certman.v1_0.CertificateRequest;
51 public class Mapper2_0 implements Mapper<BaseRequest,CertInfo,Artifacts,Error> {
54 public Class<?> getClass(API api) {
56 case CERT_REQ: return CertificateRequest.class;
57 case CERT_RENEW: return CertificateRenew.class;
58 case CERT_DROP: return CertificateDrop.class;
59 case CERT: return CertInfo.class;
60 case ARTIFACTS: return Artifacts.class;
61 case ERROR: return Error.class;
62 case VOID: return Void.class;
67 @SuppressWarnings("unchecked")
69 public <A> A newInstance(API api) {
71 case CERT_REQ: return (A) new CertificateRequest();
72 case CERT_RENEW: return (A) new CertificateRenew();
73 case CERT_DROP: return (A) new CertificateDrop();
74 case CERT: return (A) new CertInfo();
75 case ARTIFACTS: return (A) new Artifacts();
76 case ERROR: return (A)new Error();
77 case VOID: return null;
82 ////////////// Mapping Functions /////////////
84 public Error errorFromMessage(StringBuilder holder, String msgID, String text, Object ... var) {
85 Error err = new Error();
86 err.setMessageId(msgID);
87 // AT&T Restful Error Format requires numbers "%" placements
88 err.setText(Vars.convert(holder, text, var));
89 for (Object s : var) {
90 err.getVariables().add(s.toString());
96 * @see com.att.authz.certman.mapper.Mapper#toCert(org.onap.aaf.auth.env.test.AuthzTrans, org.onap.aaf.auth.layer.test.Result)
99 * @see com.att.authz.certman.mapper.Mapper#toCert(org.onap.aaf.auth.env.test.AuthzTrans, org.onap.aaf.auth.layer.test.Result)
102 public Result<CertInfo> toCert(AuthzTrans trans, Result<CertResp> in, boolean withTrustChain) throws IOException {
104 CertResp cin = in.value;
105 CertInfo cout = newInstance(API.CERT);
106 cout.setPrivatekey(cin.privateString());
108 if ((value=cin.challenge())!=null) {
109 cout.setChallenge(value);
111 cout.getCerts().add(cin.asCertString());
112 if (cin.trustChain()!=null) {
113 for (String c : cin.trustChain()) {
114 cout.getCerts().add(c);
117 if (cin.notes()!=null) {
118 boolean first = true;
119 StringBuilder sb = new StringBuilder();
120 for (String n : cin.notes()) {
128 cout.setNotes(sb.toString());
131 List<String> caIssuerDNs = cout.getCaIssuerDNs();
132 for (String s : cin.caIssuerDNs()) {
136 cout.setEnv(cin.env());
137 return Result.ok(cout);
139 return Result.err(in);
145 public Result<CertInfo> toCert(AuthzTrans trans, Result<List<CertDAO.Data>> in) {
147 CertInfo cout = newInstance(API.CERT);
148 List<String> certs = cout.getCerts();
149 for (CertDAO.Data cdd : in.value) {
152 return Result.ok(cout);
154 return Result.err(in);
159 * @see com.att.authz.certman.mapper.Mapper#toReq(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.Object)
162 public Result<CertReq> toReq(AuthzTrans trans, BaseRequest req) {
163 CertificateRequest in;
165 in = (CertificateRequest)req;
166 } catch (ClassCastException e) {
167 return Result.err(Result.ERR_BadData,"Request is not a CertificateRequest");
170 CertReq out = new CertReq();
171 CertmanValidator v = new CertmanValidator();
172 v.isNull("CertRequest", req)
173 .nullOrBlank("MechID", out.mechid=in.getMechid());
174 v.nullBlankMin("FQDNs", out.fqdns=in.getFqdns(),1);
176 return Result.err(Result.ERR_BadData, v.errs());
179 out.emails = in.getEmail();
180 out.sponsor=in.getSponsor();
181 out.start = in.getStart();
182 out.end = in.getEnd();
183 out.fqdns = in.getFqdns();
184 return Result.ok(out);
188 * @see com.att.authz.certman.mapper.Mapper#toRenew(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.Object)
191 public Result<CertRenew> toRenew(AuthzTrans trans, BaseRequest req) {
192 return Result.err(Result.ERR_NotImplemented,"Not Implemented... yet");
196 * @see com.att.authz.certman.mapper.Mapper#toDrop(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.Object)
199 public Result<CertDrop> toDrop(AuthzTrans trans, BaseRequest req) {
200 return Result.err(Result.ERR_NotImplemented,"Not Implemented... yet");
204 * @see org.onap.aaf.auth.cm.mapper.Mapper#toArtifact(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.Object)
207 public List<ArtiDAO.Data> toArtifact(AuthzTrans trans, Artifacts artifacts) {
208 List<ArtiDAO.Data> ladd = new ArrayList<>();
209 for (Artifact arti : artifacts.getArtifact()) {
210 ArtiDAO.Data data = new ArtiDAO.Data();
211 data.mechid = trim(arti.getMechid());
212 data.machine = trim(arti.getMachine());
213 if(arti.getType()!=null) {
214 Set<String> ss = data.type(true);
215 for(String t : arti.getType()) {
219 data.type(true).addAll(arti.getType());
220 data.ca = trim(arti.getCa());
221 data.dir = trim(arti.getDir());
222 data.os_user = trim(arti.getOsUser());
223 // Optional (on way in)
224 data.ns = trim(arti.getNs());
225 data.renewDays = arti.getRenewDays();
226 data.notify = trim(arti.getNotification());
228 // Ignored on way in for create/update
229 data.sponsor = trim(arti.getSponsor());
231 if(arti.getSans()!=null) {
232 Set<String> ss = data.sans(true);
233 for(String s : arti.getSans()) {
242 private String trim(String s) {
251 * @see org.onap.aaf.auth.cm.mapper.Mapper#fromArtifacts(org.onap.aaf.auth.layer.test.Result)
254 public Result<Artifacts> fromArtifacts(Result<List<Data>> lArtiDAO) {
255 if (lArtiDAO.isOK()) {
256 Artifacts artis = new Artifacts();
257 for (ArtiDAO.Data arti : lArtiDAO.value) {
258 Artifact a = new Artifact();
259 a.setMechid(arti.mechid);
260 a.setMachine(arti.machine);
261 a.setSponsor(arti.sponsor);
265 a.getType().addAll(arti.type(false));
266 a.setOsUser(arti.os_user);
267 a.setRenewDays(arti.renewDays);
268 a.setNotification(arti.notify);
269 a.getSans().addAll(arti.sans(false));
270 artis.getArtifact().add(a);
272 return Result.ok(artis);
274 return Result.err(lArtiDAO);