tinode-chat/server/tinode.conf

676 lines
26 KiB
Plaintext
Raw Permalink Normal View History

2018-03-24 18:38:41 -07:00
// The JSON comments are somewhat brittle. Don't try anything too fancy.
{
2020-03-26 20:09:59 +03:00
// HTTP(S) address to listen on for websocket and long polling clients. Either a TCP host:port pair
2020-03-18 17:37:31 +03:00
// or a path to Unix socket as "unix:/path/to/socket.sock".
2021-03-16 21:36:44 -07:00
// The TCP port is either a numerical value or a canonical name, e.g. ":80" or ":https". May include
// the host name, e.g. "localhost:80" or "hostname.example.com:https".
2019-07-16 12:19:05 +03:00
// It could be blank: if TLS is not configured it will default to ":80", otherwise to ":443".
2018-03-24 18:38:41 -07:00
// Can be overridden from the command line, see option --listen.
2016-06-07 18:05:46 -07:00
"listen": ":6060",
// Base URL path for serving streaming and large file API calls.
// Can be overridden from the command line, see option --api_path.
"api_path": "/",
// Cache-Control header for static content in seconds. 39600 is 11 hours.
2018-10-31 12:11:13 +03:00
"cache_control": 39600,
2019-02-04 11:50:40 +03:00
// If true, do not attempt to negotiate websocket per message compression (RFC 7692.4).
// It should be disabled (set to true) if you are using MSFT IIS as a reverse proxy.
"ws_compression_disabled": false,
2018-03-24 18:38:41 -07:00
// URL path for mounting the directory with static files.
"static_mount": "/",
2020-03-26 20:09:59 +03:00
// TCP host:port or unix:/path/to/socket to listen for gRPC clients.
2020-03-18 17:37:31 +03:00
// Leave blank to disable gRPC support.
2018-03-24 18:38:41 -07:00
// Could be overridden from the command line with --grpc_listen.
2020-03-28 12:29:58 +03:00
"grpc_listen": ":16060",
// Enable handling of gRPC keepalives https://github.com/grpc/grpc/blob/master/doc/keepalive.md
// This sets server's GRPC_ARG_KEEPALIVE_TIME_MS to 60 seconds instead of the default 2 hours.
"grpc_keepalive_enabled": true,
2021-03-16 21:36:44 -07:00
// Salt for signing API key. 32 random bytes base64-encoded. Use 'keygen' tool (included in this
// distro) to generate the API key and the salt.
"api_key_salt": "T713/rYYgW7g4m3vG6zGRh7+FM1t0T8j13koXScOAj4=",
2021-03-16 21:36:44 -07:00
// Maximum message size allowed from the clients in bytes (262144 = 256KB).
// Media files with sizes greater than this limit are sent out of band.
// Don't change this limit to a much higher value because it would likely cause crashes:
// on Android & iOS due to a limit on the SQLite cursor window size;
// on the server-side with MySQL adapter due to the limit on the sort buffer size.
"max_message_size": 262144,
2018-03-24 18:38:41 -07:00
// Maximum number of subscribers per group topic.
2018-01-23 15:29:03 -08:00
"max_subscriber_count": 128,
2018-08-01 08:20:28 +03:00
2018-03-24 18:38:41 -07:00
// Maximum number of indexable tags per topic or user.
"max_tag_count": 16,
// If true, ordinary users cannot delete their accounts.
"permanent_accounts": false,
// URL path for exposing runtime stats. Disabled if the path is blank or "-".
2019-01-02 14:58:53 +03:00
// Could be overriden from the command line with --expvar.
"expvar": "/debug/vars",
2019-01-02 14:58:53 +03:00
// URL path for internal server status. Disabled if the path is blank or "-".
// Could be overriden from the command line with --server_status.
2021-06-23 14:56:26 -07:00
"server_status": "/debug/status",
2021-03-16 21:36:44 -07:00
// Read IP address of the client from the HTTP header 'X-Forwarded-For'.
// Useful when Tinode is behind a proxy. If missing, fallback to default RemoteAddr.
"use_x_forwarded_for": true,
// 2-letter country code to assign to sessions by default when the country isn't specified
// by the client explicitly and it's impossible to infer it.
// If missing, the server will default to "US".
"default_country_code": "",
2021-03-16 21:36:44 -07:00
// Large media/blob handlers: large files/images included in messages.
"media": {
2021-03-16 21:36:44 -07:00
// The name of the media handler to use.
"use_handler": "fs",
// Maximum size of uploaded file (8MB here for testing, maybe increase to 100MB = 104857600 in prod)
"max_size": 8388608,
2021-03-16 21:36:44 -07:00
// Garbage collection periodicity in seconds: unused or abandoned uploads are deleted.
"gc_period": 60,
2021-03-16 21:36:44 -07:00
// The number of unused/abandoned entries to delete in one pass.
"gc_block_size": 100,
2021-03-16 21:36:44 -07:00
// Configurations of individual handlers.
"handlers": {
// File system storage.
"fs": {
// File system location to store uploaded files. In case of a cluster it
// must be accessible by all cluster members, i.e. a network drive like https://www.samba.org/
"upload_dir": "uploads",
// Cache-Control header to use for uploaded files. 86400 seconds = 24 hours.
"cache_control": "max-age=86400",
// Origin URLs allowed to download/upload files, e.g. ["https://www.example.com", "http://example.com"].
// Not necessary in most cases.
// "cors_origins": ["*"]
2018-09-06 19:42:26 +08:00
},
// Amazon AWS S3 storage.
2021-06-26 12:47:26 -07:00
// See detailed explanation at https://pkg.go.dev/github.com/aws/aws-sdk-go/aws#Config
"s3":{
// Use AWS console to get Access Key ID and Secret Access Key.
// https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/
"access_key_id": "your_s3_access_key_id",
"secret_access_key": "your_s3_secret_access_key",
// Region where the bucket is hosted.
"region": "s3 region, like us-east-2",
// Name of the S3 bucket.
2018-09-11 09:51:07 +03:00
"bucket": "your_s3_bucket_name",
2021-06-26 12:47:26 -07:00
// Set this to `true` to disable SSL when sending requests. Defaults to `false`.
"disable_ssl": false,
// Set this to `true` to force the request to use path-style addressing,
// i.e., `http://s3.amazonaws.com/BUCKET/KEY`. By default, the S3 client
// will use virtual hosted bucket addressing when possible
// (`http://BUCKET.s3.amazonaws.com/KEY`).
"force_path_style": false,
// An optional endpoint URL (hostname only or fully qualified URI)
// to override the default generated endpoint, or `""` to use the default generated endpoint.
// The endpoint can be of any S3-compatible service, such as "minio-api.x.io".
2021-06-26 12:47:26 -07:00
"endpoint": "",
// Expiration time for presigned URLs in seconds.
"presign_ttl": 3600,
// Cache-Control header to use for uploaded files. 86400 seconds = 24 hours.
"cache_control": "max-age=86400",
// Origin URLs allowed to download files, e.g. ["https://www.example.com", "http://example.com"].
// See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
2018-09-11 09:51:07 +03:00
"cors_origins": ["*"]
}
}
},
// TLS (httpS) configuration. Applies to both web and gRPC interfaces.
2017-07-02 16:18:43 +03:00
"tls": {
2018-03-24 18:38:41 -07:00
// Enable TLS.
2017-07-02 16:18:43 +03:00
"enabled": false,
2018-03-24 18:38:41 -07:00
// Listen for connections on this port and redirect them to HTTPS port.
2020-03-18 17:37:31 +03:00
// Cannot be a Unix socket.
"http_redirect": ":80",
2018-03-24 18:38:41 -07:00
// Add Strict-Transport-Security to headers, the value signifies age.
// Zero or negative value turns it off.
"strict_max_age": 604800,
2021-03-16 21:36:44 -07:00
// Letsencrypt configuration.
2017-07-02 16:18:43 +03:00
"autocert": {
2018-03-24 18:38:41 -07:00
// Location of certificates.
"cache": "/etc/letsencrypt/live/your.domain.here",
2019-02-04 11:50:40 +03:00
// Contact address for this installation. LetsEncrypt will send
// messages to this address in case of problems. Replace with your
// own address or remove this line.
2018-03-24 18:38:41 -07:00
"email": "noreply@example.com",
2018-03-24 18:38:41 -07:00
// Domains served. Replace with your own domain name.
"domains": ["whatever.example.com"]
2019-01-22 09:37:18 +03:00
},
2019-02-04 11:50:40 +03:00
// If "autocert" config is not defined, read static certificates from
2019-01-22 09:37:18 +03:00
// these locations. Ignored if "autocert" is defined.
"cert_file": "/etc/httpd/conf/your.domain.crt",
"key_file": "/etc/httpd/conf/your.domain.key"
2017-07-02 16:18:43 +03:00
},
2018-03-24 18:38:41 -07:00
// Authentication configuration.
"auth_config": {
// Optional mapping of externally-visible authenticator names to internal names.
2021-03-16 21:36:44 -07:00
// For example use ["my-auth:basic", "basic:"] to rename "basic" authenticator to
2023-08-02 11:26:49 +03:00
// "my-auth" and make "basic" unaccessible by the old name. If you want to use REST-auth, then
// the config is ["basic:rest", "rest:"].
// Default is identity mapping.
"logical_names": [],
2018-03-24 18:38:41 -07:00
// Basic (login + password) authentication.
"basic": {
// Add 'auth-name:username' to tags making user discoverable by username.
"add_to_tags": true,
// The minimum length of a login in unicode runes, i.e. "登录" is length 2, not 6.
// The maximum length is 32 and it cannot be changed.
"min_login_length": 4,
// The minimum length of a password in unicode runes, "пароль" is length 6, not 12.
// There is no limit on maximum length, but MySQL & PgSQL adapters have a limit of 32 bytes.
"min_password_length": 6
2018-03-24 18:38:41 -07:00
},
2018-03-24 18:38:41 -07:00
// Token authentication
"token": {
// Lifetime of a security token in seconds. 1209600 = 2 weeks.
2017-07-15 12:34:31 +03:00
"expire_in": 1209600,
2018-03-24 18:38:41 -07:00
// Serial number of the token. Can be used to invalidate all issued tokens at once.
2017-07-15 12:34:31 +03:00
"serial_num": 1,
2018-03-24 18:38:41 -07:00
// Secret key (HMAC salt) for signing the tokens. Generate your own then keep it secret.
// Any 32 random bytes base64 encoded.
2019-07-16 12:19:05 +03:00
//
// === IMPORTANT ===
2019-06-08 15:54:02 -07:00
//
// CHANGE IT IN PRODUCTION!!! Otherwise anyone will be able to log in
2021-03-16 21:36:44 -07:00
// to your server without the password. It's just random base64-encoded bytes, use any suitable
// means to get it. For example:
// Linux/Mac:
// echo $(head -c 32 /dev/urandom | base64 | tr -d '\n')
// Windows:
// powershell -command "[Convert]::ToBase64String((1..32|%{[byte](Get-Random -Max 256)}))"
"key": "wfaY2RgF2S1OQI/ZlK+LSrp1KB2jwAdGAIHQ7JZn+Kc="
2023-01-21 12:44:39 -08:00
},
// Short code authenticator for resetting passwords.
"code": {
2023-01-23 19:09:00 -08:00
// Lifetime of a security code in seconds. 900 seconds = 15 minutes.
2023-01-21 12:44:39 -08:00
"expire_in": 900,
// Number of times a user can try to enter the code.
"max_retries": 3,
// Length of the secret code.
"code_length": 6
}
},
2018-03-24 18:38:41 -07:00
// Database configuration
"store_config": {
2018-04-26 09:50:50 -07:00
// XTEA encryption key for user IDs and topic names. 16 random bytes base64-encoded.
2020-03-14 13:44:51 +03:00
// Generate your own and keep it secret. Otherwise your user IDs will be predictable
2019-06-08 15:54:02 -07:00
// and it will be easy to spam your users.
"uid_key": "la6YsO+bNX/+XIkOqc5Svw==",
// Maximum number of results fetched in one DB call.
"max_results": 1024,
// DB adapter name to communicate with the DB backend.
// Must be one of the adapters from the list below.
"use_adapter": "",
2018-08-01 08:20:28 +03:00
// Configurations of individual adapters.
2018-02-20 13:17:47 -08:00
"adapters": {
// PostgreSQL configuration. See https://godoc.org/github.com/jackc/pgx#Config
// for other possible options.
2023-04-05 00:26:38 +03:00
"postgres": {
// PostgreSQL connection settings.
2023-04-06 13:59:11 -07:00
"User": "postgres",
2023-04-05 00:26:38 +03:00
"Passwd": "postgres",
"Host": "localhost",
"Port": "5432",
"DBName": "tinode",
// DSN: alternative way of specifying database configuration, passed unchanged
// to the driver. See https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
// "dsn": "postgresql://postgres:postgres@localhost:5432/tinode?sslmode=disable&connect_timeout=10",
// PostgreSQL connection pool settings.
// Maximum number of open connections to the database. Zero means unlimited.
"max_open_conns": 50,
// Maximum number of connections in the idle connection pool. Zero means no idle connections are retained.
"max_idle_conns": 50,
// Maximum amount of time a connection may be reused. Zero means unlimited.
2023-04-05 00:26:38 +03:00
"conn_max_lifetime": 60,
// Maximum amount of time waiting for a connection from the pool. Zero means no timeout.
2023-04-05 00:26:38 +03:00
"sql_timeout": 10
},
2019-01-21 16:19:50 +03:00
// MySQL configuration. See https://godoc.org/github.com/go-sql-driver/mysql#Config
// for other possible options.
2018-02-20 13:17:47 -08:00
"mysql": {
2021-03-15 18:24:52 +03:00
// MySQL connection settings.
// See https://pkg.go.dev/github.com/go-sql-driver/mysql#Config for more info
// and available fields and options.
"User": "root",
"Net": "tcp",
"Addr": "localhost",
"DBName": "tinode",
// The 'collation=utf8mb4_unicode_ci' is optional but highly recommended for
// emoji and certain CJK characters.
2021-03-15 18:24:52 +03:00
"Collation": "utf8mb4_unicode_ci",
// Parse time values to time.Time. Required.
"ParseTime": true,
// DSN: alternative way of specifying database configuration, passed unchanged
// to MySQL driver. See https://github.com/go-sql-driver/mysql#dsn-data-source-name for syntax.
// DSN may optionally start with mysql://
2021-03-15 18:24:52 +03:00
// "dsn": "root@tcp(localhost)/tinode?parseTime=true&collation=utf8mb4_unicode_ci",
// MySQL connection pool settings.
// Maximum number of open connections to the database. Default: 0 (unlimited).
2021-03-15 18:24:52 +03:00
"max_open_conns": 64,
// Maximum number of connections in the idle connection pool. If negative or zero,
// no idle connections are retained.
2021-03-15 18:24:52 +03:00
"max_idle_conns": 64,
// Maximum amount of time a connection may be reused (in seconds).
"conn_max_lifetime": 60,
// DB request timeout (in seconds).
// If not set (or <= 0), DB queries and transactions will run without a timeout.
"sql_timeout": 10
2018-02-20 13:17:47 -08:00
},
2019-12-16 17:02:58 +03:00
// RethinkDB configuration. See
// https://godoc.org/github.com/rethinkdb/rethinkdb-go#ConnectOpts for other possible
// options.
2018-02-20 13:17:47 -08:00
"rethinkdb": {
2018-07-30 20:42:15 +03:00
// Address(es) of RethinkDB node(s): either a string or an array of strings.
2019-01-21 16:19:50 +03:00
"addresses": "localhost:28015",
// Name of the main database.
"database": "tinode"
2019-10-07 18:23:51 +05:00
},
// MongoDB configuration.
"mongodb": {
// Connection string https://www.mongodb.com/docs/manual/reference/connection-string/
2023-08-26 15:15:21 +03:00
// Options configured with the 'uri' connection string override all other options
// (only 'uri' is sent to the server, all other options are ignored).
// If you are using Atlas, then you MUST use 'uri' to connect. See here:
// https://www.mongodb.com/docs/manual/reference/connection-string/#std-label-connections-dns-seedlist
// Something like
// "uri": "mongodb+srv://CREDENTIALS@PROJECT.gmuaq.mongodb.net/DATABASE?retryWrites=true&w=majority",
"uri": "",
// The only supported server API version is "1". May or maynot be needed depending on server version.
"api_version": "",
2019-10-07 18:23:51 +05:00
// Address(es) of MongoDB node(s): either a string or an array of strings.
"addresses": "localhost:27017",
// Name of the main database.
2019-10-29 17:27:04 +05:00
"database": "tinode",
2019-12-16 17:02:58 +03:00
// Name of replica set of mongodb instance. Remove this line to use a standalone instance.
// If replica_set is disabled, transactions will be disabled as well.
"replica_set": "rs0",
2019-11-08 10:13:11 +05:00
2019-12-16 17:02:58 +03:00
// Authentication options. Uncomment if auth is configured on your MongoDB.
// Authentication mechanism. See https://www.mongodb.com/docs/manual/core/authentication/
// Default "SCRAM-SHA-256"
// "auth_mechanism": "SCRAM-SHA-256",
// The name of database that has the collection with the user credentials. Default "admin".
2019-11-25 09:52:08 +05:00
// "auth_source": "admin",
2019-11-08 10:13:11 +05:00
// Username:
2019-11-25 09:52:08 +05:00
// "username": "tinode",
2019-11-08 10:13:11 +05:00
// Password:
2020-05-25 14:23:12 +05:00
// "password": "tinode",
// Driver's TLS configuration. Uncomment to enable TLS.
// "tls": true,
2020-05-25 14:23:12 +05:00
// Path to the client certificate. Optional.
// "tls_cert_file": "/path/to/cert_file",
2020-05-25 14:23:12 +05:00
// Path to private key. Optional.
// "tls_private_key": "/path/to/private_key",
2020-05-25 14:23:12 +05:00
// Specifies whether or not certificates and hostnames received from the server should be validated.
// Not recommended to enable in production. Default is false.
// "tls_skip_verify": false
2018-02-20 13:17:47 -08:00
}
}
2016-08-11 14:28:35 -07:00
},
2021-03-16 21:36:44 -07:00
// Account validators (email or SMS or captcha).
"acc_validation": {
2018-03-24 18:38:41 -07:00
// Email validator config.
"email": {
2021-03-16 21:36:44 -07:00
// Restrict use of "email" namespace: make users searchable by their emails,
// disable manual creation of email: tags.
"add_to_tags": true,
2018-03-24 18:38:41 -07:00
// List of authentication levels which require this validation method.
2019-03-17 09:21:03 +03:00
// Remove this line to disable email validation.
"required": ["auth"],
2018-03-24 18:38:41 -07:00
// Configuration passed to the validator unchanged.
"config": {
2018-12-25 11:47:03 +03:00
// Address of the host where the Tinode server is running. This will be used
// in URLs in the email.
"host_url": "http://localhost:6060/",
2019-02-04 11:50:40 +03:00
2018-03-24 18:38:41 -07:00
// Address of the SMPT server to use.
"smtp_server": "smtp.example.com",
2018-07-30 20:42:15 +03:00
// SMTP port to use. "25" for basic email RFC 5321 (2821, 821), "587" for RFC 3207 (TLS).
"smtp_port": "25",
// RFC 5322 email address to show in the From: field.
"sender": "\"Tinode\" <noreply@example.com>",
// Optional login to use for authentication; if missing, the connection is not authenticated.
"login": "john.doe@example.com",
// Password to use when authenticating the sender; used only if "login" is provided.
2018-03-24 18:38:41 -07:00
"sender_password": "your-password-here",
2021-03-16 21:36:44 -07:00
// Authentication mechanism to use, optional. One of "login", "cram-md5", "plain" (default).
"auth_mechanism": "login",
// FQDN to use in SMTP HELO/EHLO command; if missing, the hostname from "host_url" is used.
"smtp_helo_host": "example.com",
2021-03-16 21:36:44 -07:00
// Skip verification of the server's certificate chain and host name.
2024-05-30 16:55:53 -07:00
// In this mode, TLS is susceptible to man-in-the-middle attacks.
"insecure_skip_verify": false,
2020-02-21 22:54:11 +03:00
// Optional list of human languages to try to load templates for. If you don't care about i18n,
// leave it blank or remove. The first language in the list is the default language.
"languages": ["en", "es", "fr", "ru", "vi", "zh"],
2020-02-21 22:54:11 +03:00
// Message template for credential validation.
// The file path itself is treated as a template. It's resolved by using the
// "languages" field above. One template per language.
// See the template file for the explanation of the expected structure.
"validation_templ": "./templ/email-validation-{{.Language}}.templ",
// Message template for resetting authentication secret.
// One template per language. See email-validation-en template for the explanation
2020-02-21 22:54:11 +03:00
// of the expected structure.
"reset_secret_templ": "./templ/email-password-reset-{{.Language}}.templ",
2018-07-30 20:42:15 +03:00
// Allow this many confirmation attempts before blocking the credential.
2021-03-16 21:36:44 -07:00
"max_retries": 3,
2020-02-21 22:54:11 +03:00
// List of email domains allowed to be used for registration.
// Missing or empty list means any email domain is accepted.
"domains": [],
2019-02-04 11:50:40 +03:00
2021-03-16 21:36:44 -07:00
// Dummy response to accept.
//
// === IMPORTANT ===
//
// REMOVE IN PRODUCTION!!! Otherwise anyone will be able to register
2021-03-16 21:36:44 -07:00
// with fake emails.
"debug_response": "123456"
}
},
// Placeholder validator for SMS and voice validation. Disabled by default.
// Use something like twilio.com or sinch.com in production.
"tel": {
"add_to_tags": true,
"config": {
// Address of the host where the Tinode server is running. This will be used
// in URLs in the SMS.
2023-01-23 19:00:29 -08:00
"host_url": "http://localhost:6060/",
2023-02-02 17:13:06 -08:00
// Optional list of locales to try to load templates for. If you don't care about i18n,
// leave it blank or remove. The first language in the list is the default language.
"languages": ["en", "es", "fr", "pt", "ru", "vi", "zh"],
// String to use in the From field of the SMS.
"sender": "Tinode",
// Message template for credential validation and password reset. The file path itself is
// treated as a template. It's resolved by using the "languages" field above. One template
// per language.
"universal_templ": "./templ/sms-universal-{{.Language}}.templ",
// Allow this many confirmation attempts before blocking the credential.
2023-01-23 19:00:29 -08:00
"max_retries": 3,
// Twilio configuration (optional).
//"twilio_conf": {
// "account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
// "auth_token": "f2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
//},
2023-01-23 19:00:29 -08:00
// Dummy response to accept.
//
// === IMPORTANT ===
//
// REMOVE IN PRODUCTION!!! Otherwise anyone will be able to register
2023-01-23 19:00:29 -08:00
// with fake phone numbers.
"debug_response": "123456"
}
}
},
2024-07-01 11:28:41 -07:00
// Configuration for stale account garbage collector: remove
// stale unvalidated user accounts which have been last updated at least
// 'gc_min_account_age' hours ago.
"acc_gc_config": {
2023-01-30 17:26:02 -08:00
"enabled": true,
// How often to run GC (seconds).
2023-01-30 17:26:02 -08:00
"gc_period": 3600,
// Number of accounts to delete in one pass.
2023-01-30 17:26:02 -08:00
"gc_block_size": 10,
// Minimum hours since account was last modified.
"gc_min_account_age": 30
},
2018-03-24 18:38:41 -07:00
// Configuration of push notifications.
2016-08-11 14:28:35 -07:00
"push": [
{
2018-03-24 18:38:41 -07:00
// Notificator which writes to STDOUT. Useful for debugging.
2016-08-11 14:28:35 -07:00
"name":"stdout",
"config": {
2018-03-24 18:38:41 -07:00
// Disabled.
2018-01-28 17:51:07 -08:00
"enabled": false
}
},
{
2018-03-24 18:38:41 -07:00
// Google FCM notificator.
2018-01-28 17:51:07 -08:00
"name":"fcm",
"config": {
2018-03-24 18:38:41 -07:00
// Disabled. Won't work without the server key anyway. See below.
2018-01-28 17:51:07 -08:00
"enabled": false,
// Firebase project ID.
"project_id": "your-project-id",
2018-09-18 18:16:41 +03:00
// Service account credentials as json.
// See instructions how to download the service account credentials file:
// https://cloud.google.com/iam/docs/creating-managing-service-account-keys
// Then insert the file contents here. Yes, this is convoluted, but that's Google's fault.
"credentials": {
"type": "service_account",
"project_id": "your-project-id",
"private_key_id": "some-random-looking-hex-number",
"private_key": "-----BEGIN PRIVATE KEY----- base64-encoded bits of your private key \n-----END PRIVATE KEY-----\n",
"client_email": "firebase-adminsdk-abc123@your-project-id.iam.gserviceaccount.com",
"client_id": "1234567890123456789",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-abc123%40your-project-id.iam.gserviceaccount.com"
2018-09-18 18:16:41 +03:00
},
2018-09-21 14:09:17 +03:00
// An alternative way to provide Firebase service account credentials.
2018-09-22 19:15:27 +03:00
"credentials_file": "/path/to/service-account-file-with-credentials.json",
2020-02-03 19:33:07 +03:00
// Time in seconds before notification is discarded (by Google) if undelivered.
2018-01-28 17:51:07 -08:00
"time_to_live": 3600,
2020-02-03 19:33:07 +03:00
// Payload of AndroidNotification. If enabled, this will take precedence over data payload.
"android": {
// Set to false to push a data-only message.
"enabled": false,
// Android drawable resource ID to use as a notification icon.
"icon": "ic_logo_push",
// Notification color.
"color": "#3949AB",
2020-02-03 19:33:07 +03:00
// Name of intent filter which will catch this notification.
"click_action": ".MessageActivity",
// Notification of a new message. You can include custom "icon", "color", "click_action"
2020-02-03 19:33:07 +03:00
// into this section and it will override the value above.
"msg": {
// Literal title string. Not recommended because it's not localized.
"title": "",
2020-02-05 16:18:20 +03:00
2020-02-03 19:33:07 +03:00
// Literal message body. Not recommended because it's not localized.
2020-02-05 16:18:20 +03:00
"body": "",
2020-02-03 19:33:07 +03:00
// Android string resource ID to use as a notification title. Localized.
// Takes precedence over "title". "new_message" is "New message" in Tindroid.
"title_loc_key": "new_message",
// Android string resource ID to use as a notification body. Localized.
// Takes precedence over "body".
"body_loc_key": ""
},
// Notification of a new subscription. Same rules as section "msg" above.
"sub": {
// Android resource string ID to use as notification title. Localized.
// "new_chat" is "New chat" in Tindroid.
"title_loc_key": "new_chat",
// Android resource string ID to use as notification body. Localized.
"body_loc_key": ""
}
}
2016-08-11 14:28:35 -07:00
}
2020-03-30 15:54:08 +03:00
},
{
2021-03-16 21:36:44 -07:00
// Tinode Push Gateway, see https://github.com/tinode/chat/tree/master/server/push/tnpg.
2020-03-30 15:54:08 +03:00
"name":"tnpg",
"config": {
// Disabled. Configure first then enable.
"enabled": false,
// Short name (URL) of the organization you registered at console.tinode.co.
2020-03-30 15:54:08 +03:00
"org": "test",
// Authentication token obtained from console.tinode.co
"token": "jwt-security-token-obtained-from-console.tinode.co",
}
2016-08-11 14:28:35 -07:00
}
],
// Configuration for voice and video calls.
"webrtc": {
// Disabled. Won't work without functioning ice_servers (see below).
"enabled": false,
// Timeout in seconds before a video/voice call is dropped if not answered.
"call_establishment_timeout": 30,
// Interactive Communication Establishment (ICE) STUN and TURN server configuration for video calls.
// You need to configure your own servers or consider https://www.metered.ca/tools/openrelay/.
// Video calls will not work if both parties are behind NAT and no ICE servers are configured.
"ice_servers": [
{
"urls": [
"stun:stun.example.com"
]
},
{
"username": "user-name-to-use-for-authentication-with-the-server",
"credential": "your-password",
"urls": [
"turn:turn.example.com:80?transport=udp",
"turn:turn.example.com:3478?transport=udp",
"turn:turn.example.com:80?transport=tcp",
"turn:turn.example.com:3478?transport=tcp",
"turns:turn.example.com:443?transport=tcp",
"turns:turn.example.com:5349?transport=tcp"
]
}
],
// An alternative way to provide STUN/TURN configuration.
"ice_servers_file": "/path/to/ice-servers-config.json"
},
2022-05-31 13:47:30 -07:00
2018-03-24 18:38:41 -07:00
// Cluster-mode configuration.
"cluster_config": {
2021-03-16 21:36:44 -07:00
// Name of this node. Can be assigned from the command line as --cluster_self.
2018-03-24 18:38:41 -07:00
// Empty string disables clustering.
"self": "",
2018-03-24 18:38:41 -07:00
// List of available nodes.
"nodes": [
2019-04-08 10:15:22 +03:00
// Name and TCP address of every node in the cluster. The ports 12001..12003
2021-03-16 21:36:44 -07:00
// are cluster communication ports. They don't need to be exposed to end-users.
2018-09-21 14:09:17 +03:00
{"name": "one", "addr":"localhost:12001"},
{"name": "two", "addr":"localhost:12002"},
{"name": "three", "addr":"localhost:12003"}
],
2021-03-16 21:36:44 -07:00
// Failover config. No need to change unless you are doing something unusual.
"failover": {
2018-03-24 18:38:41 -07:00
// Failover is enabled.
"enabled": true,
2018-03-24 18:38:41 -07:00
// Time in milliseconds between heartbeats.
"heartbeat": 100,
2018-03-24 18:38:41 -07:00
// Initiate leader election when the leader is not available for this many heartbeats.
"vote_after": 8,
2018-03-24 18:38:41 -07:00
// Consider node failed when it missed this many heartbeats.
"node_fail_after": 16
}
},
2021-03-16 21:36:44 -07:00
// Configuration of plugins.
"plugins": [
{
2018-03-24 18:38:41 -07:00
// Enable or disable this plugin.
"enabled": false,
2018-03-24 18:38:41 -07:00
// Name of the plugin, must be unique.
"name": "python_chat_bot",
2018-03-24 18:38:41 -07:00
// Timeout in microseconds.
"timeout": 20000,
2018-03-24 18:38:41 -07:00
// Events to send to the plugin.
"filters": {
2018-03-24 18:38:41 -07:00
// Account creation events.
"account": "C"
},
2021-03-16 21:36:44 -07:00
// Error code to use in case plugin has failed; 0 means to ignore the failures.
"failure_code": 0,
2020-03-26 20:09:59 +03:00
// Text of an error message to report in case of plugin failure.
"failure_text": null,
2018-03-24 18:38:41 -07:00
// Address of the plugin.
"service_addr": "tcp://localhost:40051"
}
2016-08-11 14:28:35 -07:00
]
}