###
###              ejabberd configuration file
###
### The parameters used in this configuration file are explained at
###
###       https://docs.ejabberd.im/admin/configuration
###
### The configuration file is written in YAML.
### *******************************************************
### *******           !!! WARNING !!!               *******
### *******     YAML IS INDENTATION SENSITIVE       *******
### ******* MAKE SURE YOU INDENT SECTIONS CORRECTLY *******
### *******************************************************
### Refer to http://en.wikipedia.org/wiki/YAML for the brief description.
###

hosts:
  - "emacsuser.net"

# loglevel: Verbosity of log files generated by ejabberd
loglevel: info
log_rotate_size: 524288

# rotation: Disable ejabberd's internal log rotation, as the Debian package
# uses logrotate(8).
log_rotate_count: 0

# hosts: Domains served by ejabberd.
# You can define one or several, for example:
# hosts:
#   - "example.net"
#   - "example.com"
#   - "example.org"
  
language: en

ca_file: /opt/ejabberd/conf/cacert.pem

certfiles:
  - /etc/ejabberd/fullchain.pem
  - /etc/ejabberd/privkey.pem

listen:
  -
    port: 5222
    ip: "::"
    module: ejabberd_c2s
    max_stanza_size: 262144
    shaper: c2s_shaper
    access: c2s
    starttls_required: true
  -
    port: 5223
    ip: "::"
    module: ejabberd_c2s
    max_stanza_size: 262144
    shaper: c2s_shaper
    access: c2s
    tls: true
  -
    port: 5269
    ip: "::"
    module: ejabberd_s2s_in
    max_stanza_size: 524288
    shaper: s2s_shaper
  -
    port: 5270
    ip: "::"
    module: ejabberd_s2s_in
    max_stanza_size: 524288
    shaper: s2s_shaper
    tls: true
  -
    port: 5443
    ip: "::"
    module: ejabberd_http
    tls: true
    request_handlers:
      /api: mod_http_api
      /bosh: mod_bosh
      ## /captcha: ejabberd_captcha
      /upload: mod_http_upload
      /ws: ejabberd_http_ws
      /invites: mod_invites
      /share: mod_http_fileserver
      /register: mod_register_web
      /.well-known/host-meta: mod_host_meta
      /.well-known/host-meta.json: mod_host_meta
  -
    port: 5280
    ip: "0.0.0.0"
    module: ejabberd_http
    tls: true
    request_handlers:
      /admin: ejabberd_web_admin
  -
    port: 3478
    transport: udp
    use_turn: true
    turn_ipv4_address: "96.231.167.37"
    module: ejabberd_stun
  -
    port: 5349
    ip: "::"
    transport: tcp
    module: ejabberd_stun
    use_turn: true
    tls: true
    turn_min_port: 49152
    turn_max_port: 65535
    turn_ipv4_address: "96.231.167.37"
  -
    port: 1883
    ip: "::"
    module: mod_mqtt
    backlog: 1000

s2s_use_starttls: required
outgoing_s2s_timeout: 20
negotiation_timeout: 120

## Store the plain passwords or hashed for SCRAM:
auth_password_format: scram

## Full path to a script that generates the image.
## captcha_cmd: "/usr/share/ejabberd/captcha.sh"

acl:
  admin:
     user:
       - "emperor@emacsuser.net"
  local:
    user_regexp: ""
  loopback:
    ip:
      - 127.0.0.0/8
      - ::1/128

access_rules:
  local:
    allow: local
  register:
    allow: admin
  c2s:
    deny: blocked
    allow: all
  announce:
    allow: admin
  configure:
    allow: admin
  muc_create:
    allow: local
  pubsub_createnode:
    allow: local
  trusted_network:
    allow: loopback

api_permissions:
  "console commands":
    from: ejabberd_ctl
    who: all
    what: "*"
  "webadmin commands":
    from: ejabberd_web_admin
    who: admin
    what: "*"
  "admin access":
    who:
      access:
        allow:
          - acl: loopback
          - acl: admin
      oauth:
        scope: "ejabberd:admin"
        access:
          allow:
            - acl: loopback
            - acl: admin
    what:
      - "*"
      - "!stop"
      - "!start"
  "public commands":
    who:
      ip: 127.0.0.1/8
    what:
      - status
      - connected_users_number

shaper:
  normal:
    rate: 3000
    burst_size: 20000
  fast: 200000

shaper_rules:
  max_s2s_connections: 3
  max_user_sessions: 10
  max_user_offline_messages:
    10000: admin
    5000: all
  c2s_shaper:
    none: admin
    normal: all
  s2s_shaper: fast

default_db: sql
sql_type: pgsql
sql_server: localhost
sql_database: ejabberd
sql_username: ejabberd
sql_password: password
auth_method: sql

modules:
  mod_adhoc: {}
  mod_adhoc_api: {}
  mod_admin_extra: {}
  mod_announce:
    access: announce
  mod_avatar: {}
  mod_blocking: {}
  mod_bosh: {}
  mod_caps: {}
  mod_carboncopy: {}
  mod_client_state: {}
  mod_configure: {}
  mod_disco:
    server_info:
    -
      modules: all
      name: "admin-addresses"
      urls:
        - "xmpp:akrosi@emacsuser.net"
    -
      modules: all
      name: "security-addresses"
      urls:
        - "xmpp:akrosi@emacsuser.net"
    -
      modules: all
      name: "abuse-addresses"
      urls:
        - "xmpp:akrosi@emacsuser.net"
    -
      modules: all
      name: "feedback-addresses"
      urls:
        - "xmpp:akrosi@emacsuser.net"
    -
      modules: all
      name: "support-addresses"
      urls:
        - "xmpp:akrosi@emacsuser.net"

  mod_fail2ban: {}
  mod_host_meta:
    bosh_service_url: "https://@HOST@:5443/bosh"
    websocket_url: "https://@HOST@:5443/ws"
  mod_http_api: {}
  mod_http_fileserver:
    docroot: /usr/share/javascript
  mod_http_upload:
    put_url: https://@HOST@:5443/upload
    custom_headers:
     "Access-Control-Allow-Origin": "https://@HOST@"
     "Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
     "Access-Control-Allow-Headers": "Content-Type"
  mod_invites:
    landing_page: auto
  mod_last: {}
  ## mod_mam:
  ##   ## Mnesia is limited to 2GB, better to use an SQL backend
  ##   ## For small servers SQLite is a good fit and is very easy
  ##   ## to configure. Uncomment this when you have SQL configured:
  ##   ## db_type: sql
  ##   assume_mam_usage: true
  ##   default: always
  mod_mam:
    assume_mam_usage: true
    default: always
    db_type: sql
  mod_mqtt: {}
  mod_muc:
    access:
      - allow
    access_admin:
      - allow: admin
    access_create: muc_create
    access_persistent: muc_create
    access_mam:
      - allow
    default_room_options:
      mam: true
      members_only: true
      allow_subscription: true
      persistent: true
  mod_muc_admin: {}
  mod_offline:
    access_max_user_messages: max_user_offline_messages
  mod_ping: {}
  mod_privacy: {}
  mod_private: {}
  mod_proxy65:
    access: local
    max_connections: 5
  mod_pubsub:
    access_createnode: local
    ignore_pep_from_offline: false
    last_item_cache: false
    max_items_node: 1000
    default_node_config:
      max_items: 1000
    plugins:
      - flat
      - pep
    force_node_config:
      "eu.siacs.conversations.axolotl.*":
        access_model: open
      "urn:xmpp:bookmarks:0":
        access_model: whitelist
        send_last_published_item: never
        persist_items: true
        max_items: infinity
      "urn:xmpp:bookmarks:1":
        access_model: whitelist
        send_last_published_item: never
        persist_items: true
        max_items: infinity
      "urn:xmpp:pubsub:movim-public-subscription":
        access_model: whitelist
        persist_items: true
        max_items: infinity
      "storage:bookmarks":
        access_model: whitelist
      "urn:xmpp:microblog:0":
        max_items: infinity
        notify_retract: true
        persist_items: true
      "urn:xmpp:microblog:0:comments*":
        max_items: infinity
        access_model: open
        notify_retract: true
        persist_items: true
      
  mod_push: {}
  mod_push_keepalive: {}
  mod_register:
    allow_modules:
      - mod_invites
  mod_register_web: {}
  mod_roster:
    versioning: true
  mod_s2s_bidi: {}
#  mod_s2s_dialback: {}
  mod_shared_roster: {}
  mod_stream_mgmt:
    resend_on_timeout: if_offline
  mod_stun_disco:
    credentials_lifetime: 12h
    services:
    -
      host: emacsuser.net
      port: 3478
      type: stun
      transport: udp
      restricted: false
    -
      host: emacsuser.net
      port: 3478
      type: turn
      transport: udp
      restricted: true
    -
      host: emacsuser.net
      port: 5349
      type: stuns
      transport: tcp
      restricted: false
    -
      host: emacsuser.net
      port: 5349
      type: turns
      transport: tcp
      restricted: true
  mod_vcard: {}
  mod_vcard_xupdate: {}
  mod_version: {}
                          
### Local Variables:
### mode: yaml
### End:
### vim: set filetype=yaml tabstop=8
