#
#  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.
#


#
# This file contains localization strings for configuration labels and
# descriptions as used in the metatype.xml descriptor generated by the
# the Sling SCR plugin


org.apache.sling.extensions.webconsolesecurityprovider.internal.SlingWebConsoleSecurityProvider.name = Apache Sling Web Console Security Provider
org.apache.sling.extensions.webconsolesecurityprovider.internal.SlingWebConsoleSecurityProvider.description = Configuration for the security provider \
 used to verfiy user credentials and grant access to the Apache Felix \
 Web Console based on registered JCR Repository users.
users.name = User Names
users.description = Names of users granted full access to the Apache Felix \
 Web Console. By default this lists the "admin" user. A maximum of 20 users \
 may be configured. Administrators are encouraged to create a group whose \
 members are to be granted access to Web Console instead of allowing access \
 to individual users.
groups.name = Group Names
groups.description = Names of groups whose members are granted full access \
 to the Apache Felix Web Console. The default lists no groups. Administrators \
 are encouraged to create a group whose members are to be granted access to \
 Web Console. A maximum of 20 groups may be configured. Using groups to control \
 access requires a Jackrabbit based repository.