/*
 * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

// we do not care about java lib itself
grant codebase "file:${java.home}/-" {
  permission java.security.AllPermission;
};

// we do not care about our dependencies
grant codebase "file:${settings.localRepository}/-" {
  permission java.security.AllPermission;
};

// in case jersey-media-jaxb jar is referenced directly from reactor
grant codebase "file:${basedir}/../media/jaxb/-" {
  permission java.security.AllPermission;
};

// in case jersey-hk2 jar is referenced directly from reactor
grant codebase "file:${basedir}/../inject/hk2/-" {
  permission java.security.AllPermission;
};

// in case jersey-core jar is referenced directly from reactor
grant codebase "file:${basedir}/../core-common/-" {
  permission java.security.AllPermission;
};

// this is to be able to set runtime delegate instance in jax-rs from the tests
// and to run multi-threaded tests
grant codebase "file:${project.build.directory}/test-classes/-" {
  permission java.lang.RuntimePermission "accessDeclaredMembers";
  permission java.lang.RuntimePermission "createClassLoader";
  permission java.lang.RuntimePermission "setContextClassLoader";
  permission java.lang.RuntimePermission "getClassLoader";
  permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
  permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
  permission java.util.PropertyPermission "*", "read";
  permission java.net.NetPermission "specifyStreamHandler";
  permission java.net.SocketPermission "home", "connect,resolve";

  // Needed by VFSSchemeResourceFinderTest
  permission java.util.PropertyPermission "java.protocol.handler.pkgs", "read,write";
  permission java.lang.RuntimePermission "modifyThread";
  permission org.jboss.vfs.VirtualFilePermission "<<ALL FILES>>", "read";
  permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
  permission java.lang.RuntimePermission "accessClassInPackage.sun.misc.*";
  permission java.lang.RuntimePermission "accessClassInPackage.sun.reflect";
  permission java.lang.RuntimePermission "reflectionFactoryAccess";
};

grant codebase "file:${project.build.directory}/classes/-" {
  permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
  permission java.lang.RuntimePermission "accessDeclaredMembers";
  permission java.lang.RuntimePermission "setContextClassLoader";
  permission java.lang.RuntimePermission "getClassLoader";
  permission java.util.PropertyPermission "*", "read";
  permission java.io.FilePermission "<<ALL FILES>>", "read,write";
  permission org.jboss.vfs.VirtualFilePermission "<<ALL FILES>>", "read";
  permission java.net.NetPermission "specifyStreamHandler";
  permission java.net.SocketPermission "home", "connect,resolve";
  permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
  permission java.lang.RuntimePermission "accessClassInPackage.sun.misc.*";
};
