求助:通过API创建定时转只读的Etherpad(仅管理员可创建)
嘿,很高兴你觉得Etherpad有意思!针对你提的几个需求,我整理了具体的实现方案,一步步来就能搞定:
1. 限制仅管理员可通过API创建Pad
Etherpad的API权限是通过密钥控制的,要实现只有管理员能创建Pad,你可以这么做:
- 打开Etherpad安装目录下的
settings.json文件,找到apiKeys配置项。给管理员分配一个专属的API密钥(比如"admin_create_key": "YOUR_SECURE_ADMIN_KEY"),同时确保普通用户的API密钥没有createPad的权限。 - 后续所有创建Pad的API请求,必须携带这个管理员专属密钥。普通用户如果用自己的密钥调用
createPad接口,会直接被拒绝。
举个创建Pad的API调用示例(用curl):
curl -X POST http://你的Etherpad域名/api/1/createPad \ -d "apikey=YOUR_SECURE_ADMIN_KEY" \ -d "padID=临时笔记-20240520"
2. 实现Pad超时自动转为只读
要让Pad在x分钟(比如40分钟)后自动变只读,有两种靠谱的方式:
方式一:结合定时器直接调用API
如果是你自己的应用发起创建Pad的请求,可以在创建成功后启动一个定时器,到时间就调用setPadReadOnly接口:
- 比如用Node.js的话,代码大概是这样:
const axios = require('axios'); const ADMIN_KEY = 'YOUR_SECURE_ADMIN_KEY'; const ETHERPAD_URL = 'http://你的Etherpad域名/api/1'; const TIMEOUT_MINUTES = 40; // 创建Pad async function createTemporaryPad(padId) { await axios.post(`${ETHERPAD_URL}/createPad`, null, { params: { apikey: ADMIN_KEY, padID: padId } }); // 设置超时定时器 setTimeout(async () => { await axios.post(`${ETHERPAD_URL}/setPadReadOnly`, null, { params: { apikey: ADMIN_KEY, padID: padId, readOnly: true } }); console.log(`Pad ${padId} 已转为只读`); }, TIMEOUT_MINUTES * 60 * 1000); } // 调用示例 createTemporaryPad('临时笔记-20240520');
方式二:定时扫描+批量处理(更稳定)
如果担心服务器重启导致定时器失效,推荐用定时任务定期扫描所有Pad,判断是否超时:
- 先在创建Pad时,把PadID和创建时间存在数据库里(比如SQLite、MySQL)。
- 写一个脚本,每隔一段时间(比如5分钟)查询数据库里未超时的Pad,对比当前时间和创建时间,超过x分钟就调用
setPadReadOnly接口。 - 把这个脚本加到系统定时任务里(比如Linux的cron,Windows的任务计划程序),确保持续运行。
额外注意事项
- 管理员的API密钥一定要保密,绝对不能泄露给普通用户,避免被滥用。
- 可以给临时Pad加统一的前缀(比如
temp-),方便后续批量识别和处理。 - 如果需要提醒用户Pad即将超时,可以在前端加个倒计时提示,提升用户体验。
内容的提问来源于stack exchange,提问作者bharath
相关产品推荐
相关产品推荐

