9f5a6772cbdbfea271d59426af2c3590ccc40f39
[aaf/authz.git] / authz-certman / src / main / java / com / att / authz / cm / mapper / Mapper1_0.java
1 /*******************************************************************************\r
2  * ============LICENSE_START====================================================\r
3  * * org.onap.aaf\r
4  * * ===========================================================================\r
5  * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
6  * * ===========================================================================\r
7  * * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * * you may not use this file except in compliance with the License.\r
9  * * You may obtain a copy of the License at\r
10  * * \r
11  *  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * * \r
13  *  * Unless required by applicable law or agreed to in writing, software\r
14  * * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * * See the License for the specific language governing permissions and\r
17  * * limitations under the License.\r
18  * * ============LICENSE_END====================================================\r
19  * *\r
20  * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
21  * *\r
22  ******************************************************************************/\r
23 package com.att.authz.cm.mapper;\r
24 \r
25 import java.io.IOException;\r
26 import java.util.ArrayList;\r
27 import java.util.List;\r
28 \r
29 import aaf.v2_0.Error;\r
30 import certman.v1_0.Artifacts;\r
31 import certman.v1_0.Artifacts.Artifact;\r
32 import certman.v1_0.BaseRequest;\r
33 import certman.v1_0.CertInfo;\r
34 import certman.v1_0.CertificateDrop;\r
35 import certman.v1_0.CertificateRenew;\r
36 import certman.v1_0.CertificateRequest;\r
37 \r
38 import com.att.authz.cm.data.CertDrop;\r
39 import com.att.authz.cm.data.CertRenew;\r
40 import com.att.authz.cm.data.CertReq;\r
41 import com.att.authz.cm.data.CertResp;\r
42 import com.att.authz.cm.validation.Validator;\r
43 import com.att.authz.env.AuthzTrans;\r
44 import com.att.authz.layer.Result;\r
45 import com.att.cadi.aaf.v2_0.AAFCon;\r
46 import com.att.cadi.util.Vars;\r
47 import com.att.dao.aaf.cass.ArtiDAO;\r
48 import com.att.dao.aaf.cass.ArtiDAO.Data;\r
49 \r
50 \r
51 public class Mapper1_0 implements Mapper<BaseRequest,CertInfo,Artifacts,Error> {\r
52         \r
53         @Override\r
54         public Class<?> getClass(API api) {\r
55                 switch(api) {\r
56                         case CERT_REQ: return CertificateRequest.class;\r
57                         case CERT_RENEW: return CertificateRenew.class;\r
58                         case CERT_DROP: return CertificateDrop.class;\r
59                         case CERT: return CertInfo.class;\r
60                         case ARTIFACTS: return Artifacts.class;\r
61                         case ERROR: return Error.class;\r
62                         case VOID: return Void.class;\r
63                 }\r
64                 return null;\r
65         }\r
66 \r
67         @SuppressWarnings("unchecked")\r
68         @Override\r
69         public <A> A newInstance(API api) {\r
70                 switch(api) {\r
71                         case CERT_REQ: return (A) new CertificateRequest();\r
72                         case CERT_RENEW: return (A) new CertificateRenew();\r
73                         case CERT_DROP: return (A) new CertificateDrop();\r
74                         case CERT: return (A) new CertInfo();\r
75                         case ARTIFACTS: return (A) new Artifacts();\r
76                         case ERROR: return (A)new Error();\r
77                         case VOID: return null;\r
78                 }\r
79                 return null;\r
80         }\r
81 \r
82         //////////////  Mapping Functions /////////////\r
83         @Override\r
84         public Error errorFromMessage(StringBuilder holder, String msgID, String text, String... var) {\r
85                 Error err = new Error();\r
86                 err.setMessageId(msgID);\r
87                 // AT&T Restful Error Format requires numbers "%" placements\r
88                 err.setText(Vars.convert(holder, text, var));\r
89                 for(String s : var) {\r
90                         err.getVariables().add(s);\r
91                 }\r
92                 return err;\r
93         }\r
94 \r
95         /* (non-Javadoc)\r
96          * @see com.att.authz.certman.mapper.Mapper#toCert(com.att.authz.env.AuthzTrans, com.att.authz.layer.Result)\r
97          */\r
98         @Override\r
99         public Result<CertInfo> toCert(AuthzTrans trans, Result<CertResp> in, String[] trustChain) throws IOException {\r
100                 if(in.isOK()) {\r
101                         CertResp cin = in.value;\r
102                         CertInfo cout = newInstance(API.CERT);\r
103                         cout.setPrivatekey(cin.privateString());\r
104                         String value;\r
105                         if((value=cin.challenge())!=null) {\r
106                                 cout.setChallenge(value);\r
107                         }\r
108                         cout.getCerts().add(cin.asCertString());\r
109                         if(trustChain!=null) {\r
110                                 for(String c : trustChain) {\r
111                                         cout.getCerts().add(c);\r
112                                 }\r
113                         }\r
114                         if(cin.notes()!=null) {\r
115                                 boolean first = true;\r
116                                 StringBuilder sb = new StringBuilder();\r
117                                 for(String n : cin.notes()) {\r
118                                         if(first) {\r
119                                                 first = false;\r
120                                         } else {\r
121                                                 sb.append('\n');\r
122                                         }\r
123                                         sb.append(n);\r
124                                 }\r
125                                 cout.setNotes(sb.toString());\r
126                         }\r
127                         return Result.ok(cout);\r
128                 } else {\r
129                         return Result.err(in);\r
130                 }\r
131         }\r
132 \r
133         /* (non-Javadoc)\r
134          * @see com.att.authz.certman.mapper.Mapper#toReq(com.att.authz.env.AuthzTrans, java.lang.Object)\r
135          */\r
136         @Override\r
137         public Result<CertReq> toReq(AuthzTrans trans, BaseRequest req) {\r
138                 CertificateRequest in;\r
139                 try {\r
140                         in = (CertificateRequest)req;\r
141                 } catch(ClassCastException e) {\r
142                         return Result.err(Result.ERR_BadData,"Request is not a CertificateRequest");\r
143                 }\r
144 \r
145                 CertReq out = new CertReq();\r
146                 Validator v = new Validator();\r
147                 if(v.isNull("CertRequest", req)\r
148                         .nullOrBlank("MechID", out.mechid=in.getMechid())\r
149                         .nullBlankMin("FQDNs", out.fqdns=in.getFqdns(),1)\r
150                         .err()) {\r
151                         return Result.err(Result.ERR_BadData, v.errs());\r
152                 }\r
153                 out.emails = in.getEmail();\r
154                 out.sponsor=in.getSponsor();\r
155                 out.start = in.getStart();\r
156                 out.end = in.getEnd();\r
157                 return Result.ok(out);\r
158         }\r
159 \r
160         /* (non-Javadoc)\r
161          * @see com.att.authz.certman.mapper.Mapper#toRenew(com.att.authz.env.AuthzTrans, java.lang.Object)\r
162          */\r
163         @Override\r
164         public Result<CertRenew> toRenew(AuthzTrans trans, BaseRequest req) {\r
165                 return Result.err(Result.ERR_NotImplemented,"Not Implemented... yet");\r
166         }\r
167 \r
168         /* (non-Javadoc)\r
169          * @see com.att.authz.certman.mapper.Mapper#toDrop(com.att.authz.env.AuthzTrans, java.lang.Object)\r
170          */\r
171         @Override\r
172         public Result<CertDrop> toDrop(AuthzTrans trans, BaseRequest req) {\r
173                 return Result.err(Result.ERR_NotImplemented,"Not Implemented... yet");\r
174         }\r
175 \r
176         /* (non-Javadoc)\r
177          * @see com.att.authz.cm.mapper.Mapper#toArtifact(com.att.authz.env.AuthzTrans, java.lang.Object)\r
178          */\r
179         @Override\r
180         public List<ArtiDAO.Data> toArtifact(AuthzTrans trans, Artifacts artifacts) {\r
181                 List<ArtiDAO.Data> ladd = new ArrayList<ArtiDAO.Data>();\r
182                 for(Artifact arti : artifacts.getArtifact()) {\r
183                         ArtiDAO.Data data = new ArtiDAO.Data();\r
184                         data.mechid = arti.getMechid();\r
185                         data.machine = arti.getMachine();\r
186                         data.type(true).addAll(arti.getType());\r
187                         data.ca = arti.getCa();\r
188                         data.dir = arti.getDir();\r
189                         data.os_user = arti.getOsUser();\r
190                         // Optional (on way in)\r
191                         data.appName = arti.getAppName();\r
192                         data.renewDays = arti.getRenewDays();\r
193                         data.notify = arti.getNotification();\r
194                         \r
195                         // Ignored on way in for create/update\r
196                         data.sponsor = arti.getSponsor();\r
197                         data.expires = null;\r
198                         \r
199                         // Derive Optional Data from Machine (Domain) if exists\r
200                         if(data.machine!=null) {\r
201                                 if(data.ca==null) {\r
202                                         if(data.machine.endsWith(".att.com")) {\r
203                                                 data.ca = "aaf"; // default\r
204                                         }\r
205                                 }\r
206                                 if(data.appName==null ) {\r
207                                         data.appName=AAFCon.reverseDomain(data.machine);\r
208                                 }\r
209                         }\r
210 \r
211                         ladd.add(data);\r
212                 }\r
213                 return ladd;\r
214         }\r
215 \r
216         /* (non-Javadoc)\r
217          * @see com.att.authz.cm.mapper.Mapper#fromArtifacts(com.att.authz.layer.Result)\r
218          */\r
219         @Override\r
220         public Result<Artifacts> fromArtifacts(Result<List<Data>> lArtiDAO) {\r
221                 if(lArtiDAO.isOK()) {\r
222                         Artifacts artis = new Artifacts();\r
223                         for(ArtiDAO.Data arti : lArtiDAO.value) {\r
224                                 Artifact a = new Artifact();\r
225                                 a.setMechid(arti.mechid);\r
226                                 a.setMachine(arti.machine);\r
227                                 a.setSponsor(arti.sponsor);\r
228                                 a.setAppName(arti.appName);\r
229                                 a.setCa(arti.ca);\r
230                                 a.setDir(arti.dir);\r
231                                 a.getType().addAll(arti.type(false));\r
232                                 a.setOsUser(arti.os_user);\r
233                                 a.setRenewDays(arti.renewDays);\r
234                                 a.setNotification(arti.notify);\r
235                                 artis.getArtifact().add(a);\r
236                         }\r
237                         return Result.ok(artis);\r
238                 } else {\r
239                         return Result.err(lArtiDAO);\r
240                 }\r
241         }\r
242         \r
243         \r
244 \r
245 }\r