#########
#  ============LICENSE_START====================================================
#  org.onap.aaf
#  ===========================================================================
#  Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
#  ===========================================================================
#  Licensed 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.
#  ============LICENSE_END====================================================
#
############################################################
# Properties for OAuth Example
#  Jonathan Gathman
#   on 2018-01-30
# These properties are the BARE essentials for OAuth calling
############################################################
# aaf_locate is the replacement whenever a URL is set to "AAF_LOCATE_URL"
# at this time, only AAF has this ability.
#
# This is, effectively, the Environment you will use for AAF Location
# TEST ENV
aaf_locate_url=https://aaftest.test.att.com

# IST ENV
# aaf_locate_url=https://aafist.test.att.com

# PROD ENV
# aaf_locate_url=https://aaf.it.att.com

cadi_latitude=<YOUR Latitude (try bing.com/maps)
cadi_longitude=<YOUR Longitude>

aaf_url=https://AAF_LOCATE_URL/locate/com.att.aaf.service:2.0
cadi_keyfile=<YOUR Keyfile.  Create with java -jar cadi-core<Version>.jar keygen keyfile.  chmod 400 keyfile>

aaf_id=<YOUR Fully Qualified AAF MechID>
aaf_password=enc:<YOUR encrypted passwrod.  Create with java -jar cadi-core<Version>.jar digest keyfile>
# aaf_alias=<YOUR AAF Certman Generated alias FOR the right AAF Env>

# aaf_conn_timeout=6000
# aaf_timeout=10000

# A Sample AAF OAuth Enabled Service 
#aaf_oauth2_hello_url=https://AAF_LOCATE_URL/locate/com.att.aaf.hello:2.0/hello
aaf_oauth2_hello_url=http://135.46.170.156:32245/restservices/echo/v1/testCXF/testGet

# OAuth2
# AAF OAuth2 Service. 
aaf_oauth2_token_url=https://AAF_LOCATE_URL/locate/com.att.aaf.token:2.0/token
aaf_oauth2_introspect_url=https://AAF_LOCATE_URL/locate/com.att.aaf.introspect:2.0/introspect

#ISAM
aaf_alt_oauth2_domain=isam.att.com
#aaf_alt_oauth2_client_id=<get from ISAM>
#aaf_alt_oauth2_domain=people.osaaf.org

#ISAM TEST
aaf_alt_oauth2_token_url=https://oauth.stage.elogin.att.com/mga/sps/oauth/oauth20/token
aaf_alt_oauth2_introspect_url=https://oauthapp.stage.att.com/mga/sps/oauth/oauth20/introspect
aaf_alt_oauth2_client_secret=enc:<encrypt with cadi tool>

#ISAM PROD
#aaf_alt_oauth2_token_url=https://oauth.idp.elogin.att.com/mga/sps/oauth/oauth20/token
#aaf_alt_oauth2_introspect_url=https://oa-app.e-access.att.com/mga/sps/oauth/oauth20/introspect 
#aaf_alt_oauth2_client_secret=enc:<encrypt with cadi tool>


