Search in sources :

Example 1 with AccessMode

use of java.nio.file.AccessMode in project google-cloud-java by GoogleCloudPlatform.

the class CloudStorageFileSystemProvider method checkAccess.

@Override
public void checkAccess(Path path, AccessMode... modes) throws IOException {
    initStorage();
    for (AccessMode mode : modes) {
        switch(mode) {
            case READ:
            case WRITE:
                break;
            case EXECUTE:
            default:
                throw new UnsupportedOperationException(mode.toString());
        }
    }
    CloudStoragePath cloudPath = CloudStorageUtil.checkPath(path);
    if (cloudPath.seemsLikeADirectoryAndUsePseudoDirectories()) {
        return;
    }
    if (storage.get(cloudPath.getBlobId(), Storage.BlobGetOption.fields(Storage.BlobField.ID)) == null) {
        throw new NoSuchFileException(path.toString());
    }
}
Also used : NoSuchFileException(java.nio.file.NoSuchFileException) AccessMode(java.nio.file.AccessMode)

Example 2 with AccessMode

use of java.nio.file.AccessMode in project graal by oracle.

the class MemoryFileSystem method checkAccess.

@Override
public void checkAccess(Path path, Set<? extends AccessMode> modes, LinkOption... linkOptions) throws IOException {
    final Path absolutePath = toAbsolutePath(path);
    final Long inode = findInode(absolutePath);
    if (inode == null) {
        throw new NoSuchFileException(path.toString());
    }
    final FileInfo info = inodes.get(inode);
    for (AccessMode mode : modes) {
        if (!info.permissions.contains(mode)) {
            throw new AccessDeniedException(path.toString());
        }
    }
}
Also used : Path(java.nio.file.Path) AccessDeniedException(java.nio.file.AccessDeniedException) NoSuchFileException(java.nio.file.NoSuchFileException) AccessMode(java.nio.file.AccessMode)

Example 3 with AccessMode

use of java.nio.file.AccessMode in project cryptofs by cryptomator.

the class CryptoFileSystemProviderTest method testCheckAccessDelegatesToFileSystem.

@Test
public void testCheckAccessDelegatesToFileSystem() throws IOException {
    AccessMode mode = AccessMode.EXECUTE;
    inTest.checkAccess(cryptoPath, mode);
    verify(cryptoFileSystem).checkAccess(cryptoPath, mode);
}
Also used : AccessMode(java.nio.file.AccessMode) Test(org.junit.Test)

Example 4 with AccessMode

use of java.nio.file.AccessMode in project structr by structr.

the class StructrSSHFileSystem method provider.

@Override
public FileSystemProvider provider() {
    logger.info("x");
    return new FileSystemProvider() {

        @Override
        public OutputStream newOutputStream(Path path, OpenOption... options) throws IOException {
            logger.info("x");
            OutputStream os = null;
            File actualFile = (File) ((StructrSSHFile) path).getActualFile();
            try (final Tx tx = StructrApp.getInstance(securityContext).tx()) {
                if (actualFile == null) {
                    actualFile = (File) create(path);
                }
                if (actualFile != null) {
                    os = ((File) actualFile).getOutputStream();
                }
                tx.success();
            } catch (FrameworkException fex) {
                logger.warn("", fex);
                throw new IOException(fex);
            }
            return os;
        }

        @Override
        public InputStream newInputStream(Path path, OpenOption... options) throws IOException {
            // Remote file => file node in Structr
            logger.info("x");
            InputStream inputStream = null;
            try (final Tx tx = StructrApp.getInstance(securityContext).tx()) {
                final File fileNode = (File) ((StructrSSHFile) path).getActualFile();
                inputStream = fileNode.getInputStream();
                tx.success();
            } catch (FrameworkException fex) {
                logger.warn("", fex);
                throw new IOException(fex);
            }
            return inputStream;
        }

        @Override
        public String getScheme() {
            logger.info("Method not implemented yet");
            return null;
        }

        @Override
        public FileSystem newFileSystem(URI uri, Map<String, ?> env) throws IOException {
            logger.info("Method not implemented yet");
            return null;
        }

        @Override
        public FileSystem getFileSystem(URI uri) {
            logger.info("Method not implemented yet");
            return null;
        }

        @Override
        public Path getPath(URI uri) {
            logger.info("Method not implemented yet");
            return null;
        }

        @Override
        public SeekableByteChannel newByteChannel(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) throws IOException {
            logger.info("x");
            SeekableByteChannel channel = null;
            final File fileNode = (File) ((StructrSSHFile) path).getActualFile();
            if (fileNode != null) {
                try (Tx tx = StructrApp.getInstance(securityContext).tx()) {
                    final Path filePath = fileNode.getFileOnDisk().toPath();
                    channel = Files.newByteChannel(filePath);
                    tx.success();
                } catch (FrameworkException fex) {
                    logger.error("", fex);
                    throw new IOException(fex);
                }
            }
            return channel;
        }

        @Override
        public DirectoryStream<Path> newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter) throws IOException {
            logger.info("x");
            return new DirectoryStream() {

                boolean closed = false;

                @Override
                public Iterator iterator() {
                    if (!closed) {
                        final App app = StructrApp.getInstance(securityContext);
                        final List<StructrSSHFile> files = new LinkedList<>();
                        final StructrSSHFile thisDir = (StructrSSHFile) dir;
                        try (final Tx tx = app.tx()) {
                            for (final Folder child : thisDir.getFolders()) {
                                files.add(new StructrSSHFile(thisDir, child.getName(), child));
                            }
                            for (final File child : thisDir.getFiles()) {
                                files.add(new StructrSSHFile(thisDir, child.getName(), child));
                            }
                            tx.success();
                        } catch (FrameworkException fex) {
                            logger.warn("", fex);
                        }
                        return files.iterator();
                    }
                    return Collections.emptyIterator();
                }

                @Override
                public void close() throws IOException {
                    closed = true;
                }
            };
        }

        @Override
        public void createDirectory(Path dir, FileAttribute<?>... attrs) throws IOException {
            logger.info("x");
            final StructrSSHFile parent = (StructrSSHFile) dir.getParent();
            final App app = StructrApp.getInstance(securityContext);
            final String name = dir.getFileName().toString();
            try (final Tx tx = app.tx()) {
                final Folder folder = app.create(Folder.class, new NodeAttribute(AbstractNode.name, name), new NodeAttribute(StructrApp.key(AbstractFile.class, "parent"), parent != null ? parent.getActualFile() : null));
                ((StructrSSHFile) dir).setActualFile(folder);
                tx.success();
            } catch (FrameworkException fex) {
                logger.warn("", fex);
                throw new IOException(fex);
            }
        }

        @Override
        public void delete(Path path) throws IOException {
            logger.info("Method not implemented yet");
        }

        @Override
        public void copy(Path source, Path target, CopyOption... options) throws IOException {
            logger.info("Method not implemented yet");
        }

        @Override
        public void move(Path source, Path target, CopyOption... options) throws IOException {
            logger.info("Method not implemented yet");
        }

        @Override
        public boolean isSameFile(Path path, Path path2) throws IOException {
            logger.info("x");
            return path != null && path.equals(path);
        }

        @Override
        public boolean isHidden(Path path) throws IOException {
            logger.info("Method not implemented yet");
            return false;
        }

        @Override
        public FileStore getFileStore(Path path) throws IOException {
            logger.info("Method not implemented yet");
            return null;
        }

        @Override
        public void checkAccess(Path path, AccessMode... modes) throws IOException {
            logger.info("Checking access", new Object[] { path, modes });
        }

        @Override
        public <V extends FileAttributeView> V getFileAttributeView(final Path path, final Class<V> type, final LinkOption... options) {
            logger.info("x");
            return (V) new PosixFileAttributeView() {

                @Override
                public String name() {
                    return "posix";
                }

                @Override
                public PosixFileAttributes readAttributes() throws IOException {
                    return new StructrPosixFileAttributes((StructrSSHFile) path);
                }

                @Override
                public void setPermissions(Set<PosixFilePermission> set) throws IOException {
                    logger.info("Method not implemented yet");
                }

                @Override
                public void setGroup(GroupPrincipal gp) throws IOException {
                    logger.info("Method not implemented yet");
                }

                @Override
                public void setTimes(FileTime ft, FileTime ft1, FileTime ft2) throws IOException {
                    logger.info("Method not implemented yet");
                }

                @Override
                public UserPrincipal getOwner() throws IOException {
                    logger.info("Method not implemented yet");
                    return null;
                }

                @Override
                public void setOwner(UserPrincipal up) throws IOException {
                    logger.info("Method not implemented yet");
                }
            };
        }

        @Override
        public <A extends BasicFileAttributes> A readAttributes(Path path, Class<A> type, LinkOption... options) throws IOException {
            logger.info("x");
            if (path != null) {
                if (path instanceof StructrSSHFile) {
                    final StructrSSHFile sshFile = (StructrSSHFile) path;
                    if (sshFile.getActualFile() == null) {
                        throw new NoSuchFileException("SSH file doesn't exist");
                    }
                    BasicFileAttributes attrs = new StructrPosixFileAttributes((StructrSSHFile) path);
                    return (A) attrs;
                }
            }
            throw new IOException("Unable to read attributes: Path is null");
        }

        @Override
        public Map<String, Object> readAttributes(Path path, String attributes, LinkOption... options) throws IOException {
            return Collections.EMPTY_MAP;
        }

        @Override
        public void setAttribute(Path path, String attribute, Object value, LinkOption... options) throws IOException {
            logger.info("Method not implemented yet");
            ;
        }

        private AbstractFile create(final Path path) throws IOException {
            logger.info("x");
            final StructrSSHFile parent = (StructrSSHFile) path.getParent();
            AbstractFile newFile = null;
            final App app = StructrApp.getInstance(securityContext);
            try (final Tx tx = app.tx()) {
                final String fileName = path.getFileName().toString();
                final Folder parentFolder = (Folder) parent.getActualFile();
                newFile = app.create(File.class, new NodeAttribute(AbstractNode.name, fileName), new NodeAttribute(StructrApp.key(AbstractFile.class, "parent"), parentFolder));
                tx.success();
            } catch (FrameworkException fex) {
                logger.warn("", fex);
                throw new IOException(fex);
            }
            return newFile;
        }
    };
}
Also used : StructrApp(org.structr.core.app.StructrApp) App(org.structr.core.app.App) HashSet(java.util.HashSet) Set(java.util.Set) CopyOption(java.nio.file.CopyOption) AbstractFile(org.structr.web.entity.AbstractFile) OutputStream(java.io.OutputStream) DirectoryStream(java.nio.file.DirectoryStream) NoSuchFileException(java.nio.file.NoSuchFileException) FileTime(java.nio.file.attribute.FileTime) Folder(org.structr.web.entity.Folder) URI(java.net.URI) PosixFileAttributeView(java.nio.file.attribute.PosixFileAttributeView) BasicFileAttributes(java.nio.file.attribute.BasicFileAttributes) Path(java.nio.file.Path) NodeAttribute(org.structr.core.graph.NodeAttribute) Tx(org.structr.core.graph.Tx) FrameworkException(org.structr.common.error.FrameworkException) LinkOption(java.nio.file.LinkOption) InputStream(java.io.InputStream) IOException(java.io.IOException) PosixFilePermission(java.nio.file.attribute.PosixFilePermission) LinkedList(java.util.LinkedList) UserPrincipal(java.nio.file.attribute.UserPrincipal) SeekableByteChannel(java.nio.channels.SeekableByteChannel) OpenOption(java.nio.file.OpenOption) GroupPrincipal(java.nio.file.attribute.GroupPrincipal) FileSystemProvider(java.nio.file.spi.FileSystemProvider) AccessMode(java.nio.file.AccessMode) PosixFileAttributes(java.nio.file.attribute.PosixFileAttributes) AbstractFile(org.structr.web.entity.AbstractFile) File(org.structr.web.entity.File) Map(java.util.Map) PosixFileAttributeView(java.nio.file.attribute.PosixFileAttributeView) FileAttributeView(java.nio.file.attribute.FileAttributeView) FileAttribute(java.nio.file.attribute.FileAttribute)

Example 5 with AccessMode

use of java.nio.file.AccessMode in project n2a by frothga.

the class SshFileSystemProvider method checkAccess.

public void checkAccess(Path path, AccessMode... modes) throws IOException {
    SshPath A = (SshPath) path;
    String name = A.toAbsolutePath().toString();
    try {
        SftpATTRS attributes = A.getSftp().stat(name);
        int permissions = attributes.getPermissions();
        for (AccessMode mode : modes) {
            switch(mode) {
                case READ:
                    if ((permissions & 0444) == 0)
                        throw new AccessDeniedException("READ " + A);
                    break;
                case WRITE:
                    if ((permissions & 0222) == 0)
                        throw new AccessDeniedException("WRITE " + A);
                    break;
                case EXECUTE:
                    if ((permissions & 0111) == 0)
                        throw new AccessDeniedException("EXECUTE " + A);
                    break;
                default:
                    throw new UnsupportedOperationException();
            }
        }
    } catch (SftpException e) {
        if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE)
            throw new NoSuchFileException(name);
        throw new IOException(e);
    }
}
Also used : AccessDeniedException(java.nio.file.AccessDeniedException) SftpATTRS(com.jcraft.jsch.SftpATTRS) SftpException(com.jcraft.jsch.SftpException) NoSuchFileException(java.nio.file.NoSuchFileException) AccessMode(java.nio.file.AccessMode) IOException(java.io.IOException)

Aggregations

AccessMode (java.nio.file.AccessMode)5 NoSuchFileException (java.nio.file.NoSuchFileException)4 IOException (java.io.IOException)2 AccessDeniedException (java.nio.file.AccessDeniedException)2 Path (java.nio.file.Path)2 SftpATTRS (com.jcraft.jsch.SftpATTRS)1 SftpException (com.jcraft.jsch.SftpException)1 InputStream (java.io.InputStream)1 OutputStream (java.io.OutputStream)1 URI (java.net.URI)1 SeekableByteChannel (java.nio.channels.SeekableByteChannel)1 CopyOption (java.nio.file.CopyOption)1 DirectoryStream (java.nio.file.DirectoryStream)1 LinkOption (java.nio.file.LinkOption)1 OpenOption (java.nio.file.OpenOption)1 BasicFileAttributes (java.nio.file.attribute.BasicFileAttributes)1 FileAttribute (java.nio.file.attribute.FileAttribute)1 FileAttributeView (java.nio.file.attribute.FileAttributeView)1 FileTime (java.nio.file.attribute.FileTime)1 GroupPrincipal (java.nio.file.attribute.GroupPrincipal)1