无限UCW

Typecho 文章部分加密插件
封面:夜桜霊夢(Pixiv ID:47139274)不知不觉从年前咕到年后的感觉真是奇妙~(狗头)插件很早就写好了...
扫描右侧二维码阅读全文
27
2020/01

Typecho 文章部分加密插件

封面:夜桜霊夢(Pixiv ID:47139274)

不知不觉从年前咕到年后的感觉真是奇妙~(狗头)

插件很早就写好了,因为当时写 README 比较认真就一直没在博客上详细记一次,今天得空补一下插件介绍和开发笔记~

GitHub 项目地址:wuxianucw/PartiallyPassword


插件功能

Typecho 文章部分加密插件(PartiallyPassword)支持对某一篇文章的特定部分创建密码,访客需要正确输入密码才能查看内容。

原生 Typecho 文章加密功能仅支持加密整篇文章,设置密码后该篇文章包括标题全部对未正确输入密码的访客不可见,这在有时并不能我们更加细致的要求。很可能一篇文章中有部分文字我们仅希望『获得许可的个人或群体』查看,而另一部分则希望『所有人』都可见;又或者,我们需要对这个加密内容添加一个注释信息或说明文本,而不想完全隐藏这段思想。这时,使用 PartiallyPassword 即可轻松解决问题。

来个栗子?(密码:wuxianucw

当前版本支持自定义加密块的样式,以及配置加密块上的提示文本。详细内容请参考 README.md,在此不再赘述。

开发笔记

这个 idea 也不算是突然出现的,一直以来都有这方面需求,我目前的方针是『凡可使内容更好玩,且我力所能及可写者,抽空优先考虑开发。』包括首页头图的鼠标跟随、文章中[heimu]黑幕[/heimu]效果,甚至是输出在 Console 中的乱搞内容都或多或少贯彻了这一方针。

最初的版本(v1.0.0)是挂钩了 Widget_Abstract_Contents 中的 contentEx,算是妥协的方案。这个钩子在内容被解析后触发,也就是如果有什么旁路直接拿 text,我是拦不掉的,加密的内容会吐出来,不严谨,心里一直很不舒服,也在寻求解决方案。这一版本的默认样式也极难看,是本着能用就行的策略随意设置的,对密码输入的处理也极不协调,是在前端写入 Cookie 并刷新页面。唯一的优点是可以 PJAX 无刷新加载。

之后很快更新了 v1.1.1 版本,新增挂钩了 Widget_Abstract_Contents 中的 excerpt,在摘要中做一些处理。同时优化了默认样式,仔细想想极简风格不仅好写而且好看。

然后 v1.x 时代就结束了,v2.0.0 版本全面优化了整个流程,包括加密块的处理和密码提交的逻辑,前者交给了 Widget_Abstract_Contentsfilter 钩子,后者在 Widget_Abstract_Contents 中的 singleHandle 中进行,前端把密码 POST 上来,在后端走验证。filter 钩子是大杀器,text 在从数据库中取出来后立即经过 filter 处理,在这里搞定替换可以几乎完全避免加密内容意外泄露,唯一的不确定性只有当第三方插件也挂钩 filter 时,这个处理顺序问题……猜测是根据插件启用的先后顺序确定的,没有进行验证。自这个版本起,默认样式放弃了对 PJAX 的直接支持,换来的是更好的可移植性(在 Typecho 默认主题上可以直接使用),但是你仍然可以开动脑筋根据自己的主题情况自定义代码,实现 PJAX。

寒夜方舟向我提了 issue,称在后台编辑时,加密块保存后自动消失,吓得我心肺停止慌忙 fix。这时注意到后台取 text 也要走 filter,我直接给换掉了那么后台也看不见,保存后还能喜提数据丢失……遂 fix 该重大 bug,发布 v2.0.1 版本。通过 __TYPECHO_ADMIN__ 常量判断了一下前后端,照着 Typecho 的样子做了一点权限控制。

关于之后的开发工作,大方向是搞一个不同密码对应不同内容的新玩法,目前开发工作已全面暂停(咕)。

插件下载

请移步 Releases 页面或点击下面的按钮,将帮您跳转过去。

最后修改:2020 年 01 月 28 日 11 : 09 AM

发表评论

6 条评论

  1. 131

    启动插件 显示服务器错误
    其他插件正常

  2. love02xp

    为嘛我使用时是无效

    1. 无限UCW
      @love02xp

      请确认文章自定义字段“是否开启文章部分加密”处于“开启”状态。

      1. love02xp
        @无限UCW

        可以了,确实是自己的问题
        感谢感谢。。。

  3. 寒夜方舟


    大佬棒棒哒

  4. UCW是苣佬

    哈哈