/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.uberfire.backend.server.security;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.nio.channels.FileChannel;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import org.uberfire.java.nio.IOException;
import org.uberfire.java.nio.base.AbstractPath;
import org.uberfire.java.nio.channels.AsynchronousFileChannel;
import org.uberfire.java.nio.channels.SeekableByteChannel;
import org.uberfire.java.nio.file.AccessDeniedException;
import org.uberfire.java.nio.file.AccessMode;
import org.uberfire.java.nio.file.AtomicMoveNotSupportedException;
import org.uberfire.java.nio.file.ClosedWatchServiceException;
import org.uberfire.java.nio.file.CopyOption;
import org.uberfire.java.nio.file.DeleteOption;
import org.uberfire.java.nio.file.DirectoryNotEmptyException;
import org.uberfire.java.nio.file.DirectoryStream;
import org.uberfire.java.nio.file.DirectoryStream.Filter;
import org.uberfire.java.nio.file.FileAlreadyExistsException;
import org.uberfire.java.nio.file.FileStore;
import org.uberfire.java.nio.file.FileSystem;
import org.uberfire.java.nio.file.FileSystemAlreadyExistsException;
import org.uberfire.java.nio.file.FileSystemNotFoundException;
import org.uberfire.java.nio.file.InvalidPathException;
import org.uberfire.java.nio.file.LinkOption;
import org.uberfire.java.nio.file.NoSuchFileException;
import org.uberfire.java.nio.file.NotDirectoryException;
import org.uberfire.java.nio.file.NotLinkException;
import org.uberfire.java.nio.file.OpenOption;
import org.uberfire.java.nio.file.Path;
import org.uberfire.java.nio.file.PathMatcher;
import org.uberfire.java.nio.file.PatternSyntaxException;
import org.uberfire.java.nio.file.WatchEvent.Kind;
import org.uberfire.java.nio.file.WatchEvent.Modifier;
import org.uberfire.java.nio.file.WatchKey;
import org.uberfire.java.nio.file.WatchService;
import org.uberfire.java.nio.file.attribute.BasicFileAttributes;
import org.uberfire.java.nio.file.attribute.FileAttribute;
import org.uberfire.java.nio.file.attribute.FileAttributeView;
import org.uberfire.java.nio.file.attribute.UserPrincipalLookupService;
import org.uberfire.java.nio.file.spi.FileSystemProvider;
import org.uberfire.java.nio.security.FileSystemAuthenticator;
import org.uberfire.java.nio.security.FileSystemAuthorizer;
import org.uberfire.java.nio.security.SecuredFileSystemProvider;
/**
* A fake filesystem provider that's registered under
* src/test/resources/META-INF/services.
*/
public class MockSecuredFilesystemProvider implements SecuredFileSystemProvider {
public static MockSecuredFilesystemProvider LATEST_INSTANCE;
public boolean isForcedDefault;
public FileSystemAuthenticator authenticator;
public FileSystemAuthorizer authorizer;
public MockSecuredFilesystemProvider() {
LATEST_INSTANCE = this;
}
@Override
public void forceAsDefault() {
isForcedDefault = true;
}
@Override
public boolean isDefault() {
return false;
}
@Override
public String getScheme() {
return "mocksecure";
}
@Override
public FileSystem newFileSystem(URI uri,
Map<String, ?> env) throws IllegalArgumentException, IOException, SecurityException, FileSystemAlreadyExistsException {
throw new UnsupportedOperationException();
}
@Override
public FileSystem getFileSystem(URI uri) throws IllegalArgumentException, FileSystemNotFoundException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public Path getPath(URI uri) throws IllegalArgumentException, FileSystemNotFoundException, SecurityException {
return new MockPath();
}
@Override
public FileSystem newFileSystem(Path path,
Map<String, ?> env) throws IllegalArgumentException, UnsupportedOperationException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public InputStream newInputStream(Path path,
OpenOption... options) throws IllegalArgumentException, UnsupportedOperationException, NoSuchFileException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public OutputStream newOutputStream(Path path,
OpenOption... options) throws IllegalArgumentException, UnsupportedOperationException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public FileChannel newFileChannel(Path path,
Set<? extends OpenOption> options,
FileAttribute<?>... attrs) throws IllegalArgumentException, UnsupportedOperationException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public AsynchronousFileChannel newAsynchronousFileChannel(Path path,
Set<? extends OpenOption> options,
ExecutorService executor,
FileAttribute<?>... attrs) throws IllegalArgumentException, UnsupportedOperationException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public SeekableByteChannel newByteChannel(Path path,
Set<? extends OpenOption> options,
FileAttribute<?>... attrs) throws IllegalArgumentException, UnsupportedOperationException, FileAlreadyExistsException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public DirectoryStream<Path> newDirectoryStream(Path dir,
Filter<Path> filter) throws NotDirectoryException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public void createDirectory(Path dir,
FileAttribute<?>... attrs) throws UnsupportedOperationException, FileAlreadyExistsException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public void createSymbolicLink(Path link,
Path target,
FileAttribute<?>... attrs) throws UnsupportedOperationException, FileAlreadyExistsException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public void createLink(Path link,
Path existing) throws UnsupportedOperationException, FileAlreadyExistsException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public void delete(Path path,
DeleteOption... options) throws DirectoryNotEmptyException, NoSuchFileException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public boolean deleteIfExists(Path path,
DeleteOption... options) throws DirectoryNotEmptyException, IOException, SecurityException {
// TODO Auto-generated method stub
throw new UnsupportedOperationException();
}
@Override
public Path readSymbolicLink(Path link) throws UnsupportedOperationException, NotLinkException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public void copy(Path source,
Path target,
CopyOption... options) throws UnsupportedOperationException, FileAlreadyExistsException, DirectoryNotEmptyException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public void move(Path source,
Path target,
CopyOption... options) throws DirectoryNotEmptyException, AtomicMoveNotSupportedException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public boolean isSameFile(Path path,
Path path2) throws IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public boolean isHidden(Path path) throws IllegalArgumentException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public FileStore getFileStore(Path path) throws IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public void checkAccess(Path path,
AccessMode... modes) throws UnsupportedOperationException, NoSuchFileException, AccessDeniedException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public <V extends FileAttributeView> V getFileAttributeView(Path path,
Class<V> type,
LinkOption... options) throws NoSuchFileException {
throw new UnsupportedOperationException();
}
@Override
public <A extends BasicFileAttributes> A readAttributes(Path path,
Class<A> type,
LinkOption... options) throws NoSuchFileException, UnsupportedOperationException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public Map<String, Object> readAttributes(Path path,
String attributes,
LinkOption... options) throws UnsupportedOperationException, IllegalArgumentException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public void setAttribute(Path path,
String attribute,
Object value,
LinkOption... options) throws UnsupportedOperationException, IllegalArgumentException, ClassCastException, IOException, SecurityException {
throw new UnsupportedOperationException();
}
@Override
public void setAuthenticator(FileSystemAuthenticator authenticator) {
this.authenticator = authenticator;
}
@Override
public void setAuthorizer(FileSystemAuthorizer authorizer) {
this.authorizer = authorizer;
}
private class MockPath extends AbstractPath {
public MockPath() {
super(new MockFileSystem(),
new File("mock"));
}
@Override
public File toFile() throws UnsupportedOperationException {
return null;
}
@Override
public WatchKey register(WatchService watcher,
Kind[] events,
Modifier... modifiers) throws UnsupportedOperationException, IllegalArgumentException, ClosedWatchServiceException, IOException, SecurityException {
return null;
}
@Override
public WatchKey register(WatchService watcher,
Kind... events) throws UnsupportedOperationException, IllegalArgumentException, ClosedWatchServiceException, IOException, SecurityException {
return null;
}
@Override
protected Path newPath(FileSystem fs,
String substring,
String host,
boolean realPath,
boolean isNormalized) {
return null;
}
@Override
protected Path newRoot(FileSystem fs,
String substring,
String host,
boolean realPath) {
return null;
}
@Override
protected RootInfo setupRoot(FileSystem fs,
String path,
String host,
boolean isRoot) {
return new RootInfo(0,
true,
true,
new byte[0]);
}
@Override
protected String defaultDirectory() {
return null;
}
}
private class MockFileSystem implements FileSystem {
@Override
public void close() throws IOException {
}
@Override
public void dispose() {
}
@Override
public FileSystemProvider provider() {
return null;
}
@Override
public boolean isOpen() {
return false;
}
@Override
public boolean isReadOnly() {
return false;
}
@Override
public String getSeparator() {
return null;
}
@Override
public Iterable<Path> getRootDirectories() {
return null;
}
@Override
public Iterable<FileStore> getFileStores() {
return null;
}
@Override
public Set<String> supportedFileAttributeViews() {
return null;
}
@Override
public Path getPath(String first,
String... more) throws InvalidPathException {
return null;
}
@Override
public PathMatcher getPathMatcher(String syntaxAndPattern) throws IllegalArgumentException, PatternSyntaxException, UnsupportedOperationException {
return null;
}
@Override
public UserPrincipalLookupService getUserPrincipalLookupService() throws UnsupportedOperationException {
return null;
}
@Override
public WatchService newWatchService() throws UnsupportedOperationException, IOException {
return null;
}
}
}