#
#  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.
[feature name=composum-nodes]
[variables]
    composum.nodes.version=1.11.5

[artifacts startLevel=20]

  com.composum.sling.core/composum-sling-core-commons/${composum.nodes.version}
  com.composum.sling.core/composum-sling-core-console/${composum.nodes.version}
  com.composum.sling.core/composum-sling-core-jslibs/${composum.nodes.version}
  com.composum.sling.core/composum-sling-user-management/${composum.nodes.version}
  com.composum.sling.core/composum-sling-package-manager/${composum.nodes.version}
  com.composum.sling.core.osgi/composum-sling-osgi-package-installer/${composum.nodes.version}
  org.apache.jackrabbit.vault/org.apache.jackrabbit.vault/3.4.0

[configurations]

  # the whitelisting of administrative login (to replace by service users in Nodes 2.0)
  org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment-composum
    whitelist.name="composum"
    whitelist.bundles=[
      "com.composum.core.commons",\
      "com.composum.core.pckgmgr",\
      "com.composum.core.pckginstall"
    ]
