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

## name of CamelContext
camel.springboot.name=mention

## This uses the Twitter 'cameltweet' account for testing purposes.
## do NOT use this twitter account in your applications!

camel.component.twitter-timeline.consumer-key=NMqaca1bzXsOcZhP2XlwA
camel.component.twitter-timeline.consumer-secret=VxNQiRLwwKVD0K9mmfxlTTbVdgRpriORypnUbHhxeQw
camel.component.twitter-timeline.access-token=26693234-W0YjxL9cMJrC0VZZ4xdgFMymxIQ10LeL1K8YlbBY
camel.component.twitter-timeline.access-token-secret=BZD51BgzbOdFstWZYsqB5p5dbuuDV12vrOdatzhY4E

## This uses Camel test Salesforce developer account please use your own account in your applications

## Consumer Key of the connected application
camel.component.salesforce.clientId=3MVG9szVa2RxsqBZXHfqsW3hf9HQp_N6qdSmpjKMzSJaEL4UP161JlDkE32EigL82ra_jM1WuQgF4rYDgzL3u
## Consumer Secret of the connected application
camel.component.salesforce.clientSecret=1039611643161946846
## refresh_token from OAuth flow
camel.component.salesforce.refreshToken=5Aep861HDR3iASSXIX6hI7M1qMWSCs1Ym57WUH1ftjE7RvnM7MvnAXx9EZaw_HIoNCKktNsuhx.xwjLThofuJH4
## you can also use:
#camel.component.salesforce.userName=<Salesforce username>
#camel.component.salesforce.password=<Salesforce password>
