public static ClassifierRef getClassifierRef(SecurityRule secRule) { checkNotNull(secRule); ClassifierName classifierInstanceName = SecRuleNameDecoder.getClassifierInstanceName(secRule); ClassifierRefBuilder classifierRefBuilder = new ClassifierRefBuilder() .setConnectionTracking(ConnectionTracking.Reflexive).setInstanceName(classifierInstanceName); Direction direction = getDirection(secRule); classifierRefBuilder.setDirection(direction); ClassifierName classifierRefName = SecRuleNameDecoder.getClassifierRefName(secRule); return classifierRefBuilder.setName(classifierRefName).build(); }
private boolean isSameDirection(Direction direction, Rule rule) { for (ClassifierRef classifier : rule.getClassifierRef()) { if (direction.equals(classifier.getDirection()) || direction.equals(Direction.Bidirectional) || Direction.Bidirectional.equals(classifier.getDirection())) { return true; } } return false; }
private Subject getAllowSubject() { return new SubjectBuilder() .setName(new SubjectName(SUBJECT_NAME)) .setRule(ImmutableList.of(new RuleBuilder() .setKey(new RuleKey(new RuleName(SUBJECT_NAME + "_Rule"))) .setActionRef(ImmutableList.of(new ActionRefBuilder() .setName(new ActionName(ACTION_ALLOW)) .build())) .setClassifierRef(ImmutableList.of(new ClassifierRefBuilder() .setKey(new ClassifierRefKey(new ClassifierName(SUBJECT_NAME + "_Classifier"))) .setName(new ClassifierName(CLASSIFIER_NAME)) .setDirection(Direction.Bidirectional) .build())) .build())) .build(); }
for (ClassifierRef cr : rule.getClassifierRef()) { if (cr.getDirection() != null && !cr.getDirection().equals(Direction.Bidirectional) && !cr.getDirection().equals(classifierDirection)) { continue; ClassifierInstance ci = contractTenant.getClassifier(cr.getInstanceName()); if (ci == null) { LOG.warn("Classifier instance {} not found", cr.getInstanceName().getValue()); return null;
List<RuleClassifier> fClassifiers = new ArrayList<>(); for (ClassifierRef classifierRef : classifierRefs) { if (classifierRef.getName() == null) { LOG.warn("Found a Classifer without name in Contract {} ", contract.getId().getValue()); continue; ruleClassifierBuilder.setName(new Name(classifierRef.getName().getValue())); ClassifierInstance classifierInstance = getClassifierInstance(tenantId, classifierRef.getName(), dataProvider); if (classifierInstance == null) { LOG.warn("Classifer instance {} is not found -- will only use the classifier Ref info", classifierRef.getName()); } else { if (classifierInstance.getClassifierDefinitionId() != null) { if (classifierRef.getDirection() != null) { ruleClassifierBuilder.setDirection(Direction.forValue(classifierRef.getDirection().getIntValue())); } else { ruleClassifierBuilder.setDirection(Direction.Bidirectional);
private static Rule createRuleAllow(ClassifierName classifierName, Direction direction) { ClassifierName name = new ClassifierName(direction.name() + MappingUtils.NAME_DOUBLE_DELIMETER + classifierName.getValue()); ClassifierRef classifierRef = new ClassifierRefBuilder().setName(name) .setInstanceName(classifierName) .setDirection(direction) .build(); return new RuleBuilder().setName(new RuleName(name)) .setActionRef(ImmutableList.<ActionRef>of(MappingUtils.ACTION_REF_ALLOW)) .setClassifierRef(ImmutableList.of(classifierRef)) .build(); }