# WARNING: DO NOT EDIT THIS FILE (unless you are changing the underlying code)
# Instead, create a file called local.yml in the same place,
# copy any sections you want to change to it, and edit them there.

# Your secret key for verifying cookie session data integrity.
# If you change this key, all old sessions will become invalid!
# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.

# do not use the defaults in production!
SESSION_KEY: '_otwarchive_session'
SESSION_SECRET: '898f6d0363863ec79d782238cd1c5767636d712cc0d138238bcd5bfc9d2672fb852380050e52c03a0401175d909c09dba48512a119d46b126a84c2dd05716eb5'

DEFAULT_SESSION_LENGTH_IN_WEEKS: 2
REMEMBERED_SESSION_LENGTH_IN_MONTHS: 3

# This length is hardcoded into the reset_password_instructions email message,
# defined in config/locales/mailers/en.yml. If you change this value, you should
# also change the message (and vice versa).
DAYS_UNTIL_RESET_PASSWORD_LINK_EXPIRES: 7

# This also affects the link included in the admin account creation email.
DAYS_UNTIL_ADMIN_RESET_PASSWORD_LINK_EXPIRES: 5

# If more than PASSWORD_RESET_LIMIT password reset emails are sent within
# PASSWORD_RESET_COOLDOWN_HOURS time, then password resets for that user
# will be prevented until PASSWORD_RESET_COOLDOWN_HOURS after the last
# password reset.
PASSWORD_RESET_LIMIT: 3
PASSWORD_RESET_COOLDOWN_HOURS: 12

# email addresses
RETURN_ADDRESS: 'do-not-reply@example.org'
SPAM_ALERT_ADDRESS: 'abuse-discuss@example.org'
SPAM_THRESHOLD: 15
ADMIN_ADDRESS: 'admin@example.org'
TAG_WRANGLER_SUPERVISORS_ADDRESS: 'tagwranglers-personnel@example.org'

# Because the default email addresses are fake,
# email delivery is turned off by default, even for production.
# The log file will nonetheless show "Sent mail:"
#
# Note that this is independent from whether the scheduled email-sending
# tasks will be run -- to make changes to that, please see schedule.rb
# and your deploy file.
PERFORM_DELIVERIES: false

# email server
SMTP_SERVER: localhost
SMTP_PORT: 25
SMTP_DOMAIN: localhost
SMTP_OPENSSL_VERIFY_MODE: none
SMTP_ENABLE_STARTTLS_AUTO: false
SMTP_ENABLE_STARTTLS: false
# if required for email authentication
#SMTP_USER:
#SMTP_PASSWORD:
#SMTP_AUTHENTICATION: # :plain, :login or :cram_md5

# Branding
APP_URL: 'http://www.example.org'
APP_NAME: 'Example Archive'
APP_HOST: 'archiveofourown.org'
APP_SHORT_NAME: 'AO3'
LOGO: 'logo.png'
ALT_LOGO: 'Archive of Our Own'
OTWLOGO: 'OTWLogo.png'
OTWALT_LOGO: 'OTW Logo:closing the circle of the copyright symbol, it symbolizes our creative engagement with media: participating and not just consuming.'
REVISION: ''
ES_URL: 'http://127.0.0.1:9400'
MEMCACHED_SERVERS: '127.0.0.1:11211'
ZOHO_URL: 'https://desk.zoho.com'

# tag settings
DELIMITER_FOR_INPUT: ','  # if you change this, you will need to change
# validates_format_of :name, in app/models/tag.rb
DELIMITER_FOR_OUTPUT: ', '

# accounts and invitations
# these can be overridden in the admin controller
INVITE_FROM_QUEUE_ENABLED: true
INVITE_FROM_QUEUE_NUMBER: 10
# How often INVITE_FROM_QUEUE_NUMBER of invites are sent from the queue, in hours
INVITE_FROM_QUEUE_FREQUENCY: 12

HOURS_BEFORE_RESEND_INVITATION: 24
# this is whether or not people without invitations can create accounts
ACCOUNT_CREATION_ENABLED: false
DAYS_TO_CONFIRM_EMAIL_CHANGE: 7
# number of invites users can request
MAX_USER_INVITE_REQUEST: 10
# number of accounts users can block
MAX_BLOCKED_USERS: 2000
# number of accounts users can mute
MAX_MUTED_USERS: 2000

# this determines how long we keep processed results like tag set nominations in redis
DAYS_TO_SAVE_PROCESSED: 56

# validation values -- max/min lengths
TITLE_MAX: 255
TITLE_MIN: 1
SUMMARY_MAX: 1250
NOTES_MAX: 5000
COMMENT_MAX: 10000
TAG_MAX: 150
CONTENT_MIN: 10
CONTENT_MAX: 510000
CONTENT_MAX_DISPLAYED: 500000
LOGNOTE_MIN: 5
LOGNOTE_MAX: 1250
FEEDBACK_SUMMARY_MAX_DISPLAYED: 100
FEEDBACK_SUMMARY_MAX: 107
INFO_MAX: 100000
FAQ_MAX: 200000
ICON_ALT_MAX: 250
ICON_COMMENT_MAX: 50
ICON_SIZE_KB_MAX: 500
LOGIN_LENGTH_MIN: 3
LOGIN_LENGTH_MAX: 40
PASSWORD_LENGTH_MIN: 6
PASSWORD_LENGTH_MAX: 40
ADMIN_PASSWORD_LENGTH_MIN: 10
ADMIN_PASSWORD_LENGTH_MAX: 40

# The maximum number of tags you can add to a collection
COLLECTION_TAGS_MAX: 10

# The maximum number of user-defined tags you can add to a work or external work
USER_DEFINED_TAGS_MAX: 75

# max number of tags of each type allowed in challenge prompts (requests/offers)
# increasing this number can lead to slower automated matching
PROMPT_TAGS_MAX: 20

# max number of potential matches to generate
POTENTIAL_MATCHES_MAX: 50
# min number of potential matches to allow
POTENTIAL_MATCHES_MIN: 10
# max percentage of participants to match
POTENTIAL_MATCHES_PERCENT: 10

# These options control the number of tags we'd ideally like to see in each tag
# type in a gift exchange, in order to ensure that indexing on that type (to
# speed up matching) will yield good results. The number scales with the number
# of signups (using the divisor), but is capped at the maximum. Increasing the
# maximum (and decreasing the divisor) will cause the preprocessing step to
# take somewhat longer.
PREPROCESS_COUNT_TAGS_DIVISOR: 10
PREPROCESS_COUNT_TAGS_MAX: 10

# These options control how many prompts with "any_#{type}" an exchange can
# have before we consider that tag type to be difficult to index on.
PREPROCESS_COUNT_ANY_DIVISOR: 10
PREPROCESS_COUNT_ANY_MIN: 10

# max number of prompts of each type (offer, request) allowed
PROMPTS_MAX: 10
# max for prompt memes (can be much higher than for gift exchanges, as there is no matching)
PROMPT_MEME_PROMPTS_MAX: 50


# max number of works/chapters that can be imported
IMPORT_MAX_WORKS: 25
IMPORT_MAX_CHAPTERS: 200
IMPORT_MAX_WORKS_BY_ARCHIVIST: 200

# max number of abuse reports to accept for a given user profile URL
ABUSE_REPORTS_PER_USER_MAX: 5
# max number of abuse reports to accept for a given work URL
ABUSE_REPORTS_PER_WORK_MAX: 5
# max number of abuse reports to accept from a given email
ABUSE_REPORTS_PER_EMAIL_MAX: 5

# number of items in various displays
ITEMS_PER_PAGE: 25
# must be less than ITEMS_PER_PAGE above
NUMBER_OF_ITEMS_VISIBLE_IN_DASHBOARD: 5
NUMBER_OF_ITEMS_VISIBLE_ON_HOMEPAGE: 3
COMMENT_THREAD_MAX_DEPTH: 5
TAGS_IN_CLOUD: 200
TAG_LIST_LIMIT: 300
# how many options there should be before we show a scrollable window, and how many there
# can be before we just use an autocomplete instead
OPTIONS_TO_SHOW: 3
MAX_OPTIONS_TO_SHOW: 20
MAX_KUDOS_TO_SHOW: 50
MAX_FAVORITE_TAGS: 20

# Used by Rack Attack, periods are measured in seconds
RATE_LIMIT_NUMBER: 300
RATE_LIMIT_PERIOD: 300
RATE_LIMIT_LOGIN_ATTEMPTS: 5
RATE_LIMIT_LOGIN_PERIOD: 20
RATE_LIMIT_ADMIN_LOGIN_ATTEMPTS: 10
RATE_LIMIT_ADMIN_LOGIN_PERIOD: 300
RATE_LIMIT_PER_NGINX_UPSTREAM:
  unicorn_elastic:
    limit: 300
    period: 300
  unicorn_elastic_bookmarks:
    limit: 300
    period: 300
RATE_LIMIT_PER_NGINX_UPSTREAM_USER:
  unicorn_elastic:
    limit: 300
    period: 300
RATE_LIMIT_SAFELIST: ["127.0.0.0/8", "10.0.0.0/8"]

# The number of tags to show on the search page:
TAGS_PER_SEARCH_PAGE: 50

# When updating tag counts, how many to do in one TagCountUpdateJob:
TAG_UPDATE_JOB_SIZE: 1000

# When updating tag counts, how many to do in one transaction:
TAG_UPDATE_BATCH_SIZE: 100

# We only start caching tag counts for tags used more than a certain number of times
TAGGINGS_COUNT_MIN_CACHE_COUNT: 1000

# For tagging changes, we only reindex tags used less than a certain number of times
TAGGINGS_COUNT_REINDEX_LIMIT: 1000

# how many signups in a challenge before we move to static summaries generated hourly
MAX_SIGNUPS_FOR_LIVE_SUMMARY: 20

DOWNLOAD_FORMATS: ['azw3', 'epub', 'mobi', 'pdf', 'html']

# Tag kinds and default tags
WARNING_CATEGORY_NAME: 'Archive Warning'
WARNING_DEFAULT_TAG_NAME: 'Choose Not To Use Archive Warnings'
WARNING_DEFAULT_TAG_DISPLAY_NAME: 'Creator Chose Not To Use Archive Warnings'
WARNING_NONE_TAG_NAME: 'No Archive Warnings Apply'
WARNING_NONE_TAG_DISPLAY_NAME: 'No Archive Warnings Apply'
WARNING_VIOLENCE_TAG_NAME: 'Graphic Depictions Of Violence'
WARNING_DEATH_TAG_NAME: 'Major Character Death'
WARNING_NONCON_TAG_NAME: 'Rape/Non-Con'
WARNING_CHAN_TAG_NAME: 'Underage Sex'

RATING_CATEGORY_NAME: 'Rating'
RATING_DEFAULT_TAG_NAME: 'Not Rated'
RATING_EXPLICIT_TAG_NAME: 'Explicit'
RATING_MATURE_TAG_NAME: 'Mature'
RATING_TEEN_TAG_NAME: 'Teen And Up Audiences'
RATING_GENERAL_TAG_NAME: 'General Audiences'

CATEGORY_CATEGORY_NAME: 'Category'
CATEGORY_GEN_TAG_NAME: 'Gen'
CATEGORY_HET_TAG_NAME: 'F/M'
CATEGORY_SLASH_TAG_NAME: 'M/M'
CATEGORY_FEMSLASH_TAG_NAME: 'F/F'
CATEGORY_MULTI_TAG_NAME: 'Multi'
CATEGORY_OTHER_TAG_NAME: 'Other'

MEDIA_CATEGORY_NAME: 'Media'
MEDIA_NO_TAG_NAME: 'No Media'
MEDIA_UNCATEGORIZED_NAME: 'Uncategorized Fandoms'
FANDOM_CATEGORY_NAME: 'Fandom'
FANDOM_NO_TAG_NAME: 'No Fandom'
RELATIONSHIP_CATEGORY_NAME: 'Relationship'
CHARACTER_CATEGORY_NAME: 'Character'
FREEFORM_CATEGORY_NAME: 'Additional Tags'
COMMON_CATEGORY_NAME: 'Common'
BANNED_CATEGORY_NAME: 'Banned'

# DATE TIME FORMAT see http://ruby-doc.org/core/classes/Time.html#M000392
DEFAULT_DATETIME_FORMAT: '%Y-%m-%d %I:%M%p'

# SEARCH TIPS
SEARCH_TIPS: ['arthur merlin words>1000 sort:hits', 'words:100', 'buffy gen teen AND "no archive warnings apply"', 'lex m/m (mature OR explicit)',
    'hetalia f/f sort:kudos', '"sherlock (tv)" m/m NOT "sherlock holmes/john watson"', 'austen words:10000-50000 sort:title',
    'katekyou "alternate universe" sort:>words', '"uchiha sasuke/uzumaki naruto" angst kudos>10'
]

# This is used to determine how many recent items
# to cache for recent lookups -- eg if we want to
# provide a "ten most recent" items to browse.
# used in CacheFinds module -- include CacheFinds in a model
# and the methods Model.recent and Model.last(#) will be
# enabled, cached on production/test environments.
MAX_RECENT: 20

# This determines the maximum value of (from + size) for searches
# to all indices (Elasticsearch index setting max_result_window).
# If a search has more results than this limit, the last page of
# search results will include a message advising the user to narrow
# their search or change their sorting options.
MAX_SEARCH_RESULTS: 100000

# This is used to determine how many works or how many authors have to be
# present in order for anonymous or mystery works to begin being displayed
ANONYMOUS_THRESHOLD_COUNT: 10

# This is used to determine how tolerant of changes to be when determining
# whether a comment should go back into moderation after editing or not
COMMENT_MODERATION_THRESHOLD: 10

# This is used to determine how tolerant of changes to be when determining
# whether a comment should be spam checked again when edited
EDITED_COMMENT_SPAM_CHECK_THRESHOLD: 10

# SANITIZER VERSION
SANITIZER_VERSION: 4

# parameters that must be natural integers and their default values
NONZERO_INTEGER_PARAMETERS:
  page: 1
  per_page: 25

# Enable image safety mode when sanitizing comments on the following parents for
# display. This is the parent_type of the comment, not the ultimate_parent,
# so if you want to add extra sanitization to work comments, use Chapter here.
# Options: AdminPost, Chapter, Tag.
PARENTS_WITH_IMAGE_SAFETY_MODE: []

# These fields are encrypted and should not have characters escaped or be treated as HTML
FIELDS_WITHOUT_SANITIZATION: ["password", "password_check", "password_confirmation"]

# These fields are query fields and are allowed to contain "less than" values
FIELDS_ALLOWING_LESS_THAN: ["query", "words", "kudos", "hits", "date", "bookmarkable_date", "word_count", "bookmarks_count", "comments_count", "kudos_count", "revised_at"]

# Only the following fields are allowed to have HTML. In others, all HTML tags
# will be stripped by the "sanitize_ac_params" filter.
#
# The exact HTML tags and attributes and protocols allowed are defined in:
# - config/initializers/gem-plugin_config/sanitizer_config.rb
# - lib/html_cleaner.rb
#
# If you add a new field to this list, you need to:
#
# - make sure every model containing the field also has a matching field "[fieldname]_sanitizer_version", e.g.
#     add_column :chapters, :content_sanitizer_version, :integer, default: 0, null: false, limit: 2
#
# - make sure the field is NOT permitted for mass updating (by not including it in params.permit calls)
#
# - display the field in views using the HtmlCleaner helper, e.g.
#     <%=raw sanitize_field(object, :fieldname) %>
#
# This will ensure that the field has been sanitized with the latest version of the sanitizer.
FIELDS_ALLOWING_HTML: ["about_me", "bookmarker_notes", "comment", "comment_content", "content", "description", "disabled_support_form_text", "endnotes", "faq", "intro", "notes",
  "rules", "series_notes", "signup_instructions_general", "signup_instructions_offers", "signup_instructions_requests", "summary"]

FIELDS_ALLOWING_HTML_ENTITIES: ["title"]

FIELDS_ALLOWING_MEDIA_EMBEDS: ["content"]

FIELDS_ALLOWING_CSS: ["content", "endnotes", "notes"]

# Domains that are not allowed be used as the src for audio and video HTML tags.
# Format: ["google.com", "archiveofourown.org"]
BANNED_MULTIMEDIA_SRCS: []

# Allowed CSS
#
# *** IMPORTANT: if you edit these values please also update the
# skins-creating.html file in public/help ***
#
# the following properties and keywords will be ADDED to the default set allowed
# in user-submitted CSS code, along with:
# - hex and rgb color values
# - numeric values specified with percentages or cm|em|ex|in|mm|pc|pt|px|%
# - image files specified with url(http://image.url/blahblah/whatever.(jpg|png|gif))
#

# We use this list for properties which can take shorthand values and also have
# subproperties or variants (ie, because "border" is in here, we allow through:
# border-right, border-bottom-left-radius, -moz-border-foo, etc)
# It is slightly less secure so do NOT put any property in here if you aren't
# sure all variations on it are okay!
SUPPORTED_CSS_SHORTHAND_PROPERTIES:
- background
- border
- column
- cue
- flex
- font
- layer-background
- layout-grid
- list-style
- margin
- marker
- outline
- overflow
- padding
- page-break
- pause
- scrollbar
- text
- transform
- transition

SUPPORTED_CSS_PROPERTIES:
- -replace
- -use-link-source
- accelerator
- accent-color
- align-content
- align-items
- align-self
- alignment-adjust
- alignment-baseline
- appearance
- azimuth
- baseline-shift
- behavior
- binding
- bookmark-label
- bookmark-level
- bookmark-target
- bottom
- box-align
- box-direction
- box-flex
- box-flex-group
- box-lines
- box-orient
- box-pack
- box-shadow
- box-sizing
- caption-side
- clear
- clip
- color
- color-profile
- color-scheme
- content
- counter-increment
- counter-reset
- crop
- cue
- cue-after
- cue-before
- cursor
- direction
- display
- dominant-baseline
- drop-initial-after-adjust
- drop-initial-after-align
- drop-initial-before-adjust
- drop-initial-before-align
- drop-initial-size
- drop-initial-value
- elevation
- empty-cells
- filter
- fit
- fit-position
- float
- float-offset
- font
- font-effect
- font-emphasize
- font-emphasize-position
- font-emphasize-style
- font-family
- font-size
- font-size-adjust
- font-smooth
- font-stretch
- font-style
- font-variant
- font-weight
- grid-columns
- grid-rows
- hanging-punctuation
- height
- hyphenate-after
- hyphenate-before
- hyphenate-character
- hyphenate-lines
- hyphenate-resource
- hyphens
- icon
- image-orientation
- image-resolution
- ime-mode
- include-source
- inline-box-align
- justify-content
- layout-flow
- left
- letter-spacing
- line-break
- line-height
- line-stacking
- line-stacking-ruby
- line-stacking-shift
- line-stacking-strategy
- mark
- mark-after
- mark-before
- marks
- marquee-direction
- marquee-play-count
- marquee-speed
- marquee-style
- max-height
- max-width
- min-height
- min-width
- move-to
- nav-down
- nav-index
- nav-left
- nav-right
- nav-up
- opacity
- order
- orphans
- page
- page-policy
- phonemes
- pitch
- pitch-range
- play-during
- position
- presentation-level
- punctuation-trim
- quotes
- rendering-intent
- resize
- rest
- rest-after
- rest-before
- richness
- right
- rotation
- rotation-point
- ruby-align
- ruby-overhang
- ruby-position
- ruby-span
- size
- speak
- speak-header
- speak-numeral
- speak-punctuation
- speech-rate
- stress
- string-set
- tab-side
- table-layout
- target
- target-name
- target-new
- target-position
- top
- unicode-bibi
- unicode-bidi
- user-select
- vertical-align
- visibility
- voice-balance
- voice-duration
- voice-family
- voice-pitch
- voice-pitch-range
- voice-rate
- voice-stress
- voice-volume
- volume
- white-space
- white-space-collapse
- widows
- width
- word-break
- word-spacing
- word-wrap
- writing-mode
- z-index

# We allow the !important keyword as well as any string that is just a-z plus
# dashes, as well as space- or comma-separated lists of such strings. The only
# keywords you need to specify are keywords that contain other characters.
#
# We have the URL_FUNCTION_REGEX in lib/css_cleaner.rb, but including "url" here
# is necessary to prevent the url() function from being stripped before any
# value containing it is sanitized. Allowing images in skins should be moved to
# its own config variable in the future.
#
# Do not add other functions here; they are not keywords and are controlled by
# regular expressions in lib/css_cleaner.rb.
SUPPORTED_CSS_KEYWORDS: ["!important", "url"]

# if you include "url" in the SUPPORTED_CSS_KEYWORDS, only urls pointing to this
# kind of resource will be allowed
SUPPORTED_EXTERNAL_URLS: ["jpg", "jpeg", "png", "gif"]

# variables for Askimet http://akismet.com/
AKISMET_KEY: '6833ee7298cf'
AKISMET_NAME: 'http://transformativeworks.org'

# Abuse and Support ticket trackers; you may need to change
# feedbacks_controller.rb and abuse_reports_controller.rb
# to properly send to your own ticket tracker.
#
# - Register a new client at Zoho's Developer Console, whatever you fill into "Authorized redirect URIs"
#   is ZOHO_REDIRECT_URI.
# - Upon registering, you receive ZOHO_CLIENT_ID and ZOHO_CLIENT_SECRET.
# - Upon requesting an "offline" authorization grant, you receive ZOHO_REFRESH_TOKEN.
ZOHO_CLIENT_ID: ""
ZOHO_CLIENT_SECRET: ""
ZOHO_REDIRECT_URI: ""
ZOHO_REFRESH_TOKEN: ""
ZOHO_ORG_ID: ""
ABUSE_ZOHO_DEPARTMENT_ID: ""
SUPPORT_ZOHO_DEPARTMENT_ID: ""

DEFAULT_LANGUAGE_SHORT: 'en'
DEFAULT_LANGUAGE_NAME: 'English'
DEFAULT_LOCALE_ISO: 'en'
DEFAULT_LOCALE_NAME: 'English (US)'

# Allow orphaninig
ORPHANING_ALLOWED: true

# Help directory, must be in the public folder.
# Create subfolders for each supported language
# (eg, /help/fr/ contains the French versions of the help)
HELP_DIRECTORY: '/help'

# production caching
#PRODUCTION_CACHE: "memory"
PRODUCTION_CACHE: "memcache"

# TTL in seconds for cached work and bookmark counts on user/pseud dashboards.
# Default to 20 minutes.
SECONDS_UNTIL_DASHBOARD_COUNTS_EXPIRE: 1200

# how many cache pages to expire for a tag/collection/pseud when a work is updated or deleted
PAGES_TO_CACHE: 5

# Turn this off in local.yml to keep the development footer/profiling code from running
DEVELOPMENT_PROFILING_ENABLED: true


# These are the actions logged in the user history - the log_items table
ACTION_ACTIVATE: 0
ACTION_ADD_ROLE: 1
ACTION_REMOVE_ROLE: 2
ACTION_SUSPEND: 3
ACTION_UNSUSPEND: 4
ACTION_BAN: 5
ACTION_WARN: 6
ACTION_RENAME: 7
ACTION_PASSWORD_CHANGE: 8
ACTION_NEW_EMAIL: 9
ACTION_TROUBLESHOOT: 10
ACTION_NOTE: 11
ACTION_ADD_FNOK: 12
ACTION_REMOVE_FNOK: 13
ACTION_ADDED_AS_FNOK: 14
ACTION_REMOVED_AS_FNOK: 15
ACTION_PASSWORD_RESET: 16


# Elasticsearch index prefix
# If you're using webdev or another shared environment, change this to include
# your username (e.g. ao3_testy) to ensure all users have separate search
# indexes
ELASTICSEARCH_PREFIX: 'ao3'


# List of Unicode scripts where spaces are not used as separators, and
# character counts should be used for word counts.
# Check if a script is supported by the version of Ruby we use:
# https://ruby-doc.org/core/Regexp.html#class-Regexp-label-Character+Properties
CHARACTER_COUNT_SCRIPTS: ["Han", "Hiragana", "Katakana", "Thai"]


# Cache durations for work and bookmark searches (in seconds)
SECONDS_UNTIL_WORK_INDEX_EXPIRE: 1800
SECONDS_UNTIL_BOOKMARK_INDEX_EXPIRE: 1800

# Cache duration for commentable kudos list of names
MINUTES_UNTIL_COMMENTABLE_KUDOS_LISTS_EXPIRE: 60

# Cache duration for comment counts:
SECONDS_UNTIL_COMMENT_COUNTS_EXPIRE: 3600

# Cache duration for various collection-related counts (# of works, # of
# bookmarks, # of fandoms):
SECONDS_UNTIL_COLLECTION_COUNTS_EXPIRE: 300

# Cache durations for work and bookmark searches (in minutes)
MINUTES_UNTIL_COLLECTION_BLURBS_EXPIRE: 120

# Job size used for the HitCountUpdateJob class:
HIT_COUNT_JOB_SIZE: 1000

# Batch size used for the HitCountUpdateJob class:
HIT_COUNT_BATCH_SIZE: 100

# The hour (in UTC time) that we want the hit counts to rollover at. If someone
# views the work shortly before this hour and shortly after, it should count as
# two hits. Used by the RedisHitCounter class.
HIT_COUNT_ROLLOVER_HOUR: 3

# The batch size for calculating a work's filters from its tags:
FILTER_UPDATE_BATCH_SIZE: 100

# URLs for which we should not display the proxy notice. URLs from these hosts
# are allowed in Abuse reports and disallowed in Work imports. Alphabetical by
# environment.
PERMITTED_HOSTS: [
  # Production
  "104.153.64.122",
  "208.85.241.152",
  "208.85.241.157",
  "ao3.org",
  "archiveofourown.com",
  "archiveofourown.net",
  "archiveofourown.org",
  "download.archiveofourown.org",
  "insecure.archiveofourown.org",
  "secure.archiveofourown.org",
  "www.ao3.org",
  "www.archiveofourown.com",
  "www.archiveofourown.net",
  "www.archiveofourown.org",
  # Staging
  "insecure-test.archiveofourown.org",
  "test.archiveofourown.org",
  "testdownload.archiveofourown.org"
]

USER_RENAME_LIMIT_DAYS: 7

# The number of readings to include in a single ReadingsJob:
READING_JOB_SIZE: 5000

# The number of readings to change in a single transaction:
READING_BATCH_SIZE: 100

# The number of work IDs to include in a single StatCounterJob:
STAT_COUNTER_JOB_SIZE: 1000

# The number of works to fetch from the database in one query when updating stat counters:
STAT_COUNTER_BATCH_SIZE: 100

# Number of hours to retain the original creator for works that have been
# orphaned.
ORIGINAL_CREATOR_TTL_HOURS: 72

# The maximum number of tags to provide in a tag wrangling report.
WRANGLING_REPORT_LIMIT: 1000

# The number of days after which an Admin Post should allow comments.
# After this window, all comments are disabled. Setting this value to
# something below 1 -- or commenting it out -- will turn off comment disabling.
ADMIN_POST_COMMENTING_EXPIRATION_DAYS: 14

# Usernames in this list are not allowed to avoid potential confusion (like
# a user who has the username 'admin', for example).
FORBIDDEN_USERNAMES: []

# The arguments to pass to pt-online-schema-change:
PERCONA_ARGS: >
  --chunk-size=5k
  --max-flow-ctl 0
  --pause-file /tmp/pauseme
  --max-load Threads_running=15
  --critical-load Threads_running=100
  --set-vars innodb_lock_wait_timeout=2
  --alter-foreign-keys-method=rebuild_constraints
  --no-check-unique-key-change

# How many shards to have in elastic indexes.
# Production may have more than 5 for these
BOOKMARKABLE_SHARDS: 5
WORKS_SHARDS: 5
USER_SHARDS: 5
