# MySQL server details
# server: domain or IP of MySQL server
# database: a MySQL database that the user specified has read/write access to
# user: username to authenticate as
# password: password for user
mysql:
  server: 'localhost'
  port: 3306
  database: 'cytube3'
  user: 'cytube3'
  password: ''

# Define IPs/ports to listen on
# Each entry MUST define ip and port (ip can be '' to bind all available addresses)
# Each entry should set http, https, and/or io to true to listen for the corresponding
# service on that port.  http/io and https/io can be combined, but if http and https
# are both specified, only https will be bound to that port.
#
# If you don't specify a url, the url io.domain:port or https.domain:port will be assumed
# for non-ssl and ssl websockets, respectively.  You can override this by specifying the
# url for a websocket listener.
listen:
# Default HTTP server - default interface, port 8080
  - ip: ''
    port: 8080
    http: true
# Uncomment below to enable HTTPS/SSL websockets
# Note that you must also set https->enabled = true in the https definition
#  - ip: ''
#    port: 8443
#    https: true
#    io: true
# Default Socket.IO server - default interface, port 1337
  - ip: ''
    port: 1337
    io: true
# Example of how to bind an extra port to HTTP and Socket.IO
#  - ip: ''
#    port: 8081
#    http: true
#    io: true
#    url: 'http://my-other-thing.site.com:8081'

# HTTP server details
http:
  # Even though you may specify multiple ports to listen on for HTTP above,
  # one port must be specified as default for the purposes of generating
  # links with the appropriate port
  default-port: 8080
  domain: 'http://localhost'
  # Specifies the root domain for cookies.  If you have multiple domains
  # e.g. a.example.com and b.example.com, the root domain is example.com
  root-domain: 'localhost'
  # Specify alternate domains/hosts that are allowed to set the login cookie
  # Leave out the http://
  alt-domains:
    - '127.0.0.1'
  # Use express-minify to minify CSS and Javascript
  minify: false
  # Max-Age for caching.  Value should be an integer in milliseconds or a string accepted by
  # the `ms` module.  Set to 0 to disable caching.
  max-age: '7d'
  # Set to false to disable gzip compression
  gzip: true
  # Customize the threshold byte size for applying gzip
  gzip-threshold: 1024
  # Secret used for signed cookies.  Can be anything, but make it unique and hard to guess
  cookie-secret: 'change-me'

# HTTPS server details
https:
  enabled: false
  # Even though you may specify multiple ports to listen on for HTTPS above,
  # one port must be specified as default for the purposes of generating
  # links with the appropriate port
  default-port: 8443
  domain: 'https://localhost'
  keyfile: 'localhost.key'
  passphrase: ''
  certfile: 'localhost.cert'
  cafile: ''
  ciphers: 'HIGH:!DSS:!aNULL@STRENGTH'
  # Allow certain account pages to redirect to HTTPS if HTTPS is enabled.
  # You may want to set this to false if you are reverse proxying HTTPS to a
  # non-HTTPS address.
  redirect: true

# Page template values
# title goes in the upper left corner, description goes in a <meta> tag
html-template:
  title: 'CyTube',
  description: 'Free, open source synchtube'

# Socket.IO server details
io:
  # In most cases this will be the same as the http.domain.
  # However, if your HTTP traffic is going through a proxy (e.g. cloudflare)
  # you will want to set up a passthrough domain for socket.io.
  # If the root of this domain is not the same as the root of your HTTP domain
  # (or HTTPS if SSL is enabled), logins won't work.
  domain: 'http://localhost'
  # Even though you may specify multiple ports to listen on for HTTP above,
  # one port must be specified as default for the purposes of generating
  # links with the appropriate port
  default-port: 1337
  # limit the number of concurrent socket connections per IP address
  ip-connection-limit: 10
  # Whether or not to use zlib to compress each socket message (this option is
  # passed through to socket.io/engine.io).
  # Note that while this may save a little bandwidth, it also consumes a lot
  # more CPU and will bottleneck pretty quickly under heavy load.
  per-message-deflate: false

# Mailer details (used for sending password reset links)
# see https://github.com/andris9/Nodemailer
mail:
  enabled: false
  config:
    service: 'Gmail'
    auth:
      user: 'some.user@gmail.com'
      pass: 'supersecretpassword'
  from-address: 'some.user@gmail.com'
  from-name: 'CyTube Services'

# YouTube v3 API key
# See https://developers.google.com/youtube/registering_an_application
# YouTube links will not work without this!
# Instructions:
#     1. Go to https://console.developers.google.com/project
#     2. Create a new API project
#     3. On the left sidebar, click "Credentials" under "APIs & auth"
#     4. Click "Create new Key" under "Public API access"
#     5. Click "Server key"
#     6. Under "APIs & auth" click "YouTube Data API" and then click "Enable API"
youtube-v3-key: ''
# Minutes between saving channel state to disk
channel-save-interval: 5
# Limit for the number of channels a user can register
max-channels-per-user: 5
# Limit for the number of accounts an IP address can register
max-accounts-per-ip: 5
# Minimum number of seconds between guest logins from the same IP
guest-login-delay: 60

# Configure statistics tracking
stats:
  # Interval (in milliseconds) between data points - default 1h
  interval: 3600000
  # Maximum age of a datapoint (ms) before it is deleted - default 24h
  max-age: 86400000

# Configure periodic clearing of old alias data
aliases:
  # Interval (in milliseconds) between subsequent runs of clearing
  purge-interval: 3600000
  # Maximum age of an alias (in milliseconds) - default 1 month
  max-age: 2592000000

# Workaround for Vimeo blocking my domain
vimeo-workaround: false

# OPTIONAL: Use Vimeo's OAuth API instead of the anonymous API.
# This allows you to add private videos that have embedding enabled.
# See https://developer.vimeo.com/apps/new to register for this API.
# Note that in order to use this feature you must agree to Vimeo's
# Terms of Service and License Agreement.
vimeo-oauth:
  enabled: false
  consumer-key: ''
  secret: ''

# Regular expressions for defining reserved user and channel names and page titles
# The list of regular expressions will be joined with an OR, and compared without
# case sensitivity.
#
# Default: reserve any name containing "admin[istrator]" or "owner" as a word
# but only if it is separated by a dash or underscore (e.g. dadmin is not reserved
# but d-admin is)
reserved-names:
  usernames:
    - '^(.*?[-_])?admin(istrator)?([-_].*)?$'
    - '^(.*?[-_])?owner([-_].*)?$'
  channels:
    - '^(.*?[-_])?admin(istrator)?([-_].*)?$'
    - '^(.*?[-_])?owner([-_].*)?$'
  pagetitles: []

# Provide a contact list for the /contact page
contacts:
  - name: 'calzoneman'
    title: 'Developer'
    email: 'cyzon@cytu.be'

playlist:
  max-items: 4000
  # How often (in seconds), mediaUpdate packets are broadcast to clients
  update-interval: 5

# If set to true, when the ipThrottle and lastguestlogin rate limiters are cleared
# periodically, the garbage collector will be invoked immediately.
# The server must be invoked with node --expose-gc index.js for this to have any effect.
aggressive-gc: false

# Allows you to blacklist certain channels.  Users will be automatically kicked
# upon trying to join one.
channel-blacklist: []

# If you have ffmpeg installed, you can query metadata from raw files, allowing
# server-synched raw file playback.  This requires the following:
#   * ffmpeg must be installed on the server
ffmpeg:
  enabled: false
# Executable name for ffprobe if it is not "ffprobe".  On Debian and Ubuntu (on which
# libav is used rather than ffmpeg proper), this is "avprobe"
  ffprobe-exec: 'ffprobe'

link-domain-blacklist: []

# Drop root if started as root!!
setuid:
  enabled: false
  group: 'users'
  user: 'user'
# how long to wait in ms before changing uid/gid
  timeout: 15

# Determines channel data storage mechanism.
# Defaults to 'file', in which channel data is JSON stringified and saved to a file
# in the `chandump/` folder.  This is the legacy behavior of CyTube.
# The other possible option is 'database', in which case each key-value pair of
# channel data is stored as a row in the `channel_data` database table.
# To migrate legacy chandump files to the database, shut down CyTube (to prevent
# concurrent updates), then run `node lib/channel-storage/migrate.js`.
channel-storage:
  type: 'file'