[sky.event]
max_meta_size = 65536

[app]
name = 'February'
# YY.MM.DD/aaa.bbb.ccc.ddd.eee
# -----
# YY.MM.DD - дата сборки проекта
# -----
# aaa - версия 
# bbb - изменения во внешнем api
# ccc - изменения во внутреннем api
# ddd - изменения в базе данных
# eee - новый код или мелкие правки, обнуляются при изменении aaa.bbb.ccc.ddd
# -----
# ПРИМЕЧАНИЕ: при незначительных правках счетчики изменений увеличиваются на 1, при значительных на 10-50, при 
# критических на 100
# -----
version = 'v26.02.18/1.0.0.0.0'
# Папка корня приложения, определяется относительно исполняемого файла
root_dir = '../'
config_dir = '${app.root_dir}/config'
store_dir = '${app.root_dir}/store'
stubs_dir = '${app.store_dir}/stubs'
# Файл блокировки приложения, используется для предотвращения запуска нескольких экземпляров. При попытке запуска 
# второго экземпляра, первый экземпляр будет завершен. В файле хранится PID последнего запущенного экземпляра.
lock_filename = 'f7ce5175-375e-4dec-a8a5-4b07b7c26b1d.lock'
license_file = '${app.root_dir}/license.lic'

[app.config.var]
tmpl = '${%s}'
regexp = '\${([^}]+)}'

[app.setup]
start_demons = false

[logger.file]
path = 'app.log'
# Возможные значения: text, json
format = 'text'
# Размер в мегабайтах
max_size = 1024
# Количество ротаций
max_backups = 3
# Количество дней хранения
max_age = 7
# Сжимать старые логи
compress = true
# Возможные значения: none, debug, info, warn, error, fatal, panic
level = 'debug'

[logger.terminal]
# Возможные значения: text, json
format = 'text'
# Возможные значения: none, debug, info, warn, error, fatal, panic
err_level = 'warn'
out_level = 'debug'

#[logger.terminal.text.include]
[logger.terminal.include]
time = false
level = false
caller = false
extra_params = false

[plugins]
config_file = '${app.config_dir}/plugins.json'
external_dir = '${app.store_dir}/plugins'

[security]
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
# Используется для привязки паролей к конкретному серверу. Если база пользователей будет перенесена на другой сервер
# их пароли станут не валидными, так как там будет другой internal_salt.
passw_internal_salt = '#internal_password_salt'

[security.crypto]
config_dir = '${app.config_dir}/crypto'

[service]
# Заголовок видимый внешним наблюдателям, например, в HTTP заголовках. Стоит изменить на что-то нейтральное, чтобы не 
# выдавать лишнюю информацию о сервисе.
header = '${app.name} ${app.version}'

[service.handshake]
# Значения mask_size, value_size, min_size запрещено менять без понимания их влияния на код рукопожатий, тунелей и 
# пэйлоадов.
mask_size = 4
value_size = 16
# Минимальный размер сообщения рукопожатия. Это значение так же связано с минимальным размером пакета для тунелей и
# пэйлоадов, которые определяются размером xor-ключа + uuid и равены 20 байт.
min_size = 20 
default_name = "Рукопожатие по умолчанию"

[service.response]
trash_min_size = 1
trash_max_size = 32

[service.websocket]
enabled = false
handshake_timeout = 15
read_buffer_size = 8192
write_buffer_size = 8192
event_execute_route = '/*'

[service.http]
static_dir = '${app.store_dir}/static'
ui_dir = '${app.store_dir}/ui'
root_path_token = '__root_path__'
status_page = '/status'
admin_page = '/admin'
event_execute_route = '/*'

[service.http.favicon]
enabled = true
max_age = 31536000
reload_interval = 180

[service.http.request.multipart]
max_size = 4194304
max_data_size = 4194304
max_chunk_size = 8192
max_fields = 64

[service.http.request.post]
# event.max_data_size + 2 * event.max_meta_size
#max_size = 104857600
max_size = 1176576

# Системный (root) пользователь по умолчанию
[system.user]
uuid = '00000000-0000-0000-0000-000000000001'
name = 'Владелец сервиса'
login = 'system'
passw = '1234567890'

# В системном (root) проекте могут находиться только группы с типом System и SuperAdmin
[system.project]
uuid = '11111111-0001-0000-0000-000000000000'
name = 'Системный'

# Системная группа по умолчанию
[system.root_group]
uuid = '11111111-0001-0000-0000-000000000000'
name = 'Администраторы сервиса'

[system.super_group]
uuid = '11111111-0002-0000-0000-000000000000'
name = 'Супер-модераторы сервиса'

[event]
store_dir = '${app.store_dir}/events'
max_body_size = 65536
max_data_size = 1045504
max_data_size_in_memory = 65536
max_error_size = 1024
max_category_size = 5

[client.auth]
# Уменьшить до 15 после тестов
read_timeout = 1500

[client.system]
interval_correction = 5

[client.version]
max_len = 64

[client.schema]
config_dir = '${app.config_dir}/schemas'
export_file = '${app.config_dir}/schema_export.json'
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
max_len = 64
min_fake_len = 1
max_fake_len = 5
# Максимум 3 байта (по умолчанию 2 байта)
max_fake_num = 0xFFFF

[client.schema.default_schema]
load_from_file = false
uuid = '00000000-0000-0000-0000-000000000001'
name = 'Схема по умолчанию'
value = 'default'
capacity = 256
# Запрещаем использовать схему по умолчанию агентам. Рекомендуется разрешать, только при разработке агентов для 
# упрощения отладки.
agent_can_use = false


[client.token]
len = 16

[client.token.status]
none = 0
new = 1
connected = 2

[client.temp_token]
max_timeout = 3600

[client.encryption_key]
max_len = 32

[client.key.default]
uuid = '00000000-0000-0000-0000-000000000001'
name = 'Ключ по умолчанию'
value = 'default_key'
# Запрещаем использовать ключ по умолчанию агентам. Рекомендуется разрешать, только при разработке агентов для 
# упрощения отладки.
agent_can_use = false

[client.type]
none = 0
agent = 1
user = 2
tunnel = 3
payload = 4
system = 100

[client.transport.type]
none = 0
http = 1
tcp = 2

[client.transport.format]
none = 0
agent = 2
frontend = 3
test_api = 4

[client.expiration.type]
none = 0
fixed_utc_time = 1
relative_to_created = 2
relative_to_ping = 3
relative_to_created_and_ping = 4

[user]
root_dir = '${app.store_dir}/users'
default_locale = 'ru-RU'

[user_group.admins]
default_name = 'Администраторы проекта'

[user_group.type]
# Окна между system/super_admin и project_admin сделаны специально, на случай добавления новых типов групп
none = 0
system = 1
super_admin = 20
project_admin = 30
default = 1000

[agent]
root_dir = '${app.store_dir}/agents'
token_invalidation_by_ip_hash = true
name_max_len = 60

[agent.event]
get_next_limit = 5
get_next_max_limit = 10

[agent_group.default]
name = 'Группа по умолчанию'

[database.app]
driver = 'postgres'
params = "user=falcon dbname=falcon_test password='falcon2025' sslmode=disable"
max_idle_conns = 10
max_open_conns = 20
conn_max_idle_time = 180
conn_max_lifetime = 900

[settings]
regex_uuid_pattern = '(?i)^[0-9a-z_-]{1,128}$'
is_throttle = false

[debug]
# Если сервер собирается в режиме "build.debug", то "active" всегда будет установлена в "true" независимо от настроек 
# в конфиге
active = true

[build.debug]
host = "127.0.0.1"

[dev.coverage]
# Используется для активации страницы, которая сбрасывает покрытие кода в файл. Необходимо при сборки с покрытием кода
active = false

[firewall.type]
none = 0
allow = 1
disallow = 2

[defines.objects]
none = 0

config = 1
plugin_manager = 2
command_manager = 3
hook_manager = 4
schema_manager = 5

user_manager = 6
user_group_manager = 7
user_token_manager = 8
user_auth = 9

agent_manager = 10
agent_group_manager = 11
agent_token_manager = 12
agent_token_temp_manager = 13
agent_event_manager = 14
agent_logs_manager = 15
agent_device_manager = 16
agent_auth = 17
agent_firewall = 18

project_manager = 19
event_manager = 20
plugin_store = 21
app_db = 22

client_manager = 23
client_key_manager = 24
client_version_manager = 25
client_handshake_key_manager = 26
access_manager = 27
demon_manager = 28
crypto_manager = 29
event_transport_manager = 30

agent_lfs_manager = 34
agent_lfs_db_manager = 35

agent_rfs_manager = 36
agent_rfs_db_manager = 37

tunnel_manager = 38

payload_manager = 39
payload_dispatcher_manager = 40
payload_dispatcher_obj_manager = 41

right_manager = 42
proxy_manager = 43

agent_tunnel_port_manager = 44

console_manager = 45
console_rights_manager = 46

[plugin.agent_logs.db]
filename = 'logs.db'
stub_file = '${app.stubs_dir}/agent_logs.stub'

[plugin.agent_lfs.item_type]
none = 0
file = 1
dir = 2

[plugin.agent_rfs.action]
none = 0
create = 1
copy = 2
rename = 3
move = 4
get = 5
get_info = 6
list = 7
delete = 8
reset = 9

[plugin.agent_rfs.status]
none = 0
new = 1
complete = 2
error = 3

[plugin.agent_rfs.item_type]
none = 0
file = 1
dir = 2

[plugin.consoles]
output_max_size = 10485760
output_max_lines = 10000
input_max_lines = 1000

[plugin.tunnels]
max_data_size = 4096

[plugin.payloads]
http_min_path_level = 3
http_min_path_length = 10
tcp_tag_length = 16

[plugin.payloads.kind]
none = 0
tcp = 1
http = 2

[plugin.fiber]
schema = "http"
host = "0.0.0.0"
port = 50101

[plugin.fiber.tls]
cert_file = "${app.config_dir}/crypto/tls/server.crt"
key_file = "${app.config_dir}/crypto/tls/server.key"

[plugin.tcp_net]
host = "0.0.0.0"
port = 7001

[plugin.tunnel_ports]
# FIX_ME: Уменьшить до 15 после тестов
tunnel_write_timeout = 1500
agent_connection_wait_timeout = 7

[plugin.tunnel_ports.mode]
none = 0
open = 1
listen = 2

[plugin.tunnel_ports.status]
none = 0
ok = 1
error = 2

[plugin.agent_tags]
default_colors = [
    "#5E5ECE", "#8B7D6B", "#4A7BAA", "#A569BD", "#CD6B5A",
    "#CD4E50", "#D5A351", "#5D7C61", "#625572", "#647C8A",
]
