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");
}
}
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");
}
}
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);
}
}
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());
}
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());
}
}
Aggregations