把东西放进箱子,用秘密再次取出来
项目描述
简介
这是一个为Zope2编写的小型软件包,其功能类似于Plone中的PasswordResetTool的一部分。它存储一个值,可能包含验证令牌,并使用秘密来保护它。
密码重置工具使用类似技术来存储密码重置请求;然后它将带有一个链接和生成密钥的电子邮件发送到指定的电子邮件地址。当收件人点击链接并填写密钥(实际上,这是链接的一部分,因此这是隐式完成的)和他的用户名(验证令牌)时,他可以设置一个新的密码。
此包旨在支持此类和类似用例。该包执行的操作是
存储值(通过注解完成)
在存在验证令牌的情况下进行确认
获取值
编辑值
删除值
不会发送电子邮件。如果需要用于某个用例,则这是集成商的责任。
目标受众
目标受众是集成商,因为这个包对最终用户来说并不真正做任何有趣的事情。您将必须围绕它构建一些内容。这可以是一个简单的 PloneFormGen 表单。以下是一些可能的用例。
您可以使用此功能存储需要在添加到通讯录之前进行确认的电子邮件地址。
或者,您生成1,000个密钥,打印出来,在交易会上分发,并在人们使用此密钥在您的网站上注册时给他们5欧元;也许您可以用PloneFormGen组合在一起做些类似的事情。
依赖项
已测试与Plone 3.3.5、4.0.9、4.1、4.2、4.3.6、5.0兼容。可能在Plone 2.5中也能正常工作。很可能在纯Zope2中也能正常工作。
安装
将其添加到您的buildout的eggs中。在Plone 3.2或更低版本中,也请加载zcml(在3.3或更高版本中自动加载)。
示例用法
在包的示例目录中有一些示例浏览器视图。如果您想在测试实例中使用它们,请加载它们的zcml;在buildout配置中,这将是类似这样的内容
[instance] ... zcml = ... collective.depositbox.sample
重新运行buildout,启动实例,然后在站点根目录(或其他位置)访问@@deposit-simple或@@deposit-add。如果您遵循最后一个示例的说明,您将添加、确认、编辑和删除一个条目。
示例代码
这应该会给您一个如何使用代码的思路
>>> from collective.depositbox.store import Box >>> box = Box() >>> secret = box.put(object()) >>> box.get(secret) <object object at ...> >>> box.edit(secret, 42) >>> box.get(secret) 42 >>> box.pop(secret) 42 >>> box.pop(secret) >>> secret = box.put('my data', token='maurits@example.com') >>> box.get(secret, token='maurits@example.com') is None True >>> box.confirm(secret, token='maurits@example.com') True >>> box.get(secret, token='maurits@example.com') 'my data' >>> box.get(secret, token='bad@example.com') is None True >>> box.pop(secret) is None True >>> box.pop(secret, token='maurits@example.com') 'my data'
持久化存储数据
如果您像上面那样实例化一个Box(),但未将其添加到数据库中的某个对象,那么当您的Plone站点重新启动时,您将丢失数据。保存盒子的正常方法是通过适配器将其存储在上下文的注解中
from collective.depositbox.interfaces import IDepositBox box = IDepositBox(context)
该上下文可以是Plone站点根目录、文件夹、文档或您想要的任何内容。您可以拥有多个盒子:不同的上下文将拥有不同的盒子。一个盒子的密钥对另一个盒子无效。
过期
请注意,经过一段时间(默认为7天)后,密钥将过期,数据将被删除。
集成商
默认适配器已注册为任何IAttributeAnnotatable对象,这是Plone中任何内容项都为真。它在上下文中添加一个存储盒。这可能适合您的用例,但也许您想要其他东西。因此,这里有一些想法。
请在config.py中查找一些您可以通过猴子补丁轻松覆盖的设置。
如果不喜欢生成的秘密,可以尝试使用猴子补丁替换随机的 id_generator。当前的秘密由8个小写字母或数字组成。为了避免不小心创建(诅咒)词,我们排除了元音字母,并且为了避免进一步混淆,排除了0和1。从这28个字符中抽取8个字符,可以得到1250亿种可能的结果。这足以在近4000年内每秒生成一个随机密钥。如果你想要一个uuid类似的东东也行。我喜欢秘密短,这样你就可以安全地将它作为电子邮件URL的一部分,而不会使链接太长,这可能会导致某些电子邮件程序出现问题。
你可以注册一个继承自 BoxAdapter 的自定义适配器。然后你可以覆盖 ANNO_KEY,这样你就可以用不同的名字存储一个盒子。通过 max_age,你可以确定秘密过期前的天数。同样,通过 purge_days,你可以确定多久清理一次旧项目。也许可以将此适配器专门用于 IPloneSiteRoot。
你可以在寄存箱中添加一个值,并在页面模板中使用如下TAL定义获取秘密
depositview nocall:context/@@deposit-box; secret python:depositview.put('foobar');
对于稍微大一点的例子,请参阅 collective/depositbox/sample/templates/simple.pt。
变更日志
1.3 (2015-09-01)
添加了关于使用 IDepositBox 适配器的文档。[maurits]
1.2 (2014-08-04)
添加了本地化,包括荷兰语翻译。[maurits]
添加了一个简单的 deposit-box-data 视图来查看已确认的数据。你可能希望在自己的代码中覆盖这个视图,使用一些更美观地呈现它的视图,因为它知道存储了哪些类型的值。[maurits]
添加了权限 collective.depositbox: View Data。当用户拥有此权限时,允许访问 get_all_confirmed 数据。我们没有明确授予此权限,因此默认情况下只有管理员才有。[maurits]
1.1 (2012-09-13)
迁移到github: https://github.com/collective/collective.depositbox [maurits]
1.0 (2011-08-13)
初始发布。[maurits]
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。
源代码分发
collective.depositbox-1.3.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e7515e5900960921cde64de561e19b90e209f4dac33094090139a7c02c3a9220 |
|
MD5 | c0fb5f01a9975965c069129d3c37b6ad |
|
BLAKE2b-256 | 308b7804f917eed38ac584b4907dbc2b8dd54f201aa889b4e3c00c78c15351c4 |