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

path.name = path
path.description = the path or paths this service is in charge for

service.ranking.name = service ranking
service.ranking.description = service property for identifying the service's ranking number

# Authentication Handler
org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.consumerKey.name = consumer key
org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.consumerKey.description = consumer key from XING

org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.cookie.user.name = user cookie
org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.cookie.user.description = cookie to read the encoded (BASE64) user data (JSON) from

org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.cookie.userid.name =  user id cookie
org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.cookie.userid.description = cookie to read user id from

org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.cookie.maxSize.name = max. cookie size
org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.cookie.maxSize.description = maximal number of characters to use for processing from cookie's value

org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.login.path.name = login path
org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.login.path.description = path to redirect to for login

org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.logout.path.name = logout path
org.apache.sling.auth.xing.login.impl.XingLoginAuthenticationHandler.logout.path.description = path to redirect to for logout

# User Manager
org.apache.sling.auth.xing.login.impl.DefaultXingLoginUserManager.secretKey.name = secret key
org.apache.sling.auth.xing.login.impl.DefaultXingLoginUserManager.secretKey.description = secret key from XING (given as signature salt)

org.apache.sling.auth.xing.login.impl.DefaultXingLoginUserManager.user.property.data.name = data property
org.apache.sling.auth.xing.login.impl.DefaultXingLoginUserManager.user.property.data.description = property where to store the user data from XING in an user

org.apache.sling.auth.xing.login.impl.DefaultXingLoginUserManager.user.property.hash.name = hash property
org.apache.sling.auth.xing.login.impl.DefaultXingLoginUserManager.user.property.hash.description = property where to store the hash from XING in an user

org.apache.sling.auth.xing.login.impl.DefaultXingLoginUserManager.user.create.auto.name = create user automatically
org.apache.sling.auth.xing.login.impl.DefaultXingLoginUserManager.user.create.auto.description = create a new JCR user automatically with given and validated user data from XING

org.apache.sling.auth.xing.login.impl.DefaultXingLoginUserManager.user.update.auto.name = update user automatically
org.apache.sling.auth.xing.login.impl.DefaultXingLoginUserManager.user.update.auto.description = update an existing JCR user automatically with given and validated user data from XING
