# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.

grant codeBase "file:bundle/shellgui.jar" {
  permission org.osgi.framework.ServicePermission "org.ungoverned.osgi.bundle.shellgui.Plugin", "get";
};

grant codeBase "file:bundle/shelltui.jar" {
  permission org.osgi.framework.ServicePermission "org.ungoverned.osgi.service.shell.ShellService", "get";
};

grant codeBase "file:bundle/shellplugin.jar" {
  permission java.security.AllPermission;
};

grant codeBase "file:bundle/bundlerepository.jar" {
  permission java.security.AllPermission;
};

grant codeBase "file:bundle/permissionmanager.jar" {
  permission java.security.AllPermission;
};

grant codeBase "file:bundle/shell.jar" {
  permission java.security.AllPermission;
};

grant codeBase "file:${lib.dir}/felix.jar" {
  permission java.security.AllPermission;
};

grant codeBase "file:${lib.dir}/osgi.jar" {
  permission java.security.AllPermission;
};

grant codeBase "file:${lib.dir}/moduleloader.jar" {
  permission java.security.AllPermission;
};

grant {
  permission java.io.FilePermission "${user.home}${file.separator}.felix${file.separator}-", "read, write, delete";
  permission org.osgi.framework.PackagePermission "*", "EXPORT";
};
