<?php

// +----------------------------------------------------------------------
// | 安全基线配置
// +----------------------------------------------------------------------
// | 该文件集中管理第 0 阶段安全止血相关开关，包括 API 签名、CORS、
// | Session 兼容、日志脱敏、任务执行、远程资源访问、上传和后台权限审计。
// | 生产环境建议尽量收紧白名单和高风险能力开关，开发环境可通过 env 单独放宽。
// +----------------------------------------------------------------------

return [
    // 运行环境判断。默认根据 app_debug 推导，非调试模式视为生产环境。
    'env' => [
        'production' => env('app_debug', false) ? false : true,
    ],

    // API 认证与接口注册策略。
    'api' => [
        // 是否允许 q=0 免签访问；生产环境必须保持 false。
        'allow_q0' => env('security.api_allow_q0', false),

        // 允许使用 q=0 免签兼容模式的 IP 白名单。
        'allow_q0_ips' => ['127.0.0.1', '::1'],

        // Trusted same-host callback domains for q=0 detection; comma separated in env.
        'allow_q0_same_host_domains' => env('security.api_allow_q0_same_host_domains', ''),

        // 是否兼容旧版 MD5 签名。
        'legacy_md5_sign' => env('security.api_legacy_md5_sign', true),

        // 是否启用 HMAC-SHA256 新签名。
        'hmac_sign' => env('security.api_hmac_sign', true),

        // HMAC 签名密钥；留空时使用兼容派生逻辑。
        'hmac_secret' => env('security.api_hmac_secret', ''),

        // 签名时间戳有效期，单位秒。
        'sign_ttl' => env('security.api_sign_ttl', 300),

        // nonce 防重放缓存 key 前缀。
        'nonce_cache_prefix' => 'api_sign_nonce:',

        // 未注册到 api_allowlist 的 do 是否允许继续访问。
        'allow_unregistered_do' => env('security.api_allow_unregistered_do', true),

        // 是否记录未注册 do 的访问日志，便于逐步完善白名单。
        'log_unregistered_do' => env('security.api_log_unregistered_do', true),
    ],

    // 全局 CORS 策略，供跨域中间件读取。
    'cors' => [
        // 允许的 Origin 列表，支持逗号分隔字符串。
        'allowed_origins' => env('security.cors_allowed_origins', ''),

        // 是否允许跨域请求携带凭证。
        'allow_credentials' => env('security.cors_allow_credentials', true),
    ],

    // Session 兼容策略。
    'session' => [
        // 是否允许从 PHPSESSID Header 读取 Session ID；当前项目默认开启以兼容跨域后台请求。
        'allow_header_session_id' => env('security.session_allow_header_id', true),
    ],

    // 日志安全策略。
    'log' => [
        // 写入日志前需要脱敏的字段名，LogMaskService 会在此基础上追加通用敏感字段规则。
        'mask_fields' => [
            'password',
            'pwd',
            'token',
            'remember_me_token',
            'sign',
            'auth_code',
            'secret_key',
            'site_token',
            'access_token',
            'refresh_token',
            'private_key',
            'cert',
        ],

        // 单个字符串写入日志时的最大长度，超过后截断。
        'max_string_length' => env('security.log_max_string_length', 2048),
    ],

    // 后台计划任务和任务执行器安全策略。
    'task' => [
        // 是否允许执行 shell 类型任务；生产环境建议关闭。
        'allow_shell' => env('security.task_allow_shell', false),

        // 是否允许执行 SQL 类型任务；生产环境建议关闭。
        'allow_sql' => env('security.task_allow_sql', false),

        // URL 类型任务允许访问的主机白名单。
        'allow_url_hosts' => env('security.task_allow_url_hosts', ''),

        // 任务锁过期时间，防止任务重复执行。
        'lock_ttl' => env('security.task_lock_ttl', 3600),
    ],

    // 远程资源访问安全策略，下载图片、视频和远程包时使用。
    'remote' => [
        // 是否允许访问内网或保留 IP，默认禁止以防 SSRF。
        'allow_private_ip' => env('security.remote_allow_private_ip', false),

        // 允许访问的远程主机白名单，空值表示不启用主机白名单。
        'allowed_hosts' => env('security.remote_allowed_hosts', ''),

        // 远程图片最大下载字节数。
        'max_image_bytes' => env('security.remote_max_image_bytes', 10485760),

        // 远程视频最大下载字节数。
        'max_video_bytes' => env('security.remote_max_video_bytes', 104857600),

        // 远程请求总超时时间，单位秒。
        'timeout' => env('security.remote_timeout', 30),

        // 远程请求连接超时时间，单位秒。
        'connect_timeout' => env('security.remote_connect_timeout', 10),

        // 是否校验远程 HTTPS 证书；生产环境默认开启，调试环境可避免本机 CA 缺失导致测试失败。
        'ssl_verify' => env('security.remote_ssl_verify', env('app_debug', false) ? false : true),

        // 自定义 CA 证书文件路径；为空时使用 PHP/cURL 默认 CA 配置。
        'ssl_cainfo' => env('security.remote_ssl_cainfo', ''),

        // 预留的最大跳转次数配置；当前安全默认禁止自动跳转。
        'max_redirects' => env('security.remote_max_redirects', 3),
    ],

    // 上传安全策略。
    'upload' => [
        // 是否允许 SVG 图片上传；默认关闭以降低脚本注入风险。
        'allow_svg_image' => env('security.upload_allow_svg_image', false),
    ],

    // 后台权限审计和强制校验策略。
    'admin_permission' => [
        // 是否记录权限审计日志。
        'audit' => env('security.admin_permission_audit', true),

        // 是否强制执行后台权限校验。
        'enforce' => env('security.admin_permission_enforce', false),

        // 是否对高风险控制器强制执行权限校验。
        'high_risk_enforce' => env('security.admin_permission_high_risk_enforce', false),

        // 高风险控制器列表。
        'high_risk_controllers' => ['Addons', 'Task', 'Admin', 'AdminGroup', 'ApiAccount', 'Auth'],

        // 后台权限校验白名单，支持通配符。
        'white_list' => [
            'login/index',
            'login/login',
            'login/logout',
            'login/getconfigvalue',
            'install/*',
            'index/index',
        ],
    ],
];
