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


###############################################################################
#                       USERGRID DEPLOYMENT PROPERTIES
###############################################################################
#
# Contained below are properties used to configure the Usergrid application.
# Some of the core settings depend on the specific Usergrid deployment architecture.
# For more info, check the docs at:
#     <http://usergrid.readthedocs.org/en/two-dot-o-instructions/index.html>
#
# All properties below will follow the below format:
#
#     # Property Description
#     #
#     property=value
#
# NOTE: If a property is commented out, its value is defaulted elsewhere in the
#       codebase and put here as a reference that the property can be overridden.
#
# DO NOT PUT INSTALLATION SPECIFIC OR CONFIDENTIAL SETTINGS HERE IF YOU PLAN
# TO COMMIT/PUSH THIS TO GIT.
#




###################  Usergrid Persistence Implementation  ####################
#
# Set the persistence implementation to use.  For 2.1+, this should be CP
#
# Valid values: CP or EM
#
usergrid.persistence=CP




###########################  Cassandra (Datastore)  ###########################
#
# These settings will configure how Usergrid interacts with with Cassandra and
# include properties used in Core Persistence and Classic Entity Manager.
#

# Set a property to tell Usergrid which version of cassandra is being used.
#
#cassandra.version=1.2


# Set the Cassandra cluster name that this instance of Usergrid should use.
#
cassandra.cluster=Test Cluster

# Set a comma-separated list of one or more Cassandra hosts (host:port) that Usergrid will connect to.
# If no port is provided, the default Cassandra port of 9160 will be used.
#
cassandra.url=localhost:9160


# Set the system level keyspace to be used by Usergrid (for management type functions.
#
#cassandra.system.keyspace=Usergrid

# Set the value of the local data center configured in your cassandra deployment.  If used, this
# must exactly match the datacenter named used in Cassandra.  Example 'us-west-2' or 'us-east-1'
#
#cassandra.datacenter.local=

# Set the Cassandra keyspaces to be used by Usergrid for storing data.
#
#collections.keyspace=Usergrid_Applications
cassandra.keyspace.application=Usergrid_Applications

# Set the keyspace strategy to be used.
#
cassandra.keyspace.strategy=SimpleStrategy

# Set the replication factor to be used for cassandra.keyspace.application.
#
cassandra.keyspace.replication=replication_factor:1

# Tell Usergrid that Cassandra is not embedded.
#
cassandra.embedded=false

# Set the maximum number of connections to Cassandra
#
#cassandra.connections=15

# Read timeout for an individual request (in millseconds)
#
#cassandra.timeout=5000


# Set the credentials used for Cassandra, if any.
#
cassandra.username=
cassandra.password=

# Set the Cassandra consistency levels for use in the cluster. With large
# clusters, > 3 nodes, these settings could impact read and write performance.
# For balanced data consistency and performance, choose LOCAL_QUORUM.
#
# Usergrid currently uses two different Cassandra drivers (hector and astyanax).
#
# For hector:
#     cassandra.readcl
#     cassandra.writecl
#
# For astyanax:
#     usergrid.read.cl
#     usergrid.write.cl
#
# You should configure these to use the same consistency levels.  For possible
# values, see the following docs for each client:
#
#  hector: <http://hector-client.github.io/hector/build/html/content/consistency_level.html>
#  astyanax : <http://netflix.github.io/astyanax/javadoc/com/netflix/astyanax/model/ConsistencyLevel.html>

# Set the read consistency level.  This is the default Usergrid read consistency.
#
cassandra.readcl=LOCAL_QUORUM
usergrid.read.cl=CL_LOCAL_QUORUM

# Set the write consistency level.  This is the default Usergrid write consistency.
#
cassandra.writecl=LOCAL_QUORUM
usergrid.write.cl=CL_LOCAL_QUORUM

# Set an additional strict read consistency level.  When choosing to perform a
# consistent read from Usergrid, this is the consistency level used when reading
# from Cassandra.  Used only with astyanax client.
#
#usergrid.consistent.read.cl=CL_QUORUM


# Set the timeout used when writing unique values and logs to the datastore. (in seconds).
# If the datastore becomes unavailable before the timeout, the column will expire and
# not be left around in the application.
#
#collection.stage.transient.timeout=5

# Set the maximum number of pending mutations allowed in ram before it is flushed
# to cassandra.
#
#cassandra.mutation.flushsize=2000

# Set the cache size and timeout for entities
#
usergrid.entity_cache_size=200
usergrid.entity_cache_timeout_ms=500


# The maximum number of pending mutations allowed in RAM before it is flushed to cassandra
#
#cassandra.mutation.flushsize=2000

# Set the Cassandra keyspace to use for locking.
#
# NOTE: If this instance is deployed in a production cluster, the replication factor (RF)
#       on this keyspace MUST be updated to use an odd number. Even numbers for RF can
#       potentially cause the locks to fail, via "split brain" when read at QUORUM
#       on lock verification.
#
#
cassandra.lock.keyspace=Locks

# Set read and write consistency level for locking.
#
# NOTE: Used by hector client only.
#
cassandra.lock.readcl=LOCAL_QUORUM
cassandra.lock.writecl=LOCAL_QUORUM

# Set a timeout (in milliseconds) before Hector considers a thrift socket dead.
#
#cassandra.thriftSocketTimeout=0

# Set a flag that tells Hector whether or not to use the host's TCP keep alive settings.
#
#cassandra.useSocketKeepalive=false

##################### Async Threadpool Settings #####################

# Set the number of threads available in the Rx Async Thread Pool
#scheduler.io.threads=100


#####################  Elasticsearch (Indexing/Querying)  #####################
#
# Elasticsearch is used for indexing in Usergrid 2.x.  The settings below are
# used to configure how Usergrid interacts with Elasticsearch, including basic
# host and port configuration.
#

# Set a comma-separated list of one or more Elasticsearch hosts.
#
#elasticsearch.hosts=127.0.0.1

# Set the port used when connecting to Elasticsearch.
#
#elasticsearch.port=9300

# Set the Elasticsearch cluster name
#
elasticsearch.cluster_name=elasticsearch


# Set the Elasticsearch client node name
#
#elasticsearch.node_name=default

# Set how Elasticsearch should be started.  Valid values: embedded, forked or remote
#
#elasticsearch.startup=remote


# Set the number of primary shards to use for an index in Elasticsearch.  Typically 2x or 3x the ES nodes.
#
# Depending on the use case for Usergrid, these numbers may vary. Usergrid is defaulted
# to a higher number of shards based on typical Elasticsearch clusters being >= 6 nodes.
# You can choose how it's sharded in Elasticsearch to reach optimal indexing for your dataset.  For more
# info about sharding, here is a good starting point:
# <https://www.elastic.co/guide/en/elasticsearch/guide/current/routing-value.html>
#
#elasticsearch.number_shards=18
#elasticsearch.number_replicas=1
#elasticsearch.management_number_shards=18
#elasticsearch.management_number_replicas=1

# Set an alias used for this running instance of Usergrid.  This allows you to
# configure multiple Usergrid instances pointing to the same Elasticsearch cluster,
# but have data indexed separately for optimal querying. (Multi-tenacy use.)
#
#elasticsearch.alias_postfix=alias

# Set a timeout for the cursor returned with query responses.
#
#elasticsearch.cursor_timeout.minutes=2

# Set the number of failures that occur before refreshing an Elasticsearch client.
#
#elasticsearch.fail_refresh=20

# Set a flag to force refresh the index after every write into the index. This
# setting is not advised to be set to TRUE as it will have a tremendous impact
# negatively on performance.  USE THIS ONLY FOR TESTING
#elasticsearch.force_refresh=false

# Set the maximum buffer size to use before sending index write requests to Elasticsearch.
#
#elasticsearch.buffer_size=1000

# Set the maximum buffer size to use when performing re-index requests.
#
#elasticsearch.reindex.buffer_size=1000

# Set the batch size to use when sending batched index write requests to Elasticsearch.
#
#elasticsearch.batch_size=1000

# Set the maximum time to wait before the Usergrid buffer flushes and sends index
# write requests to Elasticsearch. This is used so the application doesn't wait
# forever for the buffer to reach its size before writing data to Elasticsearch.
#
#elasticsearch.buffer_timeout=250

# Set the write consistency level for writing into the Elasticsearch index.  The
# default value is 'one', and you can configure 'all' and 'quorum'.
#
#elasticsearch.write_consistency_level=one


# Set the timeout used when writing into the Elasticsearch index. (in milliseconds)
#
#elasticsearch.write.timeout=5000

# Set the type of client that Usergrid uses for Elasticsearch.  Default is NODE
# and should be left in this configuration.  For more info, check the Elasticsearch
# docs at:
#  <https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/client.html>
#
#elasticsearch.client.type=NODE

# Set the maximum number of searches that are allowed during a refresh.
#
#elasticsearch.refresh_search_max=10

# Set the amount of time to wait when Elasticsearch rejects a requests before
# retrying.  This provides simple backpressure. (in milliseconds)
#
#elasticsearch.rejected_retry_wait



# Properties to control the number of buckets in the index.
#
#elasticsearch.index_bucket_count=5




############################ Usergrid Queuing  ##########################
#
# Usergrid implements queueing to help provide optimal read/write performance.
# The below properties are used to change queue providers and tune Usergrid
# for reading and processing data from the queues.
#
#

# Flag to override Usergrid and force use default built-in queue implementation
# and not to use any 3rd party queue services like Amazon SNS and SQS
#
#usergrid.use.default.queue=false

# The number of worker threads used to read index write requests from the queue.
#
#elasticsearch.worker_count=8

# Set the number of worker threads used for processing index write requests to
# Elasticsearch from the buffer.
#
#index.flush.workers=10

# Set the implementation to use for queuing in Usergrid.
# Valid values: TEST, LOCAL, SQS, SNS
# NOTE: SQS and SNS equate to the same implementation of Amazon queue services.
#
#elasticsearch.queue_impl=LOCAL

# Sets a flag to resolve the LOCAL queue implementation service synchronously.
# Use only when elasticsearch.queue_impl=LOCAL
#
#elasticsearch.queue_impl.resolution=false

# Set the read timeout for processing messages in the queue. (in milliseconds)
#
#
#elasticsearch.queue_read_timeout=10000

# Set the visibility timeout for messages created in the queue. (in milliseconds)
#
#
#elasticsearch.queue_visibility_timeout=12000000

# Set the timeout in locks from reading messages transitionally from a queue. (in seconds)
#
usergrid.queue.lock.timeout=5




#################### Amazon Queue Implementation Properties ###################
#
# The below settings are specific to the Amazon queue implementation.  Keep in
# mind that any region values must exactly match the regions specified on this
# page:
#  <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html>
#

# Set the primary region to use for amazon queues.
#
#usergrid.queue.region=us-east-1

# Set a flag to determine if Usergrid should use a multi-region Amazon queue
# implementation.
#
#usergrid.queue.multiregion=false

# Set a comma-separated list of one or more Amazon regions to use if multiregion
# is set to true.
#
#usergrid.queue.regionList=us-east-1

# Set the amount of time (in minutes) to retain messages in a queue.
# 1209600 = 14 days (maximum retention period)
#
#usergrid.queue.retention=1209600

# Set the amount of time (in minutes) to retain messages in a dead letter queue.
# 1209600 = 14 days (maximum retention period)
#
#usergrid.queue.deadletter.retention=1209600

# Set the maximum number of messages to deliver to a dead letter queue.
#
#usergrid.queue.deliveryLimit=5

# Set the number of async workers used to publish messages to SNS
#
#usergrid.queue.publish.threads=100

# Set the queue size for the number of messages that can be queued during async publishing to SNS
#
#usergrid.queue.publish.queuesize=850000


#########################  Usergrid Cluster Configuration ###################
#
# Usergrid includes a multi-region clustering system.
# To user it you must specify your region, the list of regions and seeds for each region.
#

# This is an experimentation new feature, disabled by default
usergrid.cluster.enabled=false

# Comma-separated list of regions to be considered
usergrid.cluster.region.list=default

# The regions of this local instance of Usergrid
usergrid.cluster.region.local=default

# Comma-separated lists of cluster seeds each with format {region}:{hostname}
usergrid.cluster.seeds=default:localhost

# Port used for cluster communications.
usergrid.cluster.port=2551

# If unspecified then system will use InetAddress.getLocalHost().getHostName()
usergrid.cluster.hostname=


#########################  Usergrid Unique Values Validation ##################
#
# These only apply if the above Usergrid cluster system is enabled.
#

# The number of unique value actors to start on each Usergrid instance.
collection.uniquevalues.actors=300

# TTL of unique value reservation in in-memory cache
collection.uniquevalues.cache.ttl=10

# TTL of a unique value reservation when written to Cassandra
collection.uniquevalues.reservation.ttl=10

# The default authoritative region for when is not specified elsewhere; by default leave this empty
collection.uniquevalues.authoritative.region=


##############################  Usergrid Scheduler  ###########################
#
# Usergrid uses a scheduler for some functions such as scheduled push notifications.
# Use the below settings to configure the scheduler.
#

# Enable the scheduler
#
usergrid.scheduler.enabled=true

# Time in milliseconds that a job can be started without a heartbeat before being
# considered dead.
#
# NOTE:  This must be high enough so jobs that are iteration based can finish an
#        iteration and update the heartbeat.
#
usergrid.scheduler.job.timeout=120000

# Set the scheduler poll interval to check for new jobs. (in millseconds)
#
usergrid.scheduler.job.interval=5000

# Set the max number of times a job can fail before removing it permanently.
#
usergrid.scheduler.job.maxfail=10

# Set the number of workers for the scheduler jobs.
#
usergrid.scheduler.job.workers=4

# Set the path to the queue in the managment app to get jobs from
#
usergrid.scheduler.job.queueName=/jobs


###############################  Usergrid Push Notifications  #############################
#
# Usergrid processes individual push notifications asynchronously using a queue.  Below are
# settings that can be used to tune this processing.


# Set the number of queue consumers to read from the in-region push notification queue.
#
usergrid.push.worker_count=2

# Set the sleep time between queue polling ( in milliseconds)
#
usergrid.push.sleep=100

# This setting determines the inmemory cache TTL (in minutes) for push notifications queue managers.
#
usergrid.push.queuemanager.cache.time-to-live=10

# This setting determines the inmemory cache size (# elements) for push notifications queue managers.
#
usergrid.push.queuemanager.cache.size=200



################################  Usergrid Central SSO  #############################
##
## Usergrid has a feature to provide a distributing SSO system.  The below configurations
## allow you to configure the central Usergrid SSO server.
##
#
## Set the base URL of the central Usergrid SSO server.  This will enable
## External Token Validation for Admin Users and will configure this Usergrid
## instance to delegate all Admin User authentication to the central Usergrid SSO
## server. See also: https://issues.apache.org/jira/browse/USERGRID-567
##
#usergrid.central.url=
#usergrid.central.enabled=

# Set the HTTP Client connection pool for connections to the SSO central server.
#
usergrid.central.connection.pool.size=40
usergrid.central.connection.timeout=10000
usergrid.central.read.timeout=10000



####################   Usergrid External SSO Configuration   #####################
usergrid.external.sso.enabled=false
usergrid.external.sso.provider=
usergrid.external.sso.url=

###############################  Usergrid Assets  #############################
#
# Usergrid provides the ability to store assets (images, binary data,etc.).  The
# configurations for where to store this information are below.
#

# Set the bucket name used for storing assets.
#
usergrid.binary.bucketname=usergrid-binaries

# Set the maximum size for a single asset (in MB).
#
#usergrid.binary.max-size-mb=50

# Set the number of worker threads available for uploading assets to a remote
# storage provider.  (Amazon S3 currently supported)
#usergrid.binary.upload-workers=40

# Set the location for storing and temporary files.
#
usergrid.temp.files=/tmp/usergrid

# Set the implementation of binary uploading to be used
# Aws for aws s3 uploading, local
usergrid.binary.uploader=local




###############################  Usergrid Admin  ##############################
#
# Usergrid has a sysadmin user which has access to the complete Usergrid system
# and all data.  Below are settings for this user and other administrative functions.
#
#

# Set the sysadmin login details.
#
usergrid.sysadmin.login.name=superuser
usergrid.sysadmin.login.email=super@usergrid.com
usergrid.sysadmin.login.password=test
usergrid.sysadmin.login.allowed=true

#enable if superuser can create an org without any user associated with it.
usergrid.superuser.addorg.enable=true

# if usergrid.sysadmin.login.allowed=true, only allows sysadmin login if request is localhost
# if usergrid.sysadmin.login.allowed=false, this property has no effect
usergrid.sysadmin.localhost.only=false

# Set admin notification email properties
#
usergrid.sysadmin.email=




##############################  Usergrid Server  #############################
#
# Below settings are general server configuration properties for Usergrid.  Here
# you will configure things like SMTP, redirect urls, etc.
#

# Set SMTP server configuration details.
#
mail.transport.protocol=
mail.smtps.host=
mail.smtps.port=
mail.smtps.auth=
mail.smtps.username=
mail.smtps.password=

# Set the sender email info for emails sent by Usergrid
#
usergrid.management.mailer=Usergrid Mailer <mailer@usergrid.com>

# Set the URL to redirect any HTTP requests sent to the root of the server /
#
usergrid.redirect_root=

# Set the graphite host that Usergrid should send metrics to.
#
#usergrid.metrics.graphite.host=false

# Set a flag for public/private recaptcha url.  For example, this is used to display
# recaptcha when resetting passwords.  If both are false, recaptcha will not be
# used
#
#usergrid.recaptcha.public=false
#usergrid.recaptcha.private=false

# swagger.basepath is replaced by usergrid.api.url.base
#
#swagger.basepath=http://localhost:8080

# Set the flag to disable the Usergrid Mongo Emulation Server
#
usergrid.mongo.disable=true

# Set the flag to disable WebSocket support
#
usergrid.websocket.disable=true

# Set batch size for when to submit counter batches.
#
usergrid.counter.batch.size=50000

# Set the time interval for when to submit counter batches.
#
usergrid.counter.batch.interval=30

# Set build number for display
# Note: ${version is obtained from the pom.xml <version>}
#
usergrid.version.build=${version}

# Set a unique cluster name that this Usergrid instance is a member of.  This MUST be set to something
# other than 'default-property', otherwise startup will fail.
#
#usergrid.cluster_name=default-property

# Usergrid will cache computed authentication and authorization information in Cassandra.
# The cache time-to-live is specified in seconds and defaults to the value below.
# Setting to zero will disable the authentication cache.
#
usergrid.auth.cache.time-to-live=3600

# This setting determines the inmemory cache TTL.  Set this low so updates in other regions will be picked up on all
# servers after this in memory cache expires
#
usergrid.auth.cache.inmemory.time-to-live=30

# Usergrid will keep an in memory cache so it does not have to get from the distributed cache in Cassandra as often.
# This property will allow the cache to be tuned based on JVM memory settings.
#
usergrid.auth.cache.inmemory.size=3000

# Default connection types to return for an entity (fewer connection types increases performance)
# none, in (only connections inbound to the entity), out (only connections outbound from the entity),
# all (= in + out)'
usergrid.rest.default-connection-param=all

# Number of times to retry attempt to access management app on startup
management.app.max.retries=100


##############################  Usergrid Testing  #############################
#
# Below properties are used if wanting to set up a Usergrid organization, app,
# user for the purposes of testing.  If these properties are null or missing,
# the test account creation is ignored.
#

# Set flags to disable test features.
#
usergrid.setup-test-account=false
usergrid.test=false

usergrid.test-account.app=test-app
usergrid.test-account.organization=test-organization
usergrid.test-account.admin-user.username=test
usergrid.test-account.admin-user.name=Test User
usergrid.test-account.admin-user.email=test@usergrid.com
usergrid.test-account.admin-user.password=test



# Set some test properties
#
#usergrid.version.database=1.0.0
#usergrid.version.schema=1.0.0
#usergrid.version.properties=1.0.0




#########################  Usergrid Activation/Confirmation  ##################
#
# Usergrid will send emails for activation and provide links for users to visit
# for activation.  In the event that Usergrid is behind a proxy or public endpoint,
# the below properties allow the system to use a different URL and control the
# activation behavior.
#
#

# Set a flag to allow public org registrations
usergrid.management.allow-public-registrations=true

# Set the requirements for activiation and confirmations
usergrid.sysadmin.approve.users=false
usergrid.sysadmin.approve.organizations=false
usergrid.management.notify_sysadmin_of_new_organizations=false
usergrid.management.notify_sysadmin_of_new_admin_users=false
usergrid.management.admin_users_require_confirmation=false
usergrid.org.sysadmin.email=
usergrid.admin.sysadmin.email=

# Activation/reset URLS build by combining base and path
#
# *.url.path properties shouldn't need to be modified
#

# no trailing slash
usergrid.api.url.base=http://localhost:8080/ROOT


# org config property name regex
# don't use backslashes in the regex, as they don't play well in properties files
# instead, use character class ([.] instead of backslash-period)
usergrid.org.config.property.regex=usergrid[.]view[.].*



###########################  Usergrid Email Templates  ########################
#
# During Usergrid account and application registration workflows, the system will
# email the user and/or admin for activations and notifications.  The below
# properties configure the language used in email templates sent by Usergrid.
#


# Email to sysadmin to notify that a new organization has been activated.
#
usergrid.management.email.sysadmin-organization-activated=\
    <p>Organization account for ${organization_name}, owned by ${organization_owners}, \
    has been successfully activated.</p>

# Email to sysadmin to notify that a new admin user has been activated.
#
usergrid.management.email.sysadmin-admin-activated=\
    <p>Admin user account for ${user_email}has been successfully activated.</p>

# Email to sysadmin to approve and activate new organizations.
#
usergrid.management.email.sysadmin-organization-activation=\
    <p>To activate the organization account for ${organization_name}, owned by ${organization_owners}, \
    click here:</p>\n<p><a href="${activation_url}">${activation_url}</a></p>

# Email to organization owner to request confirmation.
#
usergrid.management.email.organization-confirmation=\
    <p>To confirm your organization account, click here:</p>\n\
    <p><a href="${confirmation_url}">${confirmation_url}</a></p>

# Email to organization owner to notify approval is pending
#
usergrid.management.email.organization-activation-pending=\
    <p>Your organization account ${organization_name} is awaiting approval.</p>

# Email to organization owner to notify organization is active
#
usergrid.management.email.organization-activated=\
    <p>Your organization account ${organization_name} has been successfully activated.</p>

# Email to sysadmin to approve and activate new admin
#
usergrid.management.email.sysadmin-admin-activation=\
    <p>To activate the user account for ${user_email}, click here:</p>\n\
    <p><a href="${activation_url}">${activation_url}</a></p>

# Email to admin user to confirm email
#
usergrid.management.email.admin-confirmation=\
    <p>To confirm your email address ${confirm_email}, click here:</p>\n\
    <p><a href="${confirmation_url}">${confirmation_url}</a></p>

# Email to admin user to notify email has been confirmed
#
usergrid.management.email.admin-confirmed=\
    <p>Your email address ${confirmed_email} has been confirmed.</p>\n\
    <p>You will receive another email with your account has been activated.</p>

# Email to admin to notify account is active
#
usergrid.management.email.admin-activated=\
    <p>Your user account has been successfully activated.</p>

# Email to admin to notify account has been added to an organization
#
usergrid.management.email.admin-invited=\
    <p>Your user account has been added to the organization ${organization_name}.</p>

# Email to admin for password reset
#
usergrid.management.email.admin-password-reset=\
    <p>To reset your password, click here:</p>\n\
    <p><a href="${reset_url}">${reset_url}</a></p>

# Email to admin to approve and activate new app user
#
usergrid.management.email.admin-user-activation=\
    <p>To activate the user account for ${user_email}, click here:</p>\n\
    <p><a href="${activation_url}">${activation_url}</a></p>

# Email to user to request activation
#
usergrid.management.email.user-confirmation=\
    <p>To confirm your user account, click here:</p>\n\
    <p><a href="${confirmation_url}">${confirmation_url}</a></p>

# Email to user to notify account is confirmed
#
usergrid.management.email.user-confirmed=\
    <p>Your user account has been successfully confirmed.</p>\n\
    <p>You will receive another email with your account has been activated.</p>

# Email to user to notify account is active
#
usergrid.management.email.user-activated=\
    <p>Your user account has been successfully activated.</p>

# Email to user to reset password
#
usergrid.management.email.user-password-reset=\
    <p>To reset your password, click here:</p>\n\
    <p><a href="${reset_url}">${reset_url}</a></p>

# Email to admin to notify new app user has been successfully activated
#
usergrid.management.email.admin-user-activated=\
    <p>User account for ${user_email} has been successfully activated</p>

# Email to user to recover pin
#
usergrid.management.email.user-pin=\
    <p>Your application pin is:</p>\n\
    <p>${pin}</p>

# Email footer
#
usergrid.management.email.footer=\
    <p></p>\n
