studosi/mail-filter

控制哪些电子邮件可以在您的Flarum上注册

安装: 187

依赖: 0

建议者: 0

安全性: 0

星标: 6

关注者: 2

分支: 2

开放问题: 13

类型:flarum-extension


README

Flarum的邮件过滤器扩展 - 通过白名单、黑名单和正则表达式描述来过滤您网站的电子邮件注册

License Latest Stable Version


要求

此扩展是在Flarum 0.1.0-beta12和PHP7.4上构建和测试的。如果您遇到问题,并且使用的是不同的构建,说明您没有使用与本文相同的设置(这样我就知道要在另一个环境中对其进行测试)。

除此之外,没有先决条件。它实际上是一个非常小的扩展。


安装

使用 Bazaar 或手动使用composer安装

composer require studosi/mail-filter

更新

composer update studosi/mail-filter

截图

image image image


链接


如何使用

在管理面板中,有4个设置类别

  • 白名单
  • 白名单正则表达式
  • 黑名单
  • 黑名单正则表达式

使用这些设置类别,您可以引入对谁可以注册网站的多种约束 - 在后续文本中,我们将这些约束称为 规则

白名单和黑名单

此类别中的规则将明确检查它们是否相同(使用PHP中的==运算符)。

正则表达式约束

此类别中的规则将使用preg_match进行匹配。

此外,浏览器还将检查正则表达式本身是否有效。我对JavaScript和PHP的正则表达式引擎之间的兼容性不太了解,因此此有效性检查可能不会按预期工作:在这种情况下,请提交一个 问题

基本上,这些检查检查整个字符串。这样您就可以潜在地阻止某些用户名,而不仅仅是域名。

此外,还有最后一件事,这需要 正则表达式 - 诸如在字符串前或后添加/之类的特定语言的事情是不必要的(实际上,此扩展 默认执行此操作,而无需检查此类东西是否已存在)。

良好正则表达式实践的示例

我将简要说明创建电子邮件正则表达式约束时的良好实践。

域名限制

例如,如果您想过滤掉 gmail 电子邮件,您会引入一个类似以下的正则表达式

[^\@]*gmail\.com$

这里有一些需要注意的事情。

首先,您引入一个类似 [^\@]* 的粒子。这将确保您覆盖任何子域名。这种类型的表达式对 黑名单 很好(因为它很严格)。

其次,要注意结尾的 . - 这对于初学者来说很重要,因为 . 实际上在大多数(如果不是所有)正则表达式引擎中是一个任何字符别名,并且如果没有终止符(我们称之为\),它可以将诸如 gmailacomgmaillcom 等内容与 gmailcom 之间的不同字符匹配起来。

最后要注意的是字符串结尾操作符($)。当匹配域名时,您应该使用它,因为它可以减少开销,并且由于域名是电子邮件的 最后 一部分,因此它是明确的。

如果您正在为白名单创建表达式,您应该使用覆盖较少域名的表达式,即

\@gmail\.com$

这也是非常严格的,因为它只会允许以@gmail.com结尾的邮件通过,而不会允许你不知道如何处理的gmail.com域名的任何子域名。

用户名限制

假设你想过滤掉以mark开头的电子邮件。这样做相当简单

^mark[^\@]*

再次注意,我在这里使用的是[^\@]*模式。另外,注意我用^标记了条目的开始。没有它,正则表达式引擎会搜索整个字符串以查找匹配项,这不是你想要的。

但为了举例,假设你想过滤掉包含单词fuck(不考虑位置)的电子邮件。那么,你只需要创建一个等于

fuck

[Ff][Uu][Cc][Kk]

的条目,这将使匹配不区分大小写(尽管电子邮件作为URI是不区分大小写的,尽管我不确定Flarum是否对其进行了规范化,所以需要检查)。


名称

名称不必是唯一的——它们用于微分类,将来可能可以搜索。此外,它们默认是必需的,不是出于任何功能原因,而是为了你的方便。人们会忘记事情 :)


活动

每个规则都可以在不删除它们的情况下启用和禁用。这是通过使用规则定义左侧的开关来完成的。当服务器检查电子邮件是否有效时,将跳过这些规则的检查。


执行顺序

目前,扩展将执行以下操作

  • 检查电子邮件是否在精确的黑名单上
    • 如果是,则抛出黑名单异常
  • 检查电子邮件是否在正则表达式黑名单上
    • 如果是,则将blacklisted标志设置为true
  • 如果blacklisted标志设置为true
    • 检查电子邮件是否在精确的白名单上
      • 如果是,则允许注册
      • 否则,抛出黑名单异常
  • 如果blacklisted标志设置为false
    • 检查两个白名单是否为空
      • 如果是,我们假设该站点不运行白名单,因此允许注册
    • 检查我们是否可以在任一白名单中找到电子邮件
      • 如果可以,则允许注册,否则抛出白名单异常

换句话说,优先级链用以下内容表示

黑名单 > 白名单 > 正则表达式黑名单 > 正则表达式白名单

当然,其他优先级链也是可能的(例如白名单 > 黑名单 > 正则表达式白名单 > 正则表达式黑名单),这可能会在未来版本中作为一个设置。

目前,如果邮件通过检查,则调用validate()函数将返回0,即它使用C语言式的返回值。将来可能会添加错误代码,并且异常抛出可能会完全移动到extend.php文件中。


路线图

  • 在尝试删除规则时引入弹出对话框
  • 使GUI看起来更好(减少纯HTML的平凡性)
  • 引入列表导入(它已经在本地文件中,但我没有时间立即实现它)
  • 为每个列表创建基于名称的搜索
  • 清理后端代码(我三天前开始学习JS和PHP编程,给我一些宽容吧 xD)

关于

此插件最初由Yalfoosh编写。它是Studoši社区的一部分——由学术公民运营的克罗地亚教育论坛。

如果你喜欢它,给它一个星号 :)

我们所有的Flarum开源项目都将使用Apache 2.0许可证。

如果不是这种情况,或者您有任何其他问题或查询,请确保通过以下电子邮件地址联系我们:我们的电子邮箱,或者通过他的半商业电子邮件联系Yalfoosh