private void createMagicAceDefinitions( SessionImpl systemSession ) throws RepositoryException { ClassLoader loader = this.getClass().getClassLoader(); InputStream yamlFileInputStream = loader.getResourceAsStream( "jcr/config.yaml" ); magicAceDefinitions = MagicAceDefinition.parseYamlMagicAceDefinitions( yamlFileInputStream, systemSession ); }
@SuppressWarnings( "unchecked" ) public static List<MagicAceDefinition> parseYamlMagicAceDefinitions( InputStream yamlFileInputStream, SessionImpl systemSession ) throws RepositoryException { List<MagicAceDefinition> magicAceDefinitions = new ArrayList<MagicAceDefinition>(); try { Yaml yaml = new Yaml(); Map<String, Object> map = (Map<String, Object>) yaml.load( yamlFileInputStream ); List<Map<String, Object>> magicAceList = (List<Map<String, Object>>) map.get( "MagicAces" ); for ( Map<String, Object> magicAceMap : magicAceList ) { MagicAceDefinition pam = parseMagicAceDefinition( magicAceMap, systemSession ); magicAceDefinitions.add( pam ); } } catch ( Exception e ) { throw new RuntimeException( "Could not parse magic ace configurations from Yaml file.", e ); } return magicAceDefinitions; }
/** * Parses a single magic ACE definition from a yaml file. */ @SuppressWarnings( "unchecked" ) private static MagicAceDefinition parseMagicAceDefinition( Map<String, Object> magicAceMap, SessionImpl systemSession ) throws RepositoryException { String path = magicAceMap.get( "path" ).toString(); String logicalRole = magicAceMap.get( "logicalRole" ).toString(); boolean applyToTarget = Boolean.valueOf( magicAceMap.get( "applyToTarget" ).toString() ); boolean applyToChildren = Boolean.valueOf( magicAceMap.get( "applyToChildren" ).toString() ); boolean applyToAncestors = Boolean.valueOf( magicAceMap.get( "applyToAncestors" ).toString() ); List<String> privilegeList = (List<String>) magicAceMap.get( "privileges" ); List<Privilege> privileges = new ArrayList<Privilege>(); for ( String privilegeToken : privilegeList ) { privileges.add( systemSession.getAccessControlManager().privilegeFromName( privilegeToken ) ); } String[] exceptChildren = null; List<String> exceptChildrenArray = (List<String>) magicAceMap.get( "exceptChildren" ); if ( exceptChildrenArray != null ) { exceptChildren = exceptChildrenArray.toArray( new String[0] ); } return new MagicAceDefinition( path, logicalRole, privileges.toArray( new Privilege[0] ), applyToTarget, applyToChildren, applyToAncestors, exceptChildren ); } }
private List<MagicAceDefinition> parseYamlFile( String filePath ) throws Exception { SessionImpl mockSessionImpl = mock( SessionImpl.class ); AccessControlManager mockAccessControlManager = mock( AccessControlManager.class ); Privilege mockPrivilege = mock( Privilege.class ); when( mockSessionImpl.getAccessControlManager() ).thenReturn( mockAccessControlManager ); when( mockAccessControlManager.privilegeFromName( any() ) ).thenReturn( mockPrivilege ); InputStream input = new FileInputStream( new File( filePath ) ); return MagicAceDefinition.parseYamlMagicAceDefinitions( input, mockSessionImpl ); }