public boolean match(final String group, final String role) { if (voGroup == null) { return false; } boolean roleMatches; if( voRole != null) { Glob rolePattern = new Glob(voRole); roleMatches = rolePattern.matches(role==null ? "null" : role); } else { roleMatches = true; } Glob groupPattern = new Glob(voGroup); return groupPattern.matches(group==null ? "null" : group) && roleMatches; } }
public boolean isGlob() { return isGlob(_pattern); }
public DNFQANPredicate(String dnGlob, FQAN fqan) { _dnPattern = Glob.parseGlobToPattern(dnGlob); _fqan = fqan; }
@GuardedBy("this") private void checkFile() { if (!file.exists() || !file.canRead()) { LOGGER.error("RELOAD FAILED: Could not read {}.", file.getAbsolutePath()); } else if (lastModified < file.lastModified()) { cache.clear(); globCache.clear(); GsonBuilder builder = new GsonBuilder(); try (FileReader reader = new FileReader(file)) { VOGroupEntry[] info = builder.create() .fromJson(reader, VOGroupEntry[].class); for (VOGroupEntry e: info) { Glob glob = new Glob(e.getFqan()); if (glob.isGlob()) { globCache.put(glob, e); } else { cache.put(e.getFqan(), e); } } lastModified = file.lastModified(); ++reloadCount; } catch (IOException e) { LOGGER.error("There was a problem deserializing {}: {}, {}", file, e.getMessage(), Throwables.getRootCause(e)); } } } }
public IGTFInfoFile(Path path) { file = path; String filename = path.getFileName().toString(); type = POLICY_FILENAME_GLOB.matches(filename) ? Type.POLICY : Type.TRUST_ANCHOR; }
public Glob toGlob() { return new Glob(_pattern); }
public static Pattern parseGlobToPattern(String glob) { StringBuilder s = new StringBuilder(glob.length() * 2 + 2); int j = 0; s.append('^'); for (int i = 0; i < glob.length(); i++) { switch (glob.charAt(i)) { case '?': s.append(Pattern.quote(glob.substring(j, i))); s.append('.'); j = i + 1; break; case '*': s.append(Pattern.quote(glob.substring(j, i))); s.append(".*"); j = i + 1; break; case '{': s.append(Pattern.quote(glob.substring(j, i))); i = parseCurlyBrackets(glob, i, s); j = i + 1; break; default: break; } } s.append(Pattern.quote(glob.substring(j))); s.append('$'); return Pattern.compile(s.toString()); }
public boolean matches(String s) { return toPattern().matcher(s).matches(); }
@Override protected Object buildArray(Args args) { GlobExpander<String> expander = null; List<String> values = new ArrayList<>(); for (int i = _argument.index(); i < args.argc(); i++) { String argument = args.argv(i); if (Glob.isGlob(argument)) { if (expander == null) { expander = createExpander(); } List<String> expansion = expander.expand(new Glob(argument)); if (expansion.isEmpty()) { values.add(argument); } else { values.addAll(expansion); } } else { values.add(argument); } } return asArrayForField(values); } }
synchronized public VOGroupEntry get(String fqan) throws AuthenticationException { VOGroupEntry entry; checkFile(); entry = cache.get(fqan); if (entry == null) { entry = globCache.entrySet() .stream() .filter(e -> e.getKey().matches(fqan)) .map(Map.Entry::getValue) .findFirst() .orElse(null); } if (entry == null) { throw new AuthenticationException("No VO group entry matching FQAN: " + fqan); } else { return entry; } }
i = parseCurlyBrackets(glob, i, s); j = i + 1; break;
public Pattern toPattern() { return parseGlobToPattern(_pattern); }