You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:17:38