- private static void readFile(){
- String pdpFile = null;
- try{
- pdpFile = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_IDFILE);
- }catch (Exception e){
- LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot read the PDP ID File" + e);
- return;
- }
- if (pdpFile == null) {
- LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PDP File name not Valid : " + pdpFile);
- }
- if (pdpPath == null) {
- pdpPath = Paths.get(pdpFile);
- if (!pdpPath.toFile().exists()) {
- LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "File doesn't exist in the specified Path : " + pdpPath.toString());
+ private static Path pdpPath = null;
+ private static Long oldModified = null;
+ private static HashMap<String, String> pdpMap = null;
+ private static final Logger LOGGER = FlexLogger.getLogger(CheckPDP.class);
+
+ private CheckPDP() {
+ //default constructor
+ }
+
+ public static Map<String, String> getPdpMap() {
+ return pdpMap;
+ }
+
+ private static void reset() {
+ pdpPath = null;
+ oldModified = null;
+ pdpMap = null;
+ }
+
+ public static boolean validateID(String id) {
+ // ReadFile
+ try {
+ readFile();
+ } catch (Exception e) {
+ LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
+ return false;
+ }
+ if (pdpMap == null) {
+ return false;
+ }
+ // Check ID
+ return pdpMap.containsKey(id);
+ }
+
+ private static void readFile() {
+ String pdpFile;
+ try {
+ pdpFile = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_IDFILE);
+ } catch (Exception e) {
+ LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot read the PDP ID File" + e);
+ return;
+ }
+ if (pdpFile == null) {
+ LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PDP File name not Valid : " + pdpFile);
+ } else if (pdpPath == null) {
+ pdpPath = Paths.get(pdpFile);
+ if (!pdpPath.toString().endsWith(".properties") || !pdpPath.toFile().exists()) {
+ LOGGER.error(
+ XACMLErrorConstants.ERROR_SYSTEM_ERROR + "File doesn't exist in the specified Path : " + pdpPath
+ .toString());
+ CheckPDP.reset();
+ return;
+ }
+ readProps();
+ } else { // Check if File is updated recently
+ Long newModified = pdpPath.toFile().lastModified();
+ if (!newModified.equals(oldModified)) {
+ // File has been updated.
+ readProps();
+ }
+ }
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private static void readProps() {
+ Properties pdpProp;
+ pdpProp = new Properties();
+ try (InputStream in = new FileInputStream(pdpPath.toFile())) {
+ oldModified = pdpPath.toFile().lastModified();
+ pdpProp.load(in);
+ // Read the Properties and Load the PDPs and encoding.
+ pdpMap = new HashMap<>();
+ // Check the Keys for PDP_URLs
+ Collection<Object> unsorted = pdpProp.keySet();
+ List<String> sorted = new ArrayList(unsorted);
+ Collections.sort(sorted);
+ for (String propKey : sorted) {
+ loadPDPProperties(propKey, pdpProp);
+ }
+ } catch (IOException e) {
+ LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
+ }
+ if (pdpMap == null || pdpMap.isEmpty()) {
+ LOGGER.debug(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Cannot Proceed without PDP_URLs");
+ CheckPDP.reset();
+ }
+ }