private static void fillInSubject(PolicyRule rule) throws Throwable { if (rule instanceof UserPolicyRule) { User user = ((UserPolicyRule<User>) rule).getSubject(); User filledInUser = tbclient.getUserByUsername(USER_SERVICE_ROOT, user.getUserName()); if (filledInUser == null) { throw new RuntimeException("Could not find real user for: " + user.getUserName()); } rule.setSubject(filledInUser); } else if (rule instanceof GroupPolicyRule) { Group group = ((GroupPolicyRule<? extends Group>) rule).getSubject(); Project filledInProject = getProjectByGroupName(group.getGroupName()); if (filledInProject != null) { rule.setSubject(filledInProject); } else { Organisation filledInOrg = getOrganisationByGroupName(group.getGroupName()); if (filledInOrg != null) { rule.setSubject(filledInOrg); } else { throw new RuntimeException( "Could not find project or organisation for group name: " + group.getGroupName()); } } } }
private static void verifyPolicyRules(Investigation i, List<PolicyRule> testRules) throws Throwable { List<AccessRights> rights = tbclient.readPolicy(i.getResourceURL()); List<PolicyRule> rules = new ArrayList<PolicyRule>(); for (AccessRights right : rights) { rules.addAll(right.getRules()); } for (PolicyRule testRule : testRules) { PolicyRule matchingRule = null; for (PolicyRule rule : rules) { fillInSubject(rule); IToxBankResource subject = rule.getSubject(); TestCase.assertNotNull("PolicyRule subject is null", subject.getResourceURL()); IToxBankResource testSubject = testRule.getSubject(); if (subject.getResourceURL().equals(testSubject.getResourceURL())) { TestCase.assertEquals( "Should have same get for " + testSubject.getResourceURL(), testRule.allowsGET(), rule.allowsGET()); TestCase.assertEquals( "Should have same put for " + testSubject.getResourceURL(), testRule.allowsPUT(), rule.allowsPUT()); TestCase.assertEquals( "Should have same post for " + testSubject.getResourceURL(), testRule.allowsPUT(), rule.allowsPOST()); TestCase.assertEquals( "Should have same delete for " + testSubject.getResourceURL(), testRule.allowsPUT(), rule.allowsDELETE()); matchingRule = rule; } } if (matchingRule == null) { TestCase.fail("Did not have a rule for: " + testRule.getSubject().getResourceURL()); } else { rules.remove(matchingRule); } } if (rules.size() > 0) { StringBuilder sb = new StringBuilder(); for (PolicyRule rule : rules) { sb.append(rule.getSubject().getResourceURL()); sb.append("\n"); } TestCase.fail("Had extraneous rules: " + rules.size() + "\n " + sb.toString()); } }