Search in sources :

Example 11 with Folder

use of org.structr.web.entity.Folder in project structr by structr.

the class ResourceAccessTest method test01ResourceAccessGET.

@Test
public void test01ResourceAccessGET() {
    // clear resource access objects that are created by the dynamic schema
    clearResourceAccess();
    Folder testFolder = null;
    ResourceAccess folderGrant = null;
    try (final Tx tx = app.tx()) {
        testFolder = createTestNodes(Folder.class, 1).get(0);
        assertNotNull(testFolder);
        // no resource access node at all => forbidden
        RestAssured.given().contentType("application/json; charset=UTF-8").expect().statusCode(401).when().get("/folders");
        tx.success();
    } catch (FrameworkException fex) {
        logger.warn("", fex);
        logger.error(fex.toString());
        fail("Unexpected exception");
    }
    try (final Tx tx = app.tx()) {
        folderGrant = createResourceAccess("Folder", UiAuthenticator.FORBIDDEN);
        tx.success();
    } catch (FrameworkException fex) {
        logger.warn("", fex);
        logger.error(fex.toString());
        fail("Unexpected exception");
    }
    try (final Tx tx = app.tx()) {
        // resource access explicetly set to FORBIDDEN => forbidden
        RestAssured.given().contentType("application/json; charset=UTF-8").expect().statusCode(401).when().get("/folders");
        // allow GET for authenticated users => access without user/pass should be still forbidden
        folderGrant.setProperties(folderGrant.getSecurityContext(), new PropertyMap(GraphObject.visibleToPublicUsers, true));
        folderGrant.setFlag(UiAuthenticator.AUTH_USER_GET);
        tx.success();
    } catch (FrameworkException fex) {
        logger.warn("", fex);
        logger.error(fex.toString());
        fail("Unexpected exception");
    }
    try (final Tx tx = app.tx()) {
        RestAssured.given().contentType("application/json; charset=UTF-8").expect().statusCode(401).when().get("/folders");
        // allow GET for non-authenticated users => access without user/pass should be allowed
        folderGrant.setFlag(UiAuthenticator.NON_AUTH_USER_GET);
        tx.success();
    } catch (FrameworkException fex) {
        logger.warn("", fex);
        logger.error(fex.toString());
        fail("Unexpected exception");
    }
    try (final Tx tx = app.tx()) {
        RestAssured.given().contentType("application/json; charset=UTF-8").expect().statusCode(200).when().get("/folders");
        tx.success();
    } catch (FrameworkException fex) {
        logger.warn("", fex);
        logger.error(fex.toString());
        fail("Unexpected exception");
    }
}
Also used : ResourceAccess(org.structr.core.entity.ResourceAccess) PropertyMap(org.structr.core.property.PropertyMap) Tx(org.structr.core.graph.Tx) FrameworkException(org.structr.common.error.FrameworkException) Folder(org.structr.web.entity.Folder) Test(org.junit.Test) StructrUiTest(org.structr.web.StructrUiTest)

Example 12 with Folder

use of org.structr.web.entity.Folder in project structr by structr.

the class ResourceAccessTest method test04ResourceAccessDELETE.

@Test
public void test04ResourceAccessDELETE() {
    // clear resource access objects that are created by the dynamic schema
    clearResourceAccess();
    final String name = "testuser-01";
    final String password = "testpassword-01";
    Folder testFolder = null;
    User testUser = null;
    ResourceAccess folderGrant = null;
    try (final Tx tx = app.tx()) {
        testFolder = createTestNodes(Folder.class, 1).get(0);
        assertNotNull(testFolder);
        testUser = createTestNodes(User.class, 1).get(0);
        tx.success();
    } catch (FrameworkException fex) {
        logger.warn("", fex);
        logger.error(fex.toString());
        fail("Unexpected exception");
    }
    try (final Tx tx = app.tx()) {
        // no resource access node at all => forbidden
        RestAssured.given().contentType("application/json; charset=UTF-8").expect().statusCode(401).when().delete("/folder/" + testFolder.getUuid());
        folderGrant = createResourceAccess("Folder", UiAuthenticator.FORBIDDEN);
        tx.success();
    } catch (FrameworkException fex) {
        logger.warn("", fex);
        logger.error(fex.toString());
        fail("Unexpected exception");
    }
    try (final Tx tx = app.tx()) {
        // resource access explicitly set to FORBIDDEN => forbidden
        RestAssured.given().contentType("application/json; charset=UTF-8").expect().statusCode(401).when().delete("/folder/" + testFolder.getUuid());
        folderGrant.setFlag(UiAuthenticator.AUTH_USER_DELETE);
        tx.success();
    } catch (FrameworkException fex) {
        logger.warn("", fex);
        logger.error(fex.toString());
        fail("Unexpected exception");
    }
    try (final Tx tx = app.tx()) {
        RestAssured.given().contentType("application/json; charset=UTF-8").expect().statusCode(401).when().delete("/folder/" + testFolder.getUuid());
        folderGrant.setProperties(folderGrant.getSecurityContext(), new PropertyMap(GraphObject.visibleToPublicUsers, true));
        folderGrant.setFlag(UiAuthenticator.NON_AUTH_USER_DELETE);
        tx.success();
    } catch (FrameworkException fex) {
        logger.warn("", fex);
        logger.error(fex.toString());
        fail("Unexpected exception");
    }
    try (final Tx tx = app.tx()) {
        RestAssured.given().contentType("application/json; charset=UTF-8").expect().statusCode(404).when().delete("/folder/" + testFolder.getUuid());
        final PropertyMap changedProperties = new PropertyMap();
        changedProperties.put(StructrApp.key(User.class, "name"), name);
        changedProperties.put(StructrApp.key(User.class, "password"), password);
        testUser.setProperties(testUser.getSecurityContext(), changedProperties);
        // make user own folder
        testFolder.setProperties(testFolder.getSecurityContext(), new PropertyMap(AbstractNode.owner, testUser));
        tx.success();
    } catch (FrameworkException fex) {
        logger.warn("", fex);
        logger.error(fex.toString());
        fail("Unexpected exception");
    }
    try (final Tx tx = app.tx()) {
        // test user owns object now => 200
        RestAssured.given().headers("X-User", name, "X-Password", password).contentType("application/json; charset=UTF-8").expect().statusCode(200).when().delete("/folder/" + testFolder.getUuid());
        tx.success();
    } catch (FrameworkException fex) {
        logger.warn("", fex);
        logger.error(fex.toString());
        fail("Unexpected exception");
    }
}
Also used : ResourceAccess(org.structr.core.entity.ResourceAccess) User(org.structr.web.entity.User) PropertyMap(org.structr.core.property.PropertyMap) Tx(org.structr.core.graph.Tx) FrameworkException(org.structr.common.error.FrameworkException) Folder(org.structr.web.entity.Folder) Test(org.junit.Test) StructrUiTest(org.structr.web.StructrUiTest)

Example 13 with Folder

use of org.structr.web.entity.Folder in project structr by structr.

the class UiTest method testCreateFolder.

@Test
public void testCreateFolder() {
    Folder folder1 = null;
    try (final Tx tx = app.tx()) {
        folder1 = FileHelper.createFolderPath(SecurityContext.getSuperUserInstance(), "/folder1");
        tx.success();
    } catch (FrameworkException ex) {
        logger.error("", ex);
    }
    try (final Tx tx = app.tx()) {
        File file1 = (File) app.create(File.class, "file1");
        assertNotNull(file1);
        assertEquals(file1.getPath(), "/file1");
        file1.setProperty(StructrApp.key(File.class, "parent"), folder1);
        assertEquals(file1.getPath(), "/folder1/file1");
        tx.success();
    } catch (FrameworkException ex) {
        logger.error("", ex);
    }
    try (final Tx tx = app.tx()) {
        Image image1 = (Image) app.create(Image.class, "image1");
        assertNotNull(image1);
        assertEquals(image1.getPath(), "/image1");
        image1.setProperty(StructrApp.key(File.class, "parent"), folder1);
        assertEquals(image1.getPath(), "/folder1/image1");
        tx.success();
    } catch (FrameworkException ex) {
        logger.error("", ex);
    }
    try (final Tx tx = app.tx()) {
        assertEquals(2, Iterables.toList(folder1.getFiles()).size());
        assertEquals(1, Iterables.toList(folder1.getImages()).size());
    } catch (FrameworkException ex) {
        logger.error("", ex);
    }
}
Also used : Tx(org.structr.core.graph.Tx) FrameworkException(org.structr.common.error.FrameworkException) Folder(org.structr.web.entity.Folder) Image(org.structr.web.entity.Image) AbstractFile(org.structr.web.entity.AbstractFile) File(org.structr.web.entity.File) Test(org.junit.Test) StructrUiTest(org.structr.web.StructrUiTest)

Example 14 with Folder

use of org.structr.web.entity.Folder in project structr by structr.

the class UiTest method testAutoRenameFileWithIdenticalPathInSubFolder.

@Test
public void testAutoRenameFileWithIdenticalPathInSubFolder() {
    Settings.UniquePaths.setValue(Boolean.TRUE);
    Folder folder = null;
    File file1 = null;
    File file2 = null;
    try (final Tx tx = app.tx()) {
        folder = FileHelper.createFolderPath(SecurityContext.getSuperUserInstance(), "/my/test/folder");
        assertNotNull(folder);
        assertEquals(folder.getPath(), "/my/test/folder");
        tx.success();
    } catch (FrameworkException ex) {
        logger.error("", ex);
    }
    try (final Tx tx = app.tx()) {
        file1 = app.create(File.class, new NodeAttribute<>(AbstractNode.name, "test.txt"), new NodeAttribute<>(StructrApp.key(AbstractFile.class, "parent"), folder));
        assertNotNull(file1);
        assertEquals("Testfolder should have exactly one child", 1, Iterables.count(folder.getChildren()));
        tx.success();
    } catch (FrameworkException ex) {
        logger.error("", ex);
    }
    try (final Tx tx = app.tx()) {
        file2 = app.create(File.class, new NodeAttribute<>(AbstractNode.name, "test.txt"), new NodeAttribute<>(StructrApp.key(AbstractFile.class, "parent"), folder));
        assertNotNull(file2);
        assertEquals("Testfolder should have exactly two children", 2, Iterables.count(folder.getChildren()));
        tx.success();
    } catch (FrameworkException ex) {
        logger.error("", ex);
    }
    assertNotEquals(file1.getName(), file2.getName());
}
Also used : NodeAttribute(org.structr.core.graph.NodeAttribute) AbstractFile(org.structr.web.entity.AbstractFile) Tx(org.structr.core.graph.Tx) FrameworkException(org.structr.common.error.FrameworkException) Folder(org.structr.web.entity.Folder) AbstractFile(org.structr.web.entity.AbstractFile) File(org.structr.web.entity.File) Test(org.junit.Test) StructrUiTest(org.structr.web.StructrUiTest)

Example 15 with Folder

use of org.structr.web.entity.Folder in project structr by structr.

the class JavaParserModule method handlePackageFolder.

private void handlePackageFolder(final Folder folder, final Folder parentFolder) {
    // Folder contains a package-info.java so it must be a package
    String[] parts = folder.getPath().split("src/main/java/");
    if (parts.length > 1) {
        final PropertyMap identifyingProperties = new PropertyMap();
        final PropertyMap allProperties = new PropertyMap();
        // Convert path to package path
        String path = StringUtils.replaceAll(parts[1], "/", ".");
        identifyingProperties.put(Package.name, path);
        allProperties.putAll(identifyingProperties);
        allProperties.put(Package.folder, folder);
        // Check if we are contained in a module:
        // Find the closest ancestor folder which has a module
        Module mod = null;
        Package pkg = null;
        Folder possibleModuleParentFolder = parentFolder;
        // Continue until root folder or a module was found
        while (possibleModuleParentFolder != null && mod == null) {
            try {
                mod = app.nodeQuery(Module.class).and(Module.folder, possibleModuleParentFolder).getFirst();
                pkg = app.nodeQuery(Package.class).and(Module.folder, possibleModuleParentFolder).getFirst();
            } catch (FrameworkException ignore) {
            }
            if (pkg != null) {
                // Parent folder contains a package
                allProperties.put(Package.parent, pkg);
            } else if (mod != null) {
                // Parent folder contains a module
                allProperties.put(Package.module, mod);
                break;
            }
            // Continue while loop
            possibleModuleParentFolder = possibleModuleParentFolder.getParent();
        }
        getOrCreate(Package.class, identifyingProperties, allProperties);
        logger.info("Created or found package '" + path + "' in folder " + folder.getPath());
    }
}
Also used : PropertyMap(org.structr.core.property.PropertyMap) FrameworkException(org.structr.common.error.FrameworkException) Package(org.structr.javaparser.entity.Package) StructrModule(org.structr.module.StructrModule) Module(org.structr.javaparser.entity.Module) Folder(org.structr.web.entity.Folder)

Aggregations

Folder (org.structr.web.entity.Folder)95 Tx (org.structr.core.graph.Tx)64 FrameworkException (org.structr.common.error.FrameworkException)60 AbstractFile (org.structr.web.entity.AbstractFile)42 App (org.structr.core.app.App)35 StructrApp (org.structr.core.app.StructrApp)35 File (org.structr.web.entity.File)34 Test (org.junit.Test)23 StructrUiTest (org.structr.web.StructrUiTest)21 IOException (java.io.IOException)20 PropertyMap (org.structr.core.property.PropertyMap)16 Path (java.nio.file.Path)14 LinkedList (java.util.LinkedList)10 NodeAttribute (org.structr.core.graph.NodeAttribute)9 InputStream (java.io.InputStream)5 CmisObjectNotFoundException (org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException)5 CMISRootFolder (org.structr.files.cmis.repository.CMISRootFolder)5 User (org.structr.web.entity.User)5 Page (org.structr.web.entity.dom.Page)5 BasicFileAttributes (java.nio.file.attribute.BasicFileAttributes)4