Metadata-Version: 2.4
Name: chenchuang-promo
Version: 0.1.0
Summary: 曲靖辰创科技有限公司 宣传站（含手机审批门禁、等保应用层控制、静态成品演示与离线演示 APK）
Author: Qujing Chenchuang Technology Co., Ltd.
License: Proprietary
Project-URL: Homepage, https://pypi.org/project/chenchuang-promo/
Keywords: promotion,company,data-annotation,chenchuang
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Customer Service
Classifier: Natural Language :: Chinese (Simplified)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Provides-Extra: dev
Requires-Dist: build; extra == "dev"
Requires-Dist: twine; extra == "dev"

# 曲靖辰创科技有限公司 · 宣传站 (chenchuang-promo)

一个**纯 Python 标准库**实现的公司宣传站，带**手机审批门禁**与**等保应用层技术控制**。

- 开发机（内网、无外网）：零第三方依赖，可直接运行与测试。
- 部署机（可上外网）：`pip install` 一键安装。

形态：装在**一台能联网的服务器**上运行，访客与老板都用浏览器访问。

```
访客打开 /  ──►  显示“等待审批”  ──►  老板手机打开 /admin（或收到推送）  ──►  批准
                                                                          │
访客页面自动轮询  ◄────────────  批准后放行，显示宣传内容（限时会话）  ◄────┘
```

## ⚠️ 关于“等保”的重要说明

**等保（网络安全等级保护 2.0）是国家强制的合规认证流程**（定级→备案→测评→整改），
覆盖物理、网络、主机、应用、数据、管理制度，由有资质的测评机构评定。
**单个软件本身无法“具备等保”。** 本程序实现的是等保中**应用层的安全技术控制点**，
可作为测评时应用侧的支撑，但不等于通过等保认证：

| 等保技术要求 | 本程序实现 |
|---|---|
| 身份鉴别 | 管理端口令登录；口令加盐 PBKDF2 哈希存储（不存明文）；登录失败锁定 |
| 访问控制 | 默认拒绝，访客须审批；管理端口令保护；会话超时失效 |
| 安全审计 | `audit.log` 记录每次访问/审批/登录的时间、来源 IP、动作、结果 |
| 入侵防范 | 登录失败次数限制 + 临时锁定；仅监听必要端口 |
| 会话安全 | 随机会话令牌（`secrets`）、会话超时 |
| 数据保密性 | 口令不落明文；支持反向代理启用 HTTPS（见下文） |

## 一、本地运行（开发机，免安装）

```bash
cd chenchuang-promo
python -m chenchuang_promo set-password    # 先设置管理端口令
python -m chenchuang_promo serve --open    # 启动并自动开浏览器
```

## 二、打包成可分发的 wheel（在能联网的机器上）

```bash
cd chenchuang-promo
python -m pip install build        # 仅首次
python -m build                    # 生成 dist/chenchuang_promo-0.1.0-py3-none-any.whl
```

## 三、在部署机上安装与运行

```bash
pip install chenchuang_promo-0.1.0-py3-none-any.whl
chenchuang-promo set-password      # 设置管理端登录口令（至少 8 位）
chenchuang-promo serve             # 启动服务
```

启动后终端会打印两个地址：

- 访客访问：`http://<服务器IP>:8800/`
- 老板审批：`http://<服务器IP>:8800/admin`（手机连同一网络即可打开）

可选参数：`chenchuang-promo serve --port 9000`。

## 四、配置文件与审计日志

首次运行会在 `~/.chenchuang-promo/` 下生成：

- `config.json` — 端口、会话时长、口令哈希、推送等配置
- `audit.log` — 安全审计日志（请勿让普通访客接触此目录）

`config.json` 主要项：

```json
{
  "host": "0.0.0.0",
  "port": 8800,
  "require_approval": true,
  "session_ttl_seconds": 1800,
  "login_max_fails": 5,
  "login_lock_seconds": 300,
  "base_url": "http://你的服务器地址:8800",
  "push": { "type": "none", "webhook_url": "" }
}
```

- `require_approval` 设为 `false` 可临时关闭审批门禁（公开访问）。
- `base_url` 用于推送消息里的可点击审批链接，请填外网可达地址。

## 五、手机推送（老板主动收到“待审批”）

在 `config.json` 的 `push` 中配置后，每次有访客请求会推消息到老板手机。
不配置则退化为“老板自己打开 `/admin` 看待办”。

| 渠道 | `type` | `webhook_url` 填什么 |
|---|---|---|
| 企业微信群机器人 | `"wecom"` | 群机器人 Webhook 地址 |
| 钉钉群机器人 | `"dingtalk"` | 钉钉机器人 Webhook 地址 |
| Server酱 | `"serverchan"` | Server酱推送地址 |
| 自定义 | `"custom"` | 任意接收 `{"text": "..."}` 的地址 |

示例（企业微信）：

```json
"push": {
  "type": "wecom",
  "webhook_url": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx"
}
```

## 六、启用 HTTPS（等保数据保密性，推荐生产启用）

本程序监听 HTTP。生产环境请在前面加一层反向代理（Nginx / Caddy）做 HTTPS 终止：

```
手机/浏览器 ──HTTPS──► Nginx(443) ──HTTP──► chenchuang-promo(127.0.0.1:8800)
```

此时把 `config.json` 的 `host` 改为 `127.0.0.1`，只让反向代理访问本服务。
现成的 Nginx 配置模板见 `deploy/nginx.conf.example`（含 HTTPS、真实 IP 透传、
管理端 IP 限制、静态预览托管），替换其中的域名与证书路径即可使用。

## 七、修改宣传内容（不需要懂代码）

文字都在 `src/chenchuang_promo/site.json`：公司名、简介、业务、**电话/邮箱/地址/微信**。
当前联系方式是占位（“请填写…”），上线前请替换为真实信息，改完重新打包即可。

## 八、静态演示集合（给客户看成品效果，纯静态可交互）

`http/` 是一套**纯静态、但真的能交互**的成品效果演示，无需后端服务器——
审批流程用浏览器端 `localStorage` 模拟，**可真实点击体验**。重新生成：

```bash
python tools/build_demo.py          # 内容取自 site.json，输出到 http/
```

生成的 `http/` 包含：

- `index.html` —— 演示菜单（入口）
- `home.html` —— 公司宣传主页（含滚动动效、咨询表单）
- `visit.html` —— 访客端（申请访问 / 等待 / 通过 / 拒绝）
- `admin.html` —— 审批后台（批准 / 拒绝，实时生效）
- `demo.html` —— **互动审批演示**：同屏双栏展示访客端 + 审批端，
  左边申请、右边批准、左边实时放行（最适合给客户演示）

**托管 / 分享方式：**

- 上传到对象存储（腾讯云 COS / 阿里云 OSS），拿 https 链接发微信
  —— 详细步骤见 `deploy/微信托管指南.md`
- 或放到 Nginx 的 `/preview/`（见 `deploy/nginx.conf.example`）
- 本地也可直接双击 `http/index.html` 查看（实时联动建议通过链接访问）

> 演示集合用于展示成品效果；正式对外、跨设备真实审批请用本文前述的 `pip` 服务版本。
