cocoon/config.h
xfy911 f38effff49
Some checks failed
CI / build (push) Failing after 26s
feat: ACME 配置集成 + 自动续期后台协程
- cocoon_config_t 新增 ACME 字段(enabled, directory_url, email, domains,
  cert_path, key_path, renew_days),支持最多 8 个域名
- config.c: JSON 解析 acme 配置块、校验逻辑、config_merge 支持
- main.c: 新增 --acme 命令行开关
- server.c: server_start 启动 ACME 自动续期后台协程(检查周期 24h,
  提前 renew_days 触发重新签发)
- acme.c: 实现 acme_save_certificate 证书持久化、
  acme_cert_days_until_expiry 过期天数检查
- acme.h: 新增 save_certificate / cert_days_until_expiry 接口声明
- 新增 tests/unit/test_acme_config.c:覆盖配置解析、校验、合并、
  证书过期检查、证书保存共 6 项测试
- 修复 test_config.c 中 config_merge 调用以匹配新签名
2026-06-16 12:45:08 +08:00

70 lines
2.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* config.h - JSON 配置文件解析模块
*
* 轻量级配置加载,支持从 JSON 文件读取服务器配置。
* 保持零依赖,只解析 cocoon 需要的字段。
*
* @author xfy
*/
#ifndef COCOON_CONFIG_H
#define COCOON_CONFIG_H
#include "cocoon.h"
#include <stdbool.h>
/**
* config_load_from_file - 从 JSON 配置文件加载配置
*
* 解析 JSON 文件,填充 cocoon_config_t 结构体。
* 只解析存在的字段,不存在的保持默认值。
*
* @param path JSON 文件路径
* @param config 输出配置结构体
* @return true 成功false 失败(文件不存在或格式错误)
*/
bool config_load_from_file(const char *path, cocoon_config_t *config);
/**
* config_validate - 校验配置是否合法
*
* 在热重载前调用,确保新配置不会导致服务异常。
* 校验失败时返回 false 并写入错误信息到 err_buf。
*
* @param config 待校验的配置
* @param err_buf 错误信息缓冲区(可为 NULL
* @param err_size 缓冲区大小
* @return true 合法false 不合法
*/
bool config_validate(const cocoon_config_t *config, char *err_buf, size_t err_size);
/**
* config_merge - 用命令行配置覆盖文件配置
*
* 优先级:命令行 > 配置文件 > 硬编码默认值
* 命令行参数中显式指定的值(非默认值)会覆盖配置文件。
*
* @param base 从文件加载的基础配置
* @param cmdline 命令行解析出的配置
* @param has_root_dir 命令行是否指定了 -r
* @param has_port 命令行是否指定了 -p
* @param has_workers 命令行是否指定了 -w
* @param has_max_conn 命令行是否指定了 -m
* @param has_timeout 命令行是否指定了 -o
* @param has_log_level 命令行是否指定了 -l
*/
void config_merge(cocoon_config_t *base, const cocoon_config_t *cmdline,
bool has_root_dir, bool has_port, bool has_workers,
bool has_max_conn, bool has_timeout, bool has_log_level,
bool has_gzip_enabled, bool has_brotli_enabled,
bool has_tls_cert, bool has_tls_key, bool has_tls_enabled,
bool has_access_log,
bool has_cors_enabled, bool has_auth_user, bool has_auth_pass,
bool has_rate_limit,
bool has_plugins,
bool has_cache_enabled, bool has_cache_max_size,
bool has_cache_ttl_seconds, bool has_cache_max_entry_size,
bool has_acme_enabled);
#endif /* COCOON_CONFIG_H */