DSH 内测收官合影墙:GitHub OAuth 零权限登录 + 冻结白名单校验的拍立得合影站含 DSH Skill…
37.8/100
综合分
17
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add SenmuuuuW/dsh-group-photo该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 81 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-group-photo(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 06:18:37
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 27 处,展示前 22 条)
- 读取本地文件export-archive.js:14
const members = JSON.parse(fs.readFileSync(path.join(ROOT, 'members.json'), 'utf8')) - 读取本地文件export-archive.js:18
try { works = JSON.parse(fs.readFileSync(path.join(ROOT, 'works.json'), 'utf8')); } catch {} - 读取本地文件export-archive.js:22
return 'data:image/jpeg;base64,' + fs.readFileSync(path.join(ROOT, 'public', 'whale-girl-' + i + '.jpg')).toString('base64'); - 写入本地文件export-archive.js:731
fs.mkdirSync(outDir, { recursive: true }); - 写入本地文件export-archive.js:732
fs.writeFileSync(path.join(outDir, 'index.html'), html); - 读取本地文件freeze-whitelist.js:13
const cfg = JSON.parse(fs.readFileSync(path.join(ROOT, 'config.json'), 'utf8')); - 发起网络请求freeze-whitelist.js:25
const r = await fetch( - 写入本地文件freeze-whitelist.js:52
fs.writeFileSync(path.join(ROOT, 'whitelist.json'), JSON.stringify(out, null, 2)); - 读取本地文件server.js:31
Object.assign(config, JSON.parse(fs.readFileSync(path.join(ROOT, 'config.json'), 'utf8'))); - 读取密钥环境变量server.js:34
config.clientSecret = process.env.GH_CLIENT_SECRET || config.clientSecret || ''; - 读取本地文件server.js:51
try { members = JSON.parse(fs.readFileSync(config.dataFile, 'utf8')); } catch {} - 写入本地文件server.js:53
fs.writeFileSync(config.dataFile, JSON.stringify(members, null, 2)); - 读取本地文件server.js:58
try { social = JSON.parse(fs.readFileSync(config.socialFile, 'utf8')); } catch {} - 写入本地文件server.js:60
fs.writeFileSync(config.socialFile, JSON.stringify(social, null, 2)); - 读取本地文件server.js:65
const s = JSON.parse(fs.readFileSync(config.sessionsFile, 'utf8')); - 写入本地文件server.js:69
fs.writeFileSync(config.sessionsFile, JSON.stringify(Object.fromEntries(sessions), null, 2)); - 读取本地文件server.js:84
const st = fs.statSync(fp); - 读取本地文件server.js:86
const data = JSON.parse(fs.readFileSync(fp, 'utf8')); - 请求外部主机api.github.comserver.js:121
const r = await fetch('https://api.github.com' + pathname, { - 发起网络请求server.js:121
const r = await fetch('https://api.github.com' + pathname, { - 请求外部主机github.comserver.js:194
const r = await fetch('https://github.com/login/oauth/access_token', { - 发起网络请求server.js:194
const r = await fetch('https://github.com/login/oauth/access_token', {
扫描于 2026/11/3(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
涉及外部主机:api.github.com、github.com
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 冻结白名单校验
- 拍立得合影站
README
由 DeepSeek 最新模型翻译生成🔴 线上合影进行中
收官之夜,来合影 👉 https://rio-palm-cfr-benz.trycloudflare.com/
(活动期间在线;仅 dsh-external 内测成员可入镜。地址为活动期临时隧道,永久纪念版见 archive/index.html)
DSH 内测大合影 📸 · dsh-group-photo
DSH 内测收官之夜诞生的合影墙:内测成员用 GitHub 登录(零权限授权),通过冻结白名单校验后,在拍立得墙上入镜并留下一句话。这是内测社区的一件纪念作品。
A polaroid-style group photo wall built for the last night of the DSH internal beta.
Members sign in with GitHub OAuth (zero scopes) and are admitted only if their
GitHub identity matches a frozen whitelist snapshot of the private-period tester
roster. Join once, leave one message, live on the wall forever.
特性
展开完整文档(README 剩余 1 节)
🔴 线上合影进行中
收官之夜,来合影 👉 https://rio-palm-cfr-benz.trycloudflare.com/
(活动期间在线;仅 dsh-external 内测成员可入镜。地址为活动期临时隧道,永久纪念版见 archive/index.html)
DSH 内测大合影 📸 · dsh-group-photo
DSH 内测收官之夜诞生的合影墙:内测成员用 GitHub 登录(零权限授权),通过冻结白名单校验后,在拍立得墙上入镜并留下一句话。这是内测社区的一件纪念作品。
A polaroid-style group photo wall built for the last night of the DSH internal beta.
Members sign in with GitHub OAuth (zero scopes) and are admitted only if their
GitHub identity matches a frozen whitelist snapshot of the private-period tester
roster. Join once, leave one message, live on the wall forever.
特性
- 📸 拍立得合影墙:头像卡片 + NO.xxx 编号 + 留言 + 入镜时间,实时更新、彩带庆祝、移动端适配
- 🔐 零权限 OAuth:授权页不申请任何 scope,登录只用于证明「你是你」
- 🧊 冻结白名单:资格名单是内测私有期的快照,组织公开化 / 成员变动均不影响
- 🔒 浏览同样上锁:合影数据接口需登录会话,未登录只能看到人数
- 📦 零依赖:纯 Node 内置模块 + 原生 HTML/CSS/JS,无构建步骤
- 🗃️ 一键导出静态纪念版(archive/index.html),永久保存、任意静态托管
- 🏷️ 成员卡自动展示其在 dsh-external 组织的代表作仓库(works.json,由仓库首笔 commit 作者映射)
目录结构
├── server.js # 零依赖 Node 服务(OAuth 回调、白名单校验、数据、静态页) ├── public/index.html # 合影墙前端(纯 HTML/CSS/JS) ├── config.json # 默认配置(密钥留空,运行时用环境变量注入) ├── members.json # 合影数据(示例为演示成员,真实数据勿随意公开) ├── whitelist.json # 冻结白名单快照(示例为演示名单) ├── works.json # 成员 → 代表作仓库映射(自动生成) ├── freeze-whitelist.js # 用 PAT 拉取组织成员重新冻结白名单 ├── export-archive.js # 导出静态纪念版 ├── archive/index.html # 已导出的静态纪念版 └── skill/SKILL.md # DSH 技能包装
快速开始
1. 在 GitHub 创建 OAuth App,回调地址填 http://localhost:8808/auth/callback
2. 环境变量注入密钥(绝不放仓库)
GH_CLIENT_ID=xxx GH_CLIENT_SECRET=xxx GH_ORG=dsh-external npm start
3. 打开 http://localhost:8808
支持的环境变量:GH_CLIENT_ID、GH_CLIENT_SECRET、GH_ORG、PORT。
本地部署
前置:Node.js ≥ 20(零 npm 依赖,无需安装包)
1. 拿代码(公开版,含演示数据)
git clone https://github.com/dsh-external/dsh-group-photo.git
cd dsh-group-photo
2.(可选)挂载真实数据:从私有数据层复制(仅维护者)
git clone https://github.com/SenmuuuuW/dsh-group-photo-data.git /tmp/dsh-data
cp /tmp/dsh-data/{whitelist.json,members.json,works.json,social.json} .
3. 配置密钥(环境变量或 config.json 二选一)
export GH_CLIENT_ID=你的ClientID
export GH_CLIENT_SECRET=你的ClientSecret
export GH_ORG=dsh-external
4. 启动
npm start # 等价于 node server.js
5. 浏览器打开 http://localhost:8808
填空对照表(哪里拿 → 填到哪里)
| 要填的东西 | 去哪里拿 | 填到哪个文件的哪个字段 |
| Client ID | GitHub → Settings → Developer settings → OAuth Apps → dsh-group-photo 页面顶部 | config.json 的 clientId(或环境变量 GH_CLIENT_ID) |
| Client Secret | 同一个页面 → Client secrets → Generate a new client secret(只显示一次,复制保存) | config.json 的 clientSecret(或环境变量 GH_CLIENT_SECRET) |
| 回调地址 | 同一个页面 → Authorization callback URL 输入框 | 填 http://localhost:8808/auth/callback → Update application |
| 真实合影数据 | 私有数据仓 SenmuuuuW/dsh-group-photo-data(需用你的 GitHub 账号登录) | 复制 whitelist.json / members.json / works.json / social.json 到项目根目录 |
关键提醒:GitHub OAuth App 只允许注册一个回调地址,且必须精确匹配:
- 本地跑 → 填 http://localhost:8808/auth/callback
- 公网隧道 → 填 https://<隧道地址>/auth/callback(每次换地址都要重新注册)
可选操作:
| 想做什么 | 命令 |
| 公网访问(临时隧道) | cloudflared tunnel --protocol http2 --url http://localhost:8808 |
| 重新冻结白名单(需要 read:org PAT) | node freeze-whitelist.js |
| 导出静态纪念版 | node export-archive.js(产物 archive/index.html) |
| 自定义数据文件位置 | 环境变量 GH_DATA_FILE / GH_WHITELIST_FILE / GH_WORKS_FILE / GH_SOCIAL_FILE |
白名单冻结
把拥有 read:org 权限的 classic PAT 写进 config.json 的 pat 字段(或 GH_PAT),然后:
node freeze-whitelist.js # → 生成/更新 whitelist.json,用完后立刻 revoke PAT
服务端运行时不使用 PAT;whitelist.json 按 mtime 热加载,重新冻结无需重启。
导出静态纪念版
node export-archive.js # → archive/index.html(单文件,双击可开,可上 GitHub Pages)
安全设计
- 成员授权零权限:不申请任何仓库 / 组织 scope
- 资格判定只认冻结快照:按 GitHub 用户 id(主)+ 用户名(辅)匹配
- Fail-closed:白名单不可用即拒绝所有人,绝不放行
- 密钥仅存于部署平台环境变量与本机配置,永不进仓库
- 浏览与入镜均需成员会话;会话令牌 48 位随机十六进制 + HttpOnly
隐私说明
本仓库为公开安全版:members.json / whitelist.json / works.json / archive/index.html 均为演示数据(虚构成员)。
真实数据(内测成员名单、合影留言)由活动维护者存放在私有数据层(如 Senmuuuu/dsh-group-photo-data),通过文件挂载或环境变量(GH_WHITELIST_FILE / GH_DATA_FILE / GH_WORKS_FILE)注入运行环境:
- 真实数据永不进入公开仓库
- 冻结白名单机制保证:无论组织未来如何变化,只有私有期快照中的内测成员可以登录、浏览与入镜——"曾经的内测成员"永远有效
- 部署示例:Render Secret Files 挂载三件套 + 三个环境变量指向挂载路径预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
SenmuuuuW/dsh-group-photo
DSH 内测收官合影墙:GitHub OAuth 零权限登录 + 冻结白名单校验的拍立得合影站含 DSH Skill…
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,025未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,358已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13938 个插件含 PR 收录与…
★ 350已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目