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;
28 import org.onap.aaf.auth.cm.data.CertDrop;
29 import org.onap.aaf.auth.cm.data.CertRenew;
30 import org.onap.aaf.auth.cm.data.CertReq;
31 import org.onap.aaf.auth.cm.data.CertResp;
32 import org.onap.aaf.auth.cm.validation.CertmanValidator;
33 import org.onap.aaf.auth.dao.cass.ArtiDAO;
34 import org.onap.aaf.auth.dao.cass.ArtiDAO.Data;
35 import org.onap.aaf.auth.dao.cass.CertDAO;
36 import org.onap.aaf.auth.env.AuthzTrans;
37 import org.onap.aaf.auth.layer.Result;
38 import org.onap.aaf.cadi.util.FQI;
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, String... 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));
90 err.getVariables().add(s);
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());
130 cout.getCaIssuerDNs().addAll(cin.caIssuerDNs());
131 cout.setEnv(cin.env());
132 return Result.ok(cout);
134 return Result.err(in);
140 public Result<CertInfo> toCert(AuthzTrans trans, Result<List<CertDAO.Data>> in) {
142 CertInfo cout = newInstance(API.CERT);
143 List<String> certs = cout.getCerts();
144 for(CertDAO.Data cdd : in.value) {
147 return Result.ok(cout);
149 return Result.err(in);
154 * @see com.att.authz.certman.mapper.Mapper#toReq(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.Object)
157 public Result<CertReq> toReq(AuthzTrans trans, BaseRequest req) {
158 CertificateRequest in;
160 in = (CertificateRequest)req;
161 } catch(ClassCastException e) {
162 return Result.err(Result.ERR_BadData,"Request is not a CertificateRequest");
165 CertReq out = new CertReq();
166 CertmanValidator v = new CertmanValidator();
167 v.isNull("CertRequest", req)
168 .nullOrBlank("MechID", out.mechid=in.getMechid());
169 v.nullBlankMin("FQDNs", out.fqdns=in.getFqdns(),1);
171 return Result.err(Result.ERR_BadData, v.errs());
174 out.emails = in.getEmail();
175 out.sponsor=in.getSponsor();
176 out.start = in.getStart();
177 out.end = in.getEnd();
178 out.fqdns = in.getFqdns();
179 return Result.ok(out);
183 * @see com.att.authz.certman.mapper.Mapper#toRenew(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.Object)
186 public Result<CertRenew> toRenew(AuthzTrans trans, BaseRequest req) {
187 return Result.err(Result.ERR_NotImplemented,"Not Implemented... yet");
191 * @see com.att.authz.certman.mapper.Mapper#toDrop(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.Object)
194 public Result<CertDrop> toDrop(AuthzTrans trans, BaseRequest req) {
195 return Result.err(Result.ERR_NotImplemented,"Not Implemented... yet");
199 * @see org.onap.aaf.auth.cm.mapper.Mapper#toArtifact(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.Object)
202 public List<ArtiDAO.Data> toArtifact(AuthzTrans trans, Artifacts artifacts) {
203 List<ArtiDAO.Data> ladd = new ArrayList<ArtiDAO.Data>();
204 for(Artifact arti : artifacts.getArtifact()) {
205 ArtiDAO.Data data = new ArtiDAO.Data();
206 data.mechid = arti.getMechid();
207 data.machine = arti.getMachine();
208 data.type(true).addAll(arti.getType());
209 data.ca = arti.getCa();
210 data.dir = arti.getDir();
211 data.os_user = arti.getOsUser();
212 // Optional (on way in)
213 data.ns = arti.getNs();
214 data.renewDays = arti.getRenewDays();
215 data.notify = arti.getNotification();
217 // Ignored on way in for create/update
218 data.sponsor = arti.getSponsor();
221 // Derive Optional Data from Machine (Domain) if exists
222 if(data.machine!=null) {
224 if(data.machine.endsWith(".att.com")) {
225 data.ca = "aaf"; // default
229 data.ns=FQI.reverseDomain(data.machine);
232 data.sans(true).addAll(arti.getSans());
239 * @see org.onap.aaf.auth.cm.mapper.Mapper#fromArtifacts(org.onap.aaf.auth.layer.test.Result)
242 public Result<Artifacts> fromArtifacts(Result<List<Data>> lArtiDAO) {
243 if(lArtiDAO.isOK()) {
244 Artifacts artis = new Artifacts();
245 for(ArtiDAO.Data arti : lArtiDAO.value) {
246 Artifact a = new Artifact();
247 a.setMechid(arti.mechid);
248 a.setMachine(arti.machine);
249 a.setSponsor(arti.sponsor);
253 a.getType().addAll(arti.type(false));
254 a.setOsUser(arti.os_user);
255 a.setRenewDays(arti.renewDays);
256 a.setNotification(arti.notify);
257 a.getSans().addAll(arti.sans(false));
258 artis.getArtifact().add(a);
260 return Result.ok(artis);
262 return Result.err(lArtiDAO);