Update Fixes from testing
[aaf/authz.git] / auth / auth-cass / src / main / java / org / onap / aaf / auth / dao / cached / FileGetter.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.auth.dao.cached;
23
24 import java.io.IOException;
25 import java.nio.ByteBuffer;
26 import java.text.ParseException;
27 import java.text.SimpleDateFormat;
28 import java.util.ArrayList;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.TreeMap;
32
33 import org.onap.aaf.auth.dao.Cached.Getter;
34 import org.onap.aaf.auth.dao.cass.CredDAO;
35 import org.onap.aaf.auth.dao.cass.CredDAO.Data;
36 import org.onap.aaf.auth.layer.Result;
37 import org.onap.aaf.cadi.Access;
38 import org.onap.aaf.cadi.Access.Level;
39 import org.onap.aaf.cadi.CadiException;
40 import org.onap.aaf.cadi.Hash;
41 import org.onap.aaf.cadi.PropAccess;
42 import org.onap.aaf.cadi.util.CSV;
43
44 public class FileGetter {
45         private static final String AAF_FILEGETTER = "aaf_filegetter";
46         public static boolean isLoaded = false;
47         private static FileGetter singleton;
48
49         private Map<String,List<CredDAO.Data>> data; 
50         private SimpleDateFormat sdf;
51         private FileGetter(Access access) {
52                 if(access!=null) {
53                         String filename = access.getProperty(AAF_FILEGETTER,null);
54                         if(filename!=null) {
55                                 if(!isLoaded) {
56                                         data = new TreeMap<>();
57                                         sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss+SSSS");
58                                         CSV csv = new CSV(access, filename).setDelimiter('|');
59                                         try {
60                                                 access.log(Level.INIT, "Loading Filebased Cred from",filename);
61                                         csv.visit(row -> {
62                                                 if(row.size()<1) {
63                                                         access.log(Level.INIT, "Bad Row");
64                                                 }
65                                                 int type;
66                                                   try {
67                                                           type =Integer.parseInt(row.get(1));
68                                                   } catch(Exception e) {
69                                                           access.log(Level.INIT, e, "skipping ", row.get(0));
70                                                           return;
71                                                   }
72                                                 if(CredDAO.CERT_SHA256_RSA == type) {
73                                                         return;
74                                                 }
75                                                 CredDAO.Data cdd = new CredDAO.Data();
76                                                 cdd.id=row.get(0);
77                                                 cdd.type = type;
78                                                 try {
79                                                                 cdd.expires = sdf.parse(row.get(2));
80                                                                 cdd.cred = ByteBuffer.wrap(Hash.fromHex(row.get(3)));
81                                                                 cdd.notes= row.get(4);
82                                                                 cdd.ns = row.get(5);
83                                                                 cdd.other = Integer.parseInt(row.get(6));
84                                                                 if(row.size()>8) {
85                                                                         cdd.tag = row.get(8);
86                                                                 } else {
87                                                                         cdd.tag = "";
88                                                                 }
89                                                                 List<CredDAO.Data> lcdd = data.get(cdd.id);
90                                                                 if(lcdd == null) {
91                                                                         lcdd = new ArrayList<>();
92                                                                         data.put(cdd.id, lcdd);
93                                                                 }
94                                                                 lcdd.add(cdd);
95                                                                 
96                                                         } catch (ParseException e) {
97                                                                 access.log(Level.INIT, e);
98                                                         }
99                                                 
100                                         });
101                                         access.printf(Level.INIT, "Filebased Cred finished...");
102                                                 isLoaded = true;
103                                         } catch( CadiException | IOException e) {
104                                                 access.log(Level.ERROR, e);
105                                         }
106                                 }
107                         }
108                 }
109         }
110
111         public static synchronized FileGetter singleton(Access access) {
112                 if(singleton==null) {
113                         singleton = new FileGetter(access);
114                 }
115                 return singleton;
116                 
117         }
118         public Getter<CredDAO.Data> getter(String id) {
119                 return new FGetter(id);
120         }
121         private static List<CredDAO.Data> EMPTY = new ArrayList<>(); 
122         public class FGetter implements Getter<CredDAO.Data> {
123                 private final List<CredDAO.Data> lcdd;  
124                 public FGetter(final String id) {
125                         lcdd = data.get(id);
126                 }
127                 @Override
128                 public Result<List<Data>> get() {
129                         return Result.ok(lcdd==null?EMPTY:lcdd);
130                 }
131         }
132         
133         public static void main(String[] args) {
134                 PropAccess access = new PropAccess(args);
135                 access.setProperty(AAF_FILEGETTER,"/Users/jg1555/cred.dat");
136                 FileGetter fg = FileGetter.singleton(access);
137                 
138                 for(String id : new String[] {"m01891@aaf.att.com","bogus"}) {
139                         Getter<CredDAO.Data> g = fg.getter(id);
140                         Result<List<CredDAO.Data>> r = g.get();
141                         if(r.isOKhasData()) {
142                                 for(CredDAO.Data cdd : r.value) {
143                                         System.out.println(cdd);
144                                 }
145                         }
146                 }
147         }
148 }
149