# This is the base configuration file for Kalamar.
# Further configurations can override these values.
# To define a new configuration, create a file in the
# root folder of your application with the name like
#
#   kalamar.[MYNAME].conf
#
# To load the configuration, start your application with
# the environment variable
#
#   MOJO_MODE=[MYNAME]
#
# Further typical configurations in this file include
#
# - hypnotoad
#     See Mojo::Server::Hypnotoad
# - MailException
#     See Mojolicious::Plugin::MailException
# - TagHelpers-Pagination
#     See Mojolicious::Plugin::TagHelpers::Pagination
# - Localize
#     See Mojolicious::Plugin::Localize
# - TagHelpers-ContentBlock
#     See Mojolicious::Plugin::TagHelpers::ContentBlock
# - CHI
#     See Mojolicious::Plugin::CHI

# For Plugins,
# - Piwik
#     See Mojolicious::Plugin::Piwik

{
  Kalamar => {
    ## Backend server path
    # api_path => 'https://korap.example.org/api/',

    ## Backend API version
    # api_version => '1.0',

    ## If the application is run behind a proxy, ignore the forwarded host
    # proxy_host => 0,

    ## Run the application in a subfolder behind a proxy:
    # proxy_prefix => '/korap',

    ## The name of the base corpus,
    ## for query examples (see kalamar.queries.dict)
    # examplecorpus => 'dereko',

    ## For further Plugins, add them
    ## to this array:
    # plugins => [],
    ## Currently bundled: Piwik, Auth

    ## Require everything to be send via https only:
    # https_only => 1,

    ## Override default content security policy
    # cs_policy => "default-src '*';"

    ## Set proxy timeouts
    # proxy_inactivity_timeout => 120,
    # proxy_connect_timeout => 120,
  },

  # See Mojolicious::Plugin::TagHelpers::MailToChiffre
  'TagHelpers-MailToChiffre' => {
    method_name => 'PArok',
    pattern_rotate => 673
  }
}
