[global] # Application instance name app_name = ezBookkeeping # Either "production", "development" mode = production [server] # Protocol (http, https, socket) protocol = http # The ip address to bind to, "0.0.0.0" will bind to all interfaces http_addr = 0.0.0.0 # The http port to bind to http_port = 8080 # The domain name used to access ezBookkeeping domain = localhost # The full url used to access ezBookkeeping in browser root_url = %(protocol)s://%(domain)s:%(http_port)s/ # https certification and its key file cert_file = cert_key_file = # Unix socket path, for "socket" protocol only unix_socket = # Static file root path (relative or absolute path) static_root_path = public # Enable GZip enable_gzip = false # Set to true to log each request and execution time log_request = true [database] # Either "mysql", "postgres" or "sqlite3" type = sqlite3 # Database connection configuration, for "mysql" and "postgres" host = 127.0.0.1:3306 name = ezbookkeeping user = root passwd = # For "postgres" database only, Either "disable", "require" or "verify-full" ssl_mode = disable # For "sqlite3" database only, database file path (relative or absolute path) db_path = data/ezbookkeeping.db # Max idle connection number (0 - 65535, 0 means no idle connections are retained), default is 2 max_idle_conn = 2 # Max opened connection number (0 - 65535), default is 0 (unlimited) max_open_conn = 0 # Max connection lifetime (0 - 4294967295 seconds), default is 14400 (4 hours) conn_max_lifetime = 14400 # Set to true to log each sql statement and execution time log_query = false # Set to true to automatically update database structure when starting web server auto_update_database = true [mail] # Set to true to enable sending mail by SMTP server enable_smtp = false # SMTP Server connection configuration smtp_host = 127.0.0.1:25 smtp_user = smtp_passwd = smtp_skip_tls_verify = false # Mail from address. This can be just an email address, or the "Name" format. from_address = [log] # Either "console", "file", default is "console" # Use space to separate multiple modes, e.g. "console file" mode = console file # Either "debug", "info", "warn", "error", default is "info" level = info # For "file" mode only, log file path (relative or absolute path) log_path = log/ezbookkeeping.log # For "file" only, request log file path (relative or absolute path). Leave blank if you want to write request log in default log file request_log_path = # For "file" only, query log file path (relative or absolute path). Leave blank if you want to write query log in default log file query_log_path = # For "file" only, whether rotate the log files log_file_rotate = false # For "file" only, maximum size (1 - 4294967295 bytes) of the log file before it gets rotated log_file_max_size = 104857600 # For "file" only, maximum number of days to retain old log files. Set to 0 to retain all logs log_file_max_days = 7 [storage] # Object storage type, supports "local_filesystem" and "minio" currently type = local_filesystem # For "local_filesystem" storage only, the storage root path (relative or absolute path) local_filesystem_path = storage/ # For "minio" storage only, the minio connection configuration minio_endpoint = 127.0.0.1:9000 minio_location = minio_access_key_id = minio_secret_access_key = # For "minio" storage only, whether enable ssl for minio connection minio_use_ssl = false # For "minio" storage only, set to true to skip tls verification when connect minio minio_skip_tls_verify = false # For "minio" storage only, the minio bucket minio_bucket = ezbookkeeping # For "minio" storage only, the root path to store files in minio minio_root_path = / [uuid] # Uuid generator type, supports "internal" currently generator_type = internal # For "internal" uuid generator only, each server must have unique id (0 - 255) server_id = 0 [duplicate_checker] # Duplicate checker type, supports "in_memory" currently checker_type = in_memory # For "in_memory" duplicate checker only, cleanup expired data interval seconds (1 - 4294967295), default is 60 (1 minutes) cleanup_interval = 60 # The minimum interval seconds (0 - 4294967295) between duplicate submissions on the same page (exiting and re-entering the edit page / edit dialog is considered as a new session) # Set to 0 to disable duplicate checker for new data submissions, default is 300 (5 minutes) duplicate_submissions_interval = 300 [cron] # Set to true to clean up expired tokens periodically enable_remove_expired_tokens = true # Set to true to create scheduled transactions based on the user's templates enable_create_scheduled_transaction = true [security] # Used for signing, you must change it to keep your user data safe before you first run ezBookkeeping secret_key = # Set to true to enable two-factor authorization enable_two_factor = true # Token expired seconds (60 - 4294967295), default is 2592000 (30 days) token_expired_time = 2592000 # Token minimum refresh interval (0 - 4294967295), the value should be less than token expired time # Set to 0 to refresh the token every time when refreshing the front end, default is 86400 (1 day) token_min_refresh_interval = 86400 # Temporary token expired seconds (60 - 4294967295), default is 300 (5 minutes) temporary_token_expired_time = 300 # Email verify token expired seconds (60 - 4294967295), default is 3600 (60 minutes) email_verify_token_expired_time = 3600 # Password reset token expired seconds (60 - 4294967295), default is 3600 (60 minutes) password_reset_token_expired_time = 3600 # Maximum count of password / token check failures (0 - 4294967295) per IP per minute (use the above duplicate checker), default is 5, set to 0 to disable max_failures_per_ip_per_minute = 5 # Maximum count of password / token check failures (0 - 4294967295) per user per minute (use the above duplicate checker), default is 5, set to 0 to disable max_failures_per_user_per_minute = 5 # Add X-Request-Id header to response to track user request or error, default is true request_id_header = true [user] # Set to true to allow users to register account by themselves enable_register = true # Set to true to allow users to verify email address enable_email_verify = false # Set to true to require email must be verified when login enable_force_email_verify = false # Set to true to allow users to reset password enable_forget_password = true # Set to true to require email must be verified when use forget password forget_password_require_email_verify = false # Set to true to allow users to upload transaction pictures enable_transaction_picture = true # Maximum allowed transaction picture file size (1 - 4294967295 bytes) max_transaction_picture_size = 10485760 # Set to true to allow users to create scheduled transaction enable_scheduled_transaction = true # User avatar provider, supports the following types: # "internal": Use the internal object storage to store user avatar (refer to "storage" settings), supports updating avatar by user self # "gravatar": https://gravatar.com # Leave blank if you want to disable user avatar avatar_provider = internal # For "internal" avatar provider only, maximum allowed user avatar file size (1 - 4294967295 bytes) max_user_avatar_size = 1048576 # The default feature restrictions after user registration (feature types separated by commas), leave blank for no restrictions # Supports the following feature types: # 1: Update Password # 2: Update Email # 3: Update Profile Basic Info # 4: Update Avatar # 5: Logout Other Session # 6: Enable Two-Factor Authentication # 7: Disable Enable Two-Factor Authentication # 8: Forget Password # 9: Import Transactions # 10: Export Transactions # 11: Clear All Data # 12: Sync Application Settings default_feature_restrictions = [data] # Set to true to allow users to export their data enable_export = true # Set to true to allow users to import their data enable_import = true # Maximum allowed import file size (1 - 4294967295 bytes) max_import_file_size = 10485760 [tip] # Set to true to display custom tips in login page enable_tips_in_login_page = false # The custom tips displayed in login page, it supports multi-language configuration # Add an underscore and a language tag after the setting key to configure the notification content in that language, the same below # For example, login_page_tips_content_zh_hans means the notification content in Chinese (Simplified) login_page_tips_content = [notification] # Set to true to display custom notification in home page every time users register enable_notification_after_register = false # The notification content displayed each time users register, it supports multi-language configuration # Add an underscore and a language tag after the setting key to configure the notification content in that language, the same below # For example, after_login_notification_content_zh_hans means the notification content in Chinese (Simplified) after_register_notification_content = # Set to true to display custom notification in home page every time users login enable_notification_after_login = false # The notification content displayed each time users log in, it supports multi-language configuration after_login_notification_content = # Set to true to display custom notification in home page every time users open the app enable_notification_after_open = false # The notification content displayed each time users open the app, it supports multi-language configuration after_open_notification_content = [map] # Map provider, supports the following types: # "openstreetmap": https://www.openstreetmap.org # "openstreetmap_humanitarian": http://map.hotosm.org # "opentopomap": https://opentopomap.org # "opnvkarte": https://publictransportmap.org # "cyclosm": https://www.cyclosm.org # "cartodb": https://carto.com/basemaps # "tomtom": https://www.tomtom.com # "tianditu": https://www.tianditu.gov.cn # "googlemap": https://map.google.com # "baidumap": https://map.baidu.com # "amap": https://amap.com # "custom": custom map tile server url # Leave blank if you want to disable map map_provider = openstreetmap # Set to true to use the ezbookkeeping server to forward map data requests, for "openstreetmap", "openstreetmap_humanitarian", "opentopomap", "opnvkarte", "cyclosm", "cartodb", "tomtom", "tianditu" or "custom" map_data_fetch_proxy = false # Proxy for ezbookkeeping server requesting original map data when map_data_fetch_proxy is set to true, supports "system" (use system proxy), "none" (do not use proxy), or proxy URL which starts with "http://", "https://" or "socks5://", default is "system" proxy = system # For "tomtom" map provider only, TomTom map API key, please visit https://developer.tomtom.com/how-to-get-tomtom-api-key for more information tomtom_map_api_key = # For "tianditu" map provider only, TianDiTu map application key, please visit https://console.tianditu.gov.cn/api/register for more information tianditu_map_app_key = # For "googlemap" map provider only, Google map JavaScript API key, please visit https://developers.google.com/maps/get-started for more information google_map_api_key = # For "baidumap" map provider only, Baidu map JavaScript API application key, please visit https://lbsyun.baidu.com/index.php?title=jspopular3.0/guide/getkey for more information baidu_map_ak = # For "amap" map provider only, Amap JavaScript API application key, please visit https://lbs.amap.com/api/javascript-api/guide/abc/prepare for more information amap_application_key = # For "amap" map provider only, Amap JavaScript API security verification method, supports the following methods: # "internal_proxy": use the internal proxy to request amap api with amap application secret (default) # "external_proxy": use an external proxy to request amap api (amap application secret should be set by external proxy) # "plain_text": append amap application secret to frontend request directly (insecurity for public network) # Please visit https://developer.amap.com/api/jsapi-v2/guide/abc/load for more information amap_security_verification_method = internal_proxy # For "amap" map provider only, Amap JavaScript API application secret, this setting must be provided when "amap_security_verification_method" is set to "internal_proxy" or "plain_text", please visit https://lbs.amap.com/api/javascript-api/guide/abc/prepare for more information amap_application_secret = # For "amap" map provider only, Amap JavaScript API external proxy url, this setting must be provided when "amap_security_verification_method" is set to "external_proxy" amap_api_external_proxy_url = # For "custom" map provider only, the tile layer url of custom map tile server, supports {x}, {y} (coordinates) and {z} (zoom level) placeholders, like "https://tile.openstreetmap.org/{z}/{x}/{y}.png" custom_map_tile_server_url = # For "custom" map provider only, the optional annotation layer url of custom map tile server, supports {x}, {y} (coordinates) and {z} (zoom level) placeholders custom_map_tile_server_annotation_url = # For "custom" map provider only, the min zoom level (0 - 255) for custom map tile server, default is 1 custom_map_tile_server_min_zoom_level = 1 # For "custom" map provider only, the max zoom level (0 - 255) for custom map tile server, default is 18 custom_map_tile_server_max_zoom_level = 18 # For "custom" map provider only, the default zoom level (0 - 255) for custom map tile server, default is 14 custom_map_tile_server_default_zoom_level = 14 [exchange_rates] # Exchange rates data source, supports the following types: # "reserve_bank_of_australia": https://www.rba.gov.au/statistics/frequency/exchange-rates.html # "bank_of_canada": https://www.bankofcanada.ca/rates/exchange/daily-exchange-rates/ # "czech_national_bank": https://www.cnb.cz/en/financial-markets/foreign-exchange-market/central-bank-exchange-rate-fixing/central-bank-exchange-rate-fixing/ # "danmarks_national_bank": https://www.nationalbanken.dk/en/what-we-do/stable-prices-monetary-policy-and-the-danish-economy/exchange-rates # "euro_central_bank": https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html # "national_bank_of_georgia": https://nbg.gov.ge/en/monetary-policy/currency # "central_bank_of_hungary": https://www.mnb.hu/en/arfolyamok # "bank_of_israel": https://www.boi.org.il/en/economic-roles/financial-markets/exchange-rates/ # "central_bank_of_myanmar": https://forex.cbm.gov.mm/index.php/fxrate # "norges_bank": https://www.norges-bank.no/en/topics/Statistics/exchange_rates/ # "national_bank_of_poland": https://nbp.pl/en/statistic-and-financial-reporting/rates/ # "national_bank_of_romania": https://www.bnr.ro/Exchange-rates-1224.aspx # "bank_of_russia": https://www.cbr.ru/eng/currency_base/daily/ # "swiss_national_bank": https://www.snb.ch/en/the-snb/mandates-goals/statistics/statistics-pub/current_interest_exchange_rates # "national_bank_of_ukraine": https://bank.gov.ua/ua/markets/exchangerates # "central_bank_of_uzbekistan": https://cbu.uz/en/arkhiv-kursov-valyut/ # "international_monetary_fund": https://www.imf.org/external/np/fin/data/param_rms_mth.aspx # "user_custom": users set their own exchange rates data in the UI data_source = euro_central_bank # Requesting exchange rates data timeout (0 - 4294967295 milliseconds) # Set to 0 to disable timeout for requesting exchange rates data, default is 10000 (10 seconds) request_timeout = 10000 # Proxy for ezbookkeeping server requesting exchange rates data, supports "system" (use system proxy), "none" (do not use proxy), or proxy URL which starts with "http://", "https://" or "socks5://", default is "system" proxy = system # Set to true to skip tls verification when request exchange rates data skip_tls_verify = false