Fix Parameters Vulnerabilities
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / beans / Parameters.java
1 /*******************************************************************************\r
2  * ============LICENSE_START==================================================\r
3  * * org.onap.dmaap\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 \r
24 package org.onap.dmaap.datarouter.provisioning.beans;\r
25 \r
26 import java.sql.Connection;\r
27 import java.sql.PreparedStatement;\r
28 import java.sql.ResultSet;\r
29 import java.sql.SQLException;\r
30 import java.sql.Statement;\r
31 import java.util.*;\r
32 \r
33 import org.apache.log4j.Logger;\r
34 import org.json.JSONObject;\r
35 import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
36 \r
37 /**\r
38  * Methods to provide access to Provisioning parameters in the DB. This class also provides constants of the standard\r
39  * parameters used by the Data Router.\r
40  *\r
41  * @author Robert Eby\r
42  * @version $Id: Parameters.java,v 1.11 2014/03/12 19:45:41 eby Exp $\r
43  */\r
44 public class Parameters extends Syncable {\r
45 \r
46     public static final String PROV_REQUIRE_SECURE = "PROV_REQUIRE_SECURE";\r
47     public static final String PROV_REQUIRE_CERT = "PROV_REQUIRE_CERT";\r
48     public static final String PROV_AUTH_ADDRESSES = "PROV_AUTH_ADDRESSES";\r
49     public static final String PROV_AUTH_SUBJECTS = "PROV_AUTH_SUBJECTS";\r
50     public static final String PROV_NAME = "PROV_NAME";\r
51     public static final String PROV_ACTIVE_NAME = "PROV_ACTIVE_NAME";\r
52     public static final String PROV_DOMAIN = "PROV_DOMAIN";\r
53     public static final String PROV_MAXFEED_COUNT = "PROV_MAXFEED_COUNT";\r
54     public static final String PROV_MAXSUB_COUNT = "PROV_MAXSUB_COUNT";\r
55     public static final String PROV_POKETIMER1 = "PROV_POKETIMER1";\r
56     public static final String PROV_POKETIMER2 = "PROV_POKETIMER2";\r
57     public static final String PROV_SPECIAL_SUBNET = "PROV_SPECIAL_SUBNET";\r
58     public static final String PROV_LOG_RETENTION = "PROV_LOG_RETENTION";\r
59     public static final String NODES = "NODES";\r
60     public static final String ACTIVE_POD = "ACTIVE_POD";\r
61     public static final String STANDBY_POD = "STANDBY_POD";\r
62     public static final String LOGROLL_INTERVAL = "LOGROLL_INTERVAL";\r
63     public static final String DELIVERY_INIT_RETRY_INTERVAL = "DELIVERY_INIT_RETRY_INTERVAL";\r
64     public static final String DELIVERY_MAX_RETRY_INTERVAL = "DELIVERY_MAX_RETRY_INTERVAL";\r
65     public static final String DELIVERY_RETRY_RATIO = "DELIVERY_RETRY_RATIO";\r
66     public static final String DELIVERY_MAX_AGE = "DELIVERY_MAX_AGE";\r
67     public static final String THROTTLE_FILTER = "THROTTLE_FILTER";\r
68     public static final String STATIC_ROUTING_NODES = "STATIC_ROUTING_NODES"; //Adding new param for static Routing - Rally:US664862-1610\r
69 \r
70     private static Logger intlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");\r
71 \r
72     private String keyname;\r
73     private String value;\r
74 \r
75     /**\r
76      * Get all parameters in the DB as a Map.\r
77      *\r
78      * @return the Map of keynames/values from the DB.\r
79      */\r
80     public static Map<String, String> getParameters() {\r
81         Map<String, String> props = new HashMap<String, String>();\r
82         for (Parameters p : getParameterCollection()) {\r
83             props.put(p.getKeyname(), p.getValue());\r
84         }\r
85         return props;\r
86     }\r
87 \r
88     public static Collection<Parameters> getParameterCollection() {\r
89         Collection<Parameters> coll = new ArrayList<Parameters>();\r
90         try {\r
91             DB db = new DB();\r
92             @SuppressWarnings("resource")\r
93             Connection conn = db.getConnection();\r
94             try (Statement stmt = conn.createStatement()) {\r
95                 String sql = "select * from PARAMETERS";\r
96                 try (ResultSet rs = stmt.executeQuery(sql)) {\r
97                     while (rs.next()) {\r
98                         Parameters p = new Parameters(rs);\r
99                         coll.add(p);\r
100                     }\r
101                 }\r
102             }\r
103             db.release(conn);\r
104         } catch (SQLException e) {\r
105             intlogger.error("SQLException " + e.getMessage());\r
106         }\r
107         return coll;\r
108     }\r
109 \r
110     /**\r
111      * Get a specific parameter value from the DB.\r
112      *\r
113      * @param k the key to lookup\r
114      * @return the value, or null if non-existant\r
115      */\r
116     public static Parameters getParameter(String k) {\r
117         Parameters v = null;\r
118         try {\r
119             DB db = new DB();\r
120             @SuppressWarnings("resource")\r
121             Connection conn = db.getConnection();\r
122             try (PreparedStatement stmt = conn\r
123                     .prepareStatement("select KEYNAME, VALUE from PARAMETERS where KEYNAME = ?")) {\r
124                 stmt.setString(1, k);\r
125                 try (ResultSet rs = stmt.executeQuery()) {\r
126                     if (rs.next()) {\r
127                         v = new Parameters(rs);\r
128                     }\r
129                 }\r
130             }\r
131             db.release(conn);\r
132         } catch (SQLException e) {\r
133             intlogger.error("SQLException " + e.getMessage());\r
134         }\r
135         return v;\r
136     }\r
137 \r
138     public Parameters() {\r
139         this("", "");\r
140     }\r
141 \r
142     public Parameters(String k, String v) {\r
143         this.keyname = k;\r
144         this.value = v;\r
145     }\r
146 \r
147     public Parameters(ResultSet rs) throws SQLException {\r
148         this.keyname = rs.getString("KEYNAME");\r
149         this.value = rs.getString("VALUE");\r
150     }\r
151 \r
152     public String getKeyname() {\r
153         return keyname;\r
154     }\r
155 \r
156     public void setKeyname(String keyname) {\r
157         this.keyname = keyname;\r
158     }\r
159 \r
160     public String getValue() {\r
161         return value;\r
162     }\r
163 \r
164     public void setValue(String value) {\r
165         this.value = value;\r
166     }\r
167 \r
168     @Override\r
169     public JSONObject asJSONObject() {\r
170         JSONObject jo = new JSONObject();\r
171         jo.put("keyname", keyname);\r
172         jo.put("value", value);\r
173         return jo;\r
174     }\r
175 \r
176     @Override\r
177     public boolean doInsert(Connection c) {\r
178         boolean rv = true;\r
179         PreparedStatement ps = null;\r
180         try {\r
181             // Create the SUBSCRIPTIONS row\r
182             String sql = "insert into PARAMETERS values (?, ?)";\r
183             ps = c.prepareStatement(sql);\r
184             ps.setString(1, getKeyname());\r
185             ps.setString(2, getValue());\r
186             ps.execute();\r
187         } catch (SQLException e) {\r
188             rv = false;\r
189             intlogger.warn("PROV0005 doInsert: " + e.getMessage());\r
190         } finally {\r
191             try {\r
192                 if (ps != null) {\r
193                     ps.close();\r
194                 }\r
195             } catch (SQLException e) {\r
196                 intlogger.error("SQLException " + e.getMessage());\r
197             }\r
198         }\r
199         return rv;\r
200     }\r
201 \r
202     @Override\r
203     public boolean doUpdate(Connection c) {\r
204         boolean rv = true;\r
205         PreparedStatement ps = null;\r
206         try {\r
207             // Update the PARAMETERS row\r
208             String sql = "update PARAMETERS set VALUE = ? where KEYNAME = ?";\r
209             ps = c.prepareStatement(sql);\r
210             ps.setString(1, getValue());\r
211             ps.setString(2, getKeyname());\r
212             ps.executeUpdate();\r
213         } catch (SQLException e) {\r
214             rv = false;\r
215             intlogger.warn("PROV0006 doUpdate: " + e.getMessage());\r
216         } finally {\r
217             try {\r
218                 if (ps != null) {\r
219                     ps.close();\r
220                 }\r
221             } catch (SQLException e) {\r
222                 intlogger.error("SQLException " + e.getMessage());\r
223             }\r
224         }\r
225         return rv;\r
226     }\r
227 \r
228     @Override\r
229     public boolean doDelete(Connection c) {\r
230         boolean rv = true;\r
231         PreparedStatement ps = null;\r
232         try {\r
233             // Create the SUBSCRIPTIONS row\r
234             String sql = "delete from PARAMETERS where KEYNAME = ?";\r
235             ps = c.prepareStatement(sql);\r
236             ps.setString(1, getKeyname());\r
237             ps.execute();\r
238         } catch (SQLException e) {\r
239             rv = false;\r
240             intlogger.warn("PROV0007 doDelete: " + e.getMessage());\r
241         } finally {\r
242             try {\r
243                 if (ps != null) {\r
244                     ps.close();\r
245                 }\r
246             } catch (SQLException e) {\r
247                 intlogger.error("SQLException " + e.getMessage());\r
248             }\r
249         }\r
250         return rv;\r
251     }\r
252 \r
253     @Override\r
254     public String getKey() {\r
255         return getKeyname();\r
256     }\r
257 \r
258     @Override\r
259     public boolean equals(Object obj) {\r
260         if (!(obj instanceof Parameters)) {\r
261             return false;\r
262         }\r
263         Parameters of = (Parameters) obj;\r
264         if (!keyname.equals(of.keyname)) {\r
265             return false;\r
266         }\r
267         if (!value.equals(of.value)) {\r
268             return false;\r
269         }\r
270         return true;\r
271     }\r
272 \r
273     @Override\r
274     public int hashCode() {\r
275         return Objects.hash(keyname, value);\r
276     }\r
277 \r
278     @Override\r
279     public String toString() {\r
280         return "PARAM: keyname=" + keyname + ", value=" + value;\r
281     }\r
282 }\r
283 \r