## NOTE:
## This config file overrides data/configs/cluster.hocon,
## and is merged with environment variables which start with 'EMQX_' prefix.
##
## Config changes made from EMQX dashboard UI, management HTTP API, or CLI
## are stored in data/configs/cluster.hocon.
## To avoid confusion, please do not store the same configs in both files.
##
## See https://www.emqx.io/docs/en/latest/configuration/configuration.html for more details.
## Configuration full example can be found in etc/examples

node {
  name = "emqx@127.0.0.1"
  cookie = "emqxsecretcookie"
  data_dir = "data"
}

cluster {
  name = emqxcl
  discovery_strategy = manual
}

## EMQX provides support for two primary log handlers: `file` and `console`, with an additional `audit` handler specifically designed to always direct logs to files.
## The system's default log handling behavior can be configured via the environment variable `EMQX_DEFAULT_LOG_HANDLER`, which accepts the following settings:
##
##   - `file`: Directs log output exclusively to files.
##   - `console`: Channels log output solely to the console.
##
## It's noteworthy that `EMQX_DEFAULT_LOG_HANDLER` is set to `file` when EMQX is initiated via systemd `emqx.service` file.
## In scenarios outside systemd initiation, `console` serves as the default log handler.

## Read more about configs here: https://www.emqx.io/docs/en/latest/configuration/logs.html

log {
    # file {
    #     level = warning
    # }
    # console {
    #     level = warning
    # }
}
dashboard {
    listeners {
        http {
            ## Comment out 'bind' (or set bind=0) to disable listener.
            bind = 18083
        }
        https {
            ## Uncomment to enable
            # bind = 18084
            ssl_options {
                certfile = "${EMQX_ETC_DIR}/certs/cert.pem"
                keyfile = "${EMQX_ETC_DIR}/certs/key.pem"
            }
        }
    }
}

# 必须禁止匿名访问，是开启认证的必备步骤
allow_anonymous = false

# 启用http协议的认证方式
authentication = [
 {
    # 后端类型：http 服务
    backend = "http"
    enable = true
    mechanism = "password_based"

    # ----- 请求配置 -----
    # 请求方法：POST 或 GET（推荐 POST，更安全）
    method = "post"
    # 你的认证服务 URL（请替换为实际地址）
    url = "http://dj-multictrl-api:8080/api/mqtt/auth"

    # 请求头
    headers {
      "Content-Type" = "application/json"
      "Accept" = "application/json"
    }
    
    # 请求体模板（支持占位符）
    body {
      username = "${username}"
      password = "${password}"
    }
    
    # ----- 性能与超时 -----
    request_timeout = "5s"      # HTTP 请求超时时间
    pool_size = 8               # 连接池大小
    
    # ----- 认证结果判断 -----
    # 服务端需返回 JSON 格式，包含 result 字段：
    # {"result": "allow"}   → 允许连接
    # {"result": "deny"}    → 拒绝连接
    # {"result": "ignore"}  → 忽略，继续后续认证链
    # 如果返回 HTTP 4xx/5xx 状态码，视为 ignore
  }
]
