Abner
2bbe2f9bc4
♻️ refactor(simyo): 统一客户端版本与 User-Agent 配置
...
抽取 client-identity 作为版本、设备型号与 User-Agent 的单一事实来源;
本地与 Netlify 代理强制使用配置的 User-Agent,不再透传浏览器 UA。
2026-07-22 19:26:12 +08:00
Abner
5a65dd3d01
🐛 fix(simyo): 补齐请求头 X-Device-ID
...
Simyo 4.28+ 要求每个请求携带 UUID 形态的 X-Device-ID,
缺失会返回 400 missing X-Device-ID。前端生成并持久化设备 ID,
本地与代理同步转发该请求头,并将上游 API 路径切换为 webapi。
2026-07-22 19:26:12 +08:00
Abner
0ef5ea82e2
🐛 fix(simyo): 升级 iOS 客户端版本至 4.28.0 修复 HTTP 426
...
Simyo API 拒绝过旧的 X-Client-Version/User-Agent(4.23.5),
导致登录失败 HTTP 426。同步更新前端配置、本地代理与测试页。
Closes #94
2026-07-22 17:49:11 +08:00
Abner
53e56a2594
🐛 fix: 修复 Sentry 广告拦截降级与 Bootstrap source map CSP
...
优先加载同源 Sentry vendor,CDN 仅作回退;生产 connect-src 补充 cdn.jsdelivr.net,消除 .map 连接被拦。
2026-07-17 20:57:49 +08:00
Neo Vern
7298ae4a0d
✨ feat: QR 码本地打包 + Edge Function 直接生成 ( #86 )
...
* ✨ feat: 打包 [email protected] 到本地 ES 模块
* ♻️ refactor(qrcode): 移除 CDN 加载逻辑,改用本地 import 引入 qrcode-generator
* 🔧 chore: 移除 CDN preconnect 提示,QR 码库已内联
* 🔧 chore: 清理 CSP 配置,移除不再需要的 CDN 域名
* ✨ feat: 将 QR 码生成迁移到 Edge Function,消除后端冷启动延迟
- 在 Edge Function 中内联 qrcode-generator 库(~20KB),直接生成 QR 码
- 删除废弃的 Netlify Function (qrcode-generate.js)
- 更新 server.js 移除对已删除函数的引用
- 更新测试文件适配新的 Edge 内联架构
* ♻️ refactor: 代码质量修复 — 移除死代码、消除变量遮蔽、添加交叉引用注释
* 🔧 chore: 修复非阻塞风险 — 补充 strict 模式、移除废弃 qrcode 依赖
- Edge Function qrcode-lib.js 补充 'use strict' 声明,与浏览器版保持一致
- 移除已废弃的 qrcode npm 依赖(原用于已删除的 Netlify Function)
* ♻️ refactor: 消除魔法数字、补充脆耦合和 async 技术债注释
- Edge Function 中 QR margin 魔法数字 8 替换为 QR_MARGIN_MODULES 常量
- generateQRCodeLocal 补充 async 无 await 的技术债说明
- error.message.startsWith 条件补充校验函数耦合关系注释
* 🐛 fix: 修复边界条件 — null JSON body、vendor 字符串异常、CDN preconnect 残留
- Edge Function: null JSON body 解构移到 try/catch 内,添加 null/非对象检查
- qrcode-generator: 库 throw 字符串时统一转换为 Error 对象,避免 .startsWith 崩溃
- index.html: 移除不再需要的 CDN preconnect 提示(jsdelivr/cdnjs)
* ♻️ refactor: 修复 CSP 恢复、异常归一化、自定义 Error 类、负面路径测试
- netlify.toml: 恢复 script-src 中 cdn.jsdelivr.net(Bootstrap JS 仍依赖)
- Edge Function catch: 归一化非 Error 异常(库可能 throw 字符串)
- Edge Function QR margin: createDataURL(cellSize, 2) → createDataURL(cellSize, cellSize * 2) 对齐模块边距
- Edge Function: 补充认证模型和 QR 格式变更注释
- qrcode-generator.js: 引入 QRCodeValidationError 替代 error.message.startsWith 脆耦合
- tests/bff-proxy: 添加 6 个 Edge QR 负面路径测试(无效 JSON、空/超长/非字符串 data、超范围 size)
- tests/qrcode-generator: 添加库 throw 字符串异常的测试
- scripts/sync-qrcode-lib.js: 新增库代码同步验证脚本
* 🐛 fix: 修复 server.js CSP 缺少 jsdelivr、同步脚本 CRLF 归一化、fallback 拦截校验错误
- server.js: 恢复 script-src 中 cdn.jsdelivr.net(本地开发 Bootstrap JS 依赖)
- sync-qrcode-lib.js: 归一化 CRLF 换行符避免跨平台误报
- qrcode-generator.js: generateQRCodeWithFallback 入口处拦截 QRCodeValidationError,避免无效输入触发无意义的后端降级
2026-06-25 22:15:17 +08:00
Abner
8bdc983959
🐛 fix(sentry): 修复 CSP connect-src 缺少 sentry.io 基础域名
...
- 所有 CSP 的 connect-src 添加 https://sentry.io
- *.sentry.io 通配符不匹配基础域名 sentry.io
- showReportDialog 提交反馈时 XHR 被阻止,已修复
2026-06-24 19:24:39 +08:00
Abner
2fc303d4ff
✨ feat: 暴露 Sentry 健康状态并补全 CSP 域名
...
- 在 src/js/sentry-loader.js 新增 getSentryHealth 方法,返回 sdkLoaded、initialized、isDev、dsnConfigured、environment、release 等健康信息
- 将 getSentryHealth 挂载到 window.getSentryHealth,便于运行时诊断 Sentry 是否加载与初始化成功
- 更新 server.js 的 CSP script-src,补充允许 https://sentry.io 域名以匹配 Sentry 脚本加载需求
- 更新 netlify.toml 以及 index.html、giffgaff_modular.html、simyo_modular.html 中的生产/页面 CSP 策略,在 script-src 中加入 https://sentry.io,并相应调整元信息中的域名白名单
2026-06-24 19:20:00 +08:00
Abner
0e1e21651a
🐛 fix(sentry): 修复 CSP 和截图安全问题
...
- server.js scriptSrc 补充 browser.sentry-cdn.com
- 禁用 feedbackIntegration 截图功能,避免泄露 eSIM 凭据
2026-06-24 19:07:38 +08:00
Neo Vern
bb80d3dc0a
✨ feat(sentry): 添加用户反馈功能 ( #83 )
...
* ✨ feat(sentry): 添加用户反馈功能
- 升级 CDN bundle 以支持 feedback 模块
- 添加 feedbackIntegration 内置 Widget(主动反馈)
- 实现错误后自动弹窗(Crash-Report Modal)
- 添加冷却机制防止频繁弹窗(60秒冷却 + 同一错误不重复)
* ♻️ refactor(sentry): 修复审查发现的问题
- 消除指纹计算重复(DRY 违反)
- 统一使用 const/let 替代 var
- 复用已有 showReportDialog 函数
- 添加 beforeSend UI 副作用设计说明注释
* 🐛 fix(sentry): 修复 SentryMock 缺失方法
- 添加 feedbackIntegration 和 replayIntegration 到 SentryMock
- 修复 CDN 加载失败时 TypeError
- 删除多余空行
* 🐛 fix(sentry): 修复代码质量问题
- sentry-loader.js 添加 replayIntegration 和 feedbackIntegration 配置
- sentry-loader.js 添加错误后自动弹窗逻辑(冷却机制 + try-catch)
- sentry-init.js 添加 showReportDialog try-catch 保护
- 弹窗延迟从 100ms 改为 500ms(弱网兼容)
* ✨ feat(sentry): 修复所有代码质量问题
- H1: CSP 添加 *.sentry.io 到 script-src(4 个文件)
- M1: Feedback Widget 和自动弹窗添加中文文案
- M2: 同步两套初始化路径配置(tracing、脱敏、ignoreErrors)
- M3: sentry-entry.js 添加 feedbackIntegration 导出
- M4: 新增专项测试(13 个测试用例)
- L1: SentryMock 补齐 showReportDialog/lastEventId
- L2: 空事件对象防御
* ✨ feat(sentry): 修复 PR 审查发现的全部问题
功能正确性:
- query_string 添加类型检查(字符串/对象兼容)
- 指纹计算移到脱敏前(避免不同错误被误判为重复)
- 冷却状态更新移到 setTimeout 内部(避免空转)
- subtitleLine2 改为 subtitle2(修正字段名)
CSP 修复:
- script-src 移除 *.sentry.io(减少攻击面)
- frame-src 添加 *.sentry.io(支持弹窗 iframe)
- 添加 worker-src/child-src blob:(支持 Session Replay)
- server.js helmet CSP 同步更新
- netlify.toml 注释与实际策略对齐
配置/架构:
- sentry-entry.js 添加 lastEventId 导出
- tracePropagationTargets 添加 CORS 风险注释
- CDN 架构添加说明注释
代码质量:
- URL 参数脱敏支持大小写不敏感
- 移除过宽的 ignoreErrors 规则
- 测试文件添加 use strict
- 添加 i18n 和漂移风险注释
* fix: apply CodeRabbit auto-fixes (#85 )
Fixed 3 file(s) based on 5 unresolved review comments.
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <[email protected] >
* ✨ feat(sentry): 修复新一轮审查意见
CSP 修复:
- script-src 恢复 *.sentry.io(showReportDialog 需要)
- netlify.toml Header CSP 同步 Cloudflare/Google
- server.js helmet CSP 同步
冷却竞态修复:
- 状态预留移到 setTimeout 之前(防止 500ms 内重复弹窗)
- 弹窗失败时回滚冷却状态
脱敏修复:
- query_string 对象分支改为大小写不敏感
- sanitizeQueryString 迭代改为安全模式(先收集键再遍历)
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <[email protected] >
2026-06-24 19:04:38 +08:00
Abner
6379bbef90
♻️ refactor: 移除外部二维码服务依赖,改用本地生成方案
...
- 将前端二维码生成从 `qrcode.show` 远程服务切换为 `qrcode-generator` 本地库(UMD 格式),消除对外部 CDN 渲染服务的依赖,降低隐私风险和第三方服务不可用时的故障点
- 重写 `generateQRCodeLocal` 函数适配 `qrcode-generator` API,使用 `qrcode(typeNumber, errorCorrectionLevel).addData().make().createDataURL()` 模式,并基于 QR 码模块数动态计算 `cellSize`,新增大尺寸预览图支持(400px)
- 移除所有页面中的 `qrcode.show` 域名引用,包括 CSP `connectSrc` 策略、preconnect 标签、resource-hints DNS 预解析配置及 Simyo/Giffgaff API 配置中的 `qrcode` 端点
- 完善二维码生成的日志与监控:在 CDN 加载成功后输出 `console.log`,本地/后端生成成功及失败时分别输出对应级别日志,并在 `trackQRCodeEvent` 中增加 `isBrowser` 守卫避免非浏览器环境报错
- 增加生成耗时和 QR 码长度(不含内容)到后端 BFF 日志,同时统一使用 `Date.now()` 计算请求耗时,避免 LPA 激活码等敏感信息进入日志
- 全面更新所有相关测试用例,适配新的 `window.qrcode` 工厂函数 mock,新增日志输出和 Sentry 上报断言,验证本地成功、本地失败降级、后端成功、后端失败四种场景的可观测性
2026-06-23 21:22:16 +08:00
Abner
f5c5dee5ab
🐛 fix: 修复 Session 恢复后二维码和 LPA 不显示的问题
...
问题:
- 用户完成 eSIM 激活后,因外部二维码服务不可用导致页面空白
- Session 恢复时未调用 showESimResult() 显示二维码和 LPA 信息
解决方案:
1. 新增通用二维码生成模块 (src/js/modules/qrcode-generator.js)
- 实现三层降级策略:本地 CDN → 后端 Function → 文本提示
- 消除对外部服务的依赖,提升隐私保护
2. 新增后端 Function (netlify/functions/qrcode-generate.js)
- POST /bff/qrcode-generate 接口
- 返回 base64 编码的 PNG 二维码
- withAuth 中间件保护 + 输入验证
3. 重构前端二维码生成逻辑
- Giffgaff/Simyo 统一使用 generateQRCodeWithFallback()
- 保留并发调用防护和 tooltip 交互
- 使用 i18n 翻译替代硬编码错误提示
4. 修复 Session 恢复逻辑
- 在 handleSessionRestore() 中调用 showESimResult()
- 确保刷新页面后二维码和 LPA 正常显示
技术改进:
- 懒加载 qrcode.js(~13KB gzip),仅在首次调用时加载
- 完整的测试覆盖(前端单元测试 + 后端安全测试)
- 更新 BFF 路由配置(Edge Function + 本地开发服务器)
Closes #75
2026-06-13 19:20:22 +08:00
Abner
df2b6ca814
🐛 fix(auth): 收紧 BFF 鉴权并修复内部调用链路
2026-05-31 19:25:23 +08:00
Abner
b815225845
🐛 fix(auth): 收紧 BFF 鉴权并保持内部路由兼容
2026-05-31 18:15:45 +08:00
Abner
defcea2160
🔥 chore: 清理 Legacy 冻结校验工具链及相关残留配置
...
- 删除 `scripts/verify-legacy-frozen.js` 及 `scripts/legacy-freeze.json`,移除 legacy 文件冻结校验能力
- 删除 `package.json` 中 `verify:legacy` 和 `verify:legacy:update` 两个 npm scripts
- 删除 `build-static.js` 中移除 legacy HTML 文件的构建时清理逻辑
- 移除 `server.js` 中已废弃的 `/simyo-static` 路由及其兼容静态路径
- 更新 CLAUDE.md、scripts/CLAUDE.md 及两个业务模块架构文档,将"Legacy 架构"表述统一改为"原生 ES6 模块"
2026-05-25 20:34:53 +08:00
Abner
5768c0a075
✨ feat: 为 API 端点新增 /bff/* 路由以实现本地模拟 Edge BFF 代理
...
- 将每个 API 处理器同时挂载到 `/.netlify/functions/*` 和 `/bff/*` 两个路径前缀下
- 使用路由数组和 `forEach` 循环替代逐行注册,消除重复代码,提高可维护性
- 本地环境下 `/bff/*` 路由模拟 Netlify Edge BFF 代理行为,方便本地开发与调试
- 保留原有 `/.netlify/functions/*` 路由不变,确保线上部署向后兼容
2026-05-24 21:39:13 +08:00
Abner
11ba72663a
♻️ refactor: 优化 CORS 处理和 API 响应解析逻辑
...
- 将 `createHeaders` 默认参数从固定 `ALLOWED_ORIGIN` 改为 `null`,改为由 `resolveCorsOrigin` 函数动态解析来源,统一 CORS 处理入口
- 为 `parseOrigins`、`isAllowedOrigin`、`resolveCorsOrigin` 三个 CORS 工具函数添加 JSDoc 类型注释,提高代码可读性和可维护性
- 代理转发时通过展开运算符条件传递 `X-Session-Token` 请求头,避免转发空字符串导致的鉴权问题
- 修复 URL 代理路径截断问题,保留原始查询字符串拼接,确保后端 API 能正确接收所有参数
- 增加对非 JSON 响应内容的处理分支,直接返回文本内容
2026-05-24 21:18:21 +08:00
Abner
61bf73c0a0
♻️ refactor(cors): 抽取 CORS 共享模块 + 通配符告警 + 响应解析容错
...
- 新增 _shared/cors.js 统一管理 CORS 解析与校验,消除 middleware/server 重复
- ALLOWED_ORIGIN 含通配符(*)时启动期输出安全警告
- handleApiResponse JSON 解析加 try/catch,处理空体/坏体场景
2026-05-24 20:44:18 +08:00
Abner
59a7a97c29
✨ feat: CORS 多源支持 + Simyo 代理修复 + API 响应处理重构
...
- CORS 支持逗号分隔多源列表和通配符,新增 isAllowedOrigin/resolveCorsOrigin
- Simyo 代理路径从 req.path 改为 req.originalUrl,修复查询参数丢失
- Simyo 客户端配置提取为常量,支持环境变量覆盖
- API 端点检测浏览器协议,HTTP 访问时使用相对路径
- handleApiResponse 重构:content-type 检查、HTTP 错误优先、兼容三种响应格式
- 新增 X-Session-Token 头透传
- Logger 简化,移除前端模块依赖
- 同步更新测试 mock 以匹配新接口契约
2026-05-24 20:36:05 +08:00
Abner
be2c4e4dfb
✨ feat: 移除遗留页面及相关配置,新增运行时公共函数库
...
- 从 netlify.toml 中移除 `/giffgaff-legacy` 和 `/simyo-legacy` 重定向规则,清理不再使用的旧版页面路由
- 新增 runtime-common.sh 文件,提供跨语言(中英文)共享的运行时函数,包括 JSON 转义、安全检测、系统信息缓存等核心功能
- 更新 legacy-freeze.json,清空冻结文件列表,反映不再需要保护旧版页面文件的状态
- 修改多个脚本文件(pre-commit-check.js、pre-push-check.js、security-check.js),移除对已弃用页面的保护逻辑
- 调整服务入口文件(server.js、simyo_proxy_server.js)和 Service Worker(sw.js),删除对旧版 HTML 文件的引用和服务逻辑
2026-05-07 22:48:34 +08:00
Abner
a1628aa33a
🐛 fix(security): 修复全部 76 个 CodeQL 安全扫描告警
...
修复 GitHub 代码扫描发现的所有安全问题,涵盖 20 个文件、76 个告警:
- Actions 工作流:添加 Fork 仓库限制、来源验证、persist-credentials: false、移除 npm cache
- 明文存储:localStorage 迁移到 secureStorage (sessionStorage + TTL)
- 日志注入:新增 sanitizeLog() 过滤换行符,覆盖全部 console.log 调用
- SSRF:新增 isAllowedTarget() 域名白名单校验
- SRI 完整性:为 Bootstrap/Font Awesome/GTM 添加 integrity + crossorigin
- XSS 防护:错误消息 HTML 转义、Service Worker origin 验证
- URL 清洗:hostname.includes() 替换为精确域名匹配
- HTML 过滤:扩展标签黑名单、添加事件属性过滤
- 限流:全局引入 createRateLimiter (200 req/min/IP)
2026-05-06 21:46:25 +08:00
Abner
cc49daa993
🐛 fix: 修复通知 401 错误和 CSP 违规
...
- middleware withAuth 新增 requireAuth: false 跳过密钥校验
- CSP style-src 添加 fonts.googleapis.com (修复字体加载拦截)
- CSP font-src 添加 fonts.gstatic.com (修复字体资源拦截)
- CSP connect-src 添加 cdn.jsdelivr.net (修复 source map 加载)
- server.js CSP 同步更新与 netlify.toml 保持一致
2026-04-25 16:46:50 +08:00
Abner
7fd54dde39
♻️ refactor: 修复安全漏洞并优化架构债务
...
安全修复:
- 修复 dom.js 和 simyo/app.js 中的 innerHTML XSS 注入风险
- 使用 HTMLSanitizer.escapeHtml/escapeAttr 替代直接模板拼接
- 将 onclick 内联事件替换为 data-* 属性 + addEventListener
- 移除 server.js 中硬编码的 Simyo X-Client-Token
架构优化:
- 新增 _shared/rate-limiter.js 分布式限流模块 (Netlify Blobs)
- verify-cookie.js 内存限流替换为 KV 跨实例共享方案
- giffgaff/utils.js debounce/throttle 改为委托共享实现
- simyo/app.js 会话存储迁移至 SecureStorage (自动 TTL 过期)
- 合并 notifications-internal.js 至 notifications.js 消除双维护路径
2026-04-25 16:30:19 +08:00
Abner
2b8f293506
chore: 更新 Simyo 客户端版本和用户代理字符串
...
* 将所有 Simyo 相关配置中的客户端版本从 4.8.0 更新为 4.23.5。
* 将默认的用户代理字符串更新为反映 MijnSimyoFT/4.23.5 (iOS 26.3; iPhone16,1)。
* 确保代理服务器和 API 配置与最新的 Simyo 客户端版本保持一致,以模拟最新的客户端行为。
* 更新了测试文件中的对应值,以确保测试环境使用最新的客户端信息。
2026-01-12 19:14:43 +08:00
Abner
188d4af85a
feat: 实现多提供商验证码系统,支持 Cloudflare Turnstile 和 Google reCAPTCHA
...
- 新增 CaptchaManager 类,统一管理 Turnstile 和 reCAPTCHA 验证码的初始化和 token 管理
- 扩展 BFF 代理支持多验证码提供商,根据配置自动切换验证逻辑
- 新增公共配置端点,动态下发验证码提供商配置到前端
- 重构 API 管理器,统一处理验证码 token 的头部和载荷注入
- 更新 CSP 策略,支持两种验证码服务的域名和资源
- 保留原有 Turnstile 功能的同时,支持 reCAPTCHA 作为备选方案
- 提供灵活的配置选项,可通过环境变量控制提供商开关和强制验证
2025-11-24 19:03:43 +08:00
Abner
4a0fcc94fe
feat: 重构Netlify Functions架构并增强代码质量
...
- 新增统一的中间件模块,提供鉴权、CORS和错误处理功能
- 重构所有Functions使用withAuth中间件简化代码结构
- 添加安全存储模块替代localStorage,防御XSS攻击
- 引入HTML清理工具,自动转义特殊字符和验证URL安全性
- 创建代码质量检查脚本,验证语法、环境变量和依赖完整性
- 添加构建日志工具和重构脚本,统一替换console.log为Logger
- 引入ESLint配置,提升代码质量和一致性
- 重构Giffgaff相关API,统一错误处理和验证逻辑
- 优化构建脚本,添加压缩和图片优化功能
- 新增健康检查端点,用于服务监控和状态报告
2025-11-23 22:20:02 +08:00
Abner
5a29e64ec7
feat: 重构部署流程并移除 Service Worker
...
- 新增部署工具脚本:添加 `build-static.js`、`deploy-prepare.js`、`deploy-analyze.js` 和 `test-deploy-config.js` 标准化构建部署流程
- 配置 Netlify 发布目录:修改 `netlify.toml` 将 `publish` 从根目录切换到 `dist` 目录以增强安全性
- 移除 Service Worker 相关代码:删除 `sw.js` 并清理相关注册逻辑,简化性能优化策略
- 增强服务器静态文件服务:重构静态资源中间件,增加环境检查和错误处理
- 改进 API 密钥处理逻辑:统一 Netlify Functions 的密钥验证流程,增加配置缺失提示
- 添加 Serena AI 配置文件:包含项目元数据、语言服务器设置和常用命令记忆
- 重构 HTML 页面路由:使用配置化的路由表替代硬编码路径,提高可维护性
2025-11-23 19:44:45 +08:00
Abner
157170c581
feat(simyo): 引入模块化架构并支持新旧版本路由切换
...
- 为 Simyo eSIM 页面新增模块化版本,保留原始版本作为备份
- 更新 Netlify 重定向规则,支持 `/simyo`(模块化)和 `/simyo-legacy`(原始版本)
- 在服务端新增对应路由处理,分别指向不同 HTML 文件
- 添加 MODULE_ARCHITECTURE.md 文档,详细说明模块分层结构与数据流
- 新增核心模块:api-config、auth-handler、device-change-handler、esim-service、state-manager
- 实现基于 ES6 模块系统的可维护架构,采用单例模式和观察者模式
- 支持设备更换流程、eSIM 获取与安装确认等完整业务逻辑
- 提供状态持久化与会话恢复机制,增强用户体验
2025-11-01 10:36:07 +08:00
Abner
0de9083f4b
feat(giffgaff): 重构eSIM工具为模块化架构
...
将原有的单文件实现拆分为模块化结构,提升代码可维护性和扩展性。
新增模块包括状态管理、UI控制、认证处理和eSIM服务等。
同时保留原始版本作为备份,支持通过路由切换访问不同版本。
新增MODULE_ARCHITECTURE.md详细说明模块设计与数据流向。
更新README文档,提供模块化版本使用指南和开发建议。
调整Netlify和服务器路由配置,支持新版和旧版页面共存。
2025-10-31 23:30:45 +08:00
Abner
dd27453c97
feat(qrcode): 更新二维码生成供应商并调整相关配置
...
- 将二维码生成供应商从 api.qrserver.com 更新为 qrcode.show
- 更新了相关文档、代码和测试中的二维码生成 URL
- 调整了内容安全策略(CSP)以允许新的二维码生成 URL
- 更新了 webpack 配置,为新的二维码生成 URL 添加缓存策略
2025-08-11 21:41:54 +08:00
Abner
d1d440621e
feat(security): 添加访问控制和身份验证机制
2025-08-11 00:31:51 +08:00
Abner
ecc0e66755
feat(giffgaff): 实现短信验证码一键激活功能
...
- 新增 giffgaff-sms-activate.js 函数,实现短信验证码激活流程
- 在前端集成短信激活功能,支持一键激活并获取 LPA
- 优化登录界面,增加 Cookie 登录方式
- 实现 Cookie 有效性定时检测,提高用户体验
2025-08-10 23:45:19 +08:00
Abner
ee034d3cb9
feat(giffgaff): 支持 PKCE 公有客户端和机密客户端的 OAuth 令牌交换
...
- 新增 giffgaff-token-exchange.js 函数处理 OAuth 令牌交换
- 增加对 PKCE 公有客户端和机密客户端的支持
- 优化令牌交换流程,支持可选的 Basic 认证
- 更新前端和后端的 OAuth 配置
2025-08-10 19:23:20 +08:00
Abner
f5a6ca01c1
fix: 修复Simyo登录API端点配置问题
...
- 修复API端点检测逻辑,正确识别cosr.eu.org域名
- 为server.js添加完整的Simyo API代理路由
- 修复createHeaders函数,确保本地环境也发送必要的API头部
- 统一本地和生产环境的API路径映射
- 解决404错误和JSON解析错误问题
2025-08-01 21:54:56 +08:00
Abner
2c3e30a078
refactor: 项目清理和文档现代化
...
- 更新README.md技术架构描述,强调Node.js + Netlify Functions架构
- 完全重写Cookie登录设置指南,移除PHP依赖说明
- 新增遗留PHP文件说明文档,明确文件状态和处理方式
- 更新前后端架构分析文档,反映当前Node.js架构
- 完善server.js,添加缺失的GraphQL代理函数引用
- 新增项目清理总结文档,详细记录架构升级过程
- 优化项目结构和文档组织,提高可维护性
- 确保所有文档与当前Node.js架构保持一致
2025-08-01 21:42:06 +08:00
Abner
ab8f0c05d8
🚀 Major upgrade: Convert to Node.js architecture with Netlify Functions
...
🔄 Complete Architecture Transformation:
- Migrated from PHP to Node.js backend
- Implemented Netlify Functions for serverless deployment
- Added Express.js server for local development
- Full compatibility with modern deployment platforms
🛠️ New Netlify Functions:
- giffgaff-mfa-challenge.js: Handles MFA email verification with proper headers
- giffgaff-mfa-validation.js: Processes MFA code validation
- verify-cookie.js: Cookie authentication converted from PHP to Node.js
✅ MFA 403 Error Resolution:
- Proper Origin and Referer headers in server-side requests
- Comprehensive error logging for debugging
- Timeout handling and robust error responses
- Should completely resolve MFA authentication issues
🍪 Enhanced Cookie Login:
- Full Node.js implementation replacing PHP dependency
- Works on all deployment platforms (Netlify, Vercel, traditional servers)
- Intelligent cookie parsing and validation
- Secure API calls with proper headers
�� Development Experience:
- package.json with all necessary dependencies
- Local development server (server.js)
- Environment configuration (env.example)
- Hot reload support with nodemon
🌐 Deployment Improvements:
- Netlify Functions integration
- Updated netlify.toml configuration
- Automatic dependency installation
- Zero-config deployment process
🎯 Key Benefits:
- ✅ Resolves MFA 403 errors through proper server-side handling
- ✅ Cookie login works on all platforms (no PHP dependency)
- ✅ Better error handling and logging
- ✅ Modern serverless architecture
- ✅ Improved development experience
- ✅ Full compatibility with static hosting platforms
📋 Technical Stack:
- Frontend: Pure HTML/CSS/JavaScript (unchanged)
- Backend: Node.js + Express.js (local) / Netlify Functions (production)
- Dependencies: axios, cors, helmet, morgan, dotenv
- Deployment: Netlify with automatic function deployment
This major upgrade modernizes the entire backend architecture while maintaining full frontend compatibility. The MFA 403 error should now be completely resolved through proper server-side request handling.
2025-08-01 21:03:25 +08:00