f0a1552
ZhenYi
feat(chat): add chat module with room management, message handling, and session revocation
f0a1552
[s3]
bucket = ""
region = "us-east-1"
endpoint = ""
access_key_id = ""
secret_access_key = ""
path_style = false
request_timeout_secs = 30
[redis]
url = "redis://localhost:6379"
mode = "standalone"
database = 0
pool_size = 8
connection_timeout_secs = 2
username = ""
password = ""
[cache]
l1_capacity = 10000
l1_ttl_secs = 0
l1_tti_secs = 0
default_ttl_secs = 0
backfill_enabled = true
[cache.redis]
url = "redis://localhost:6379"
mode = "standalone"
database = 0
pool_size = 8
connection_timeout_secs = 2
username = ""
password = ""
[search]
enabled = false
url = "http://127.0.0.1:7700"
api_key = ""
index_prefix = "gitdata"
max_file_bytes = 1048576
chunk_lines = 160
batch_size = 100
poll_interval_secs = 2
task_timeout_secs = 120
[import]
enabled = false
token_secret = ""
allowed_hosts = []
allow_insecure_tls = false
max_concurrent_jobs = 2
clone_timeout_secs = 3600
api_timeout_secs = 30
poll_interval_secs = 3
max_attempts = 5
max_repo_bytes = 0
stale_lock_secs = 1800
[database]
url = "postgres://postgres:postgres@localhost:5432/gitdata"
host = ""
port = 5432
username = "postgres"
password = ""
database = "gitdata"
schema_search_path = "public"
application_name = "gitdata"
ssl_mode = "prefer"
max_connections = 16
min_connections = 2
connect_timeout_secs = 10
idle_timeout_secs = 600
acquire_timeout_secs = 10
max_lifetime_secs = 1800
sqlx_logging = false
replicas = []
[session]
mode = "opt_in"
cookie_name = "gitdata_session"
cookie_domain = ""
cookie_path = "/"
cookie_http_only = true
cookie_secure = false
cookie_same_site = "lax"
cookie_max_age_secs = 604800
cookie_prefix_host = false
cookie_encode_ip_and_user_agent = false
lifespan_secs = 604800
max_lifespan_secs = 2592000
memory_lifespan_secs = 1800
table_name = "session"
key = ""
database_key = ""
always_save = false
db_update_interval_secs = 60
purge_database_update_secs = 86400
enable_bloom_filter = true
[pow]
difficulty = 16
max_difficulty = 24
expires_secs = 60
mac_key = ""
[auth.password_policy]
min_length = 8
require_upper = true
require_lower = true
require_digit = true
require_symbol = false
[auth]
verify_code_ttl_secs = 600
verify_code_len = 6
reset_token_ttl_secs = 1800
reset_token_bytes = 32
email_code_rate_limit_secs = 60
max_verify_attempts = 5
min_age = 13
totp_encryption_key = ""
chat_jwt_sec = ""
[[auth.agreements]]
key = "terms"
version = "0.1.0"
title = "Terms of Service"
content_md = "Placeholder terms of service."
[[auth.agreements]]
key = "privacy"
version = "0.1.0"
title = "Privacy Policy"
content_md = "Placeholder privacy policy."
[web]
web_base_url = "http://localhost:3000"
cors_allow_origins = []
cors_allow_credentials = false
[user]
deletion_grace_days = 14
email_code_rate_limit_secs = 60
email_verify_code_ttl_secs = 900
email_verify_max_attempts = 5
email_verify_code_len = 6
[quota]
space_create_per_day = 10
room_create_per_day = 50
issue_create_per_day = 300
pull_create_per_day = 200
comment_create_per_day = 1000
dm_open_per_day = 100
webhook_create_per_day = 20
[space]
max_pagination = 100
default_pagination = 20
max_space_name_len = 64
max_space_desc_len = 512
max_group_name_len = 64
max_alias_name_len = 64
max_invite_email_len = 254
allow_self_join_groups = false
max_dir_nodes = 5000
[chat]
max_pagination = 200
default_pagination = 50
max_message_len = 4000
max_topic_len = 1024
max_thread_name_len = 255
max_reaction_emoji_len = 64
max_emoji_name_len = 64
max_bookmark_title_len = 255
max_webhook_name_len = 100
max_mentions_per_message = 20
typing_ttl_secs = 5
presence_ttl_secs = 300
[chat.ws]
ticket_ttl_secs = 60
heartbeat_secs = 30
max_subscriptions = 64
max_frame_bytes = 262144
history_limit = 200
[chat.upload]
max_size = 104857600
presign_ttl_secs = 3600
[issues]
max_pagination = 100
default_pagination = 20
max_board_name_len = 100
max_title_len = 255
max_body_len = 65535
max_comment_len = 65535
max_label_name_len = 50
max_label_color_len = 7
max_milestone_title_len = 100
max_milestone_description_len = 1024
max_reaction_emoji_len = 32
max_mentions_per_message = 20
[git]
repo_root = "/opt/gitdata/repos"
objects_root = "/opt/gitdata/objects"
max_blob_size = 104857600
git_command_timeout_secs = 300
git_rpc_timeout_secs = 3600
base_url = "http://localhost:3000"
http_clone_base_url = ""
ssh_clone_host = ""
ssh_clone_port = 0
ssh_clone_user = "git"
graphql_complexity_limit = 1000
graphql_introspection = true
[git.sync]
lock_ttl_secs = 120
max_commits_per_sync = 5000
concurrency = 4
queue_topic = "gitdata:tasks"
dlq_topic = "gitdata:dlq"
max_lock_retries = 5
max_languages = 20
language_timeout_secs = 30
brpop_timeout_secs = 5
git_command_timeout_secs = 120
[git.ssh]
bind_addr = "0.0.0.0"
port = 22
host_key_path = "/opt/gitdata/ssh_host_ed25519"
banner = ""
max_sessions = 64
auth_rejection_time = 2
inactivity_timeout = 300
keepalive_interval = 30
keepalive_max = 3
[email]
enabled = false
smtp_host = "smtp.example.com"
smtp_port = 587
smtp_username = ""
smtp_password = ""
from_address = "[email protected]"
from_name = "GitData"
connection_timeout_ms = 5000
response_timeout_ms = 30000
max_attachment_bytes = 26214400
default_locale = "en"
template_dir = "config/email_templates"
[email_queue]
enabled = false
channel_prefix = "email"
subscriber_group_id = "email-worker"
max_retries = 3
retry_backoff_ms = 500
[apihost]
enabled = true
bind_addr = "0.0.0.0"
port = 3000
admin_uids = []
[githost]
enabled = true
http_bind_addr = "0.0.0.0"
http_port = 9418
[im]
enabled = true
bind_addr = "0.0.0.0"
port = 3001
[health]
enabled = true
bind_addr = "0.0.0.0"
[health.synchost]
port = 3002
[health.mails]
port = 3003
[admin]
enabled = true
bind_addr = "0.0.0.0"
port = 3004
seed_username = ""
seed_password = ""
session_cookie_name = "gitdata_admin_session"
session_table_name = "admin_session"
cors_allow_origins = []
cors_allow_credentials = false