示例#1
0
 /** Parse the resource. Should not be used in the normal course */
 protected void parse() {
   LOGGER.info("Parsing " + resourcePath);
   Roles roles = new Roles();
   try {
     perDbResources.clear();
     Ini ini = PolicyFiles.loadFromPath(fileSystem, resourcePath);
     if (LOGGER.isDebugEnabled()) {
       for (String sectionName : ini.getSectionNames()) {
         LOGGER.debug("Section: " + sectionName);
         Ini.Section section = ini.get(sectionName);
         for (String key : section.keySet()) {
           String value = section.get(key);
           LOGGER.debug(key + " = " + value);
         }
       }
     }
     ImmutableSetMultimap<String, String> globalRoles;
     Map<String, ImmutableSetMultimap<String, String>> perDatabaseRoles = Maps.newHashMap();
     globalRoles = parseIni(null, ini);
     Ini.Section filesSection = ini.getSection(DATABASES);
     if (filesSection == null) {
       LOGGER.info("Section " + DATABASES + " needs no further processing");
     } else {
       for (Map.Entry<String, String> entry : filesSection.entrySet()) {
         String database = Strings.nullToEmpty(entry.getKey()).trim().toLowerCase();
         Path perDbPolicy = new Path(Strings.nullToEmpty(entry.getValue()).trim());
         if (isRelative(perDbPolicy)) {
           perDbPolicy = new Path(resourcePath.getParent(), perDbPolicy);
         }
         try {
           LOGGER.info("Parsing " + perDbPolicy);
           Ini perDbIni = PolicyFiles.loadFromPath(fileSystem, perDbPolicy);
           if (perDbIni.containsKey(USERS)) {
             throw new ConfigurationException(
                 "Per-db policy files cannot contain " + USERS + " section");
           }
           if (perDbIni.containsKey(DATABASES)) {
             throw new ConfigurationException(
                 "Per-db policy files cannot contain " + DATABASES + " section");
           }
           ImmutableSetMultimap<String, String> currentDbRoles = parseIni(database, perDbIni);
           perDatabaseRoles.put(database, currentDbRoles);
           perDbResources.add(perDbPolicy);
         } catch (Exception e) {
           LOGGER.error(
               "Error processing key " + entry.getKey() + ", skipping " + entry.getValue(), e);
         }
       }
     }
     roles = new Roles(globalRoles, ImmutableMap.copyOf(perDatabaseRoles));
   } catch (Exception e) {
     LOGGER.error("Error processing file, ignoring " + resourcePath, e);
   }
   rolesReference.set(roles);
 }
 @Before
 public void setup() throws IOException {
   baseDir = Files.createTempDir();
   PolicyFiles.copyToDir(baseDir, resourcePath);
   backend =
       new SimpleFileProviderBackend(
           new Configuration(), new File(baseDir, resourcePath).toString());
   context = new ProviderBackendContext();
 }