michaelesmith / dyndns-kit
创建Dyn DNS兼容服务器的框架
Requires
- php: ^7.1
- ext-json: *
- symfony/http-foundation: ~4.1
Requires (Dev)
- mikey179/vfsstream: ^1.6
- mockery/mockery: ^1.2
- phpunit/phpunit: ^7.4
README
这是什么?
这是一个框架,允许您在PHP中轻松创建和使用简单的DynDNS实现,同时易于修改以添加新功能和处理器。这个项目起源于我在尝试找到一个简单的PHP DynDNS实现,以便我可以使用Digital Ocean作为后端DNS时的挫败感。这个项目解决了我的问题,希望它对其他人也有用。
安装
composer require "michaelesmith/dyndns-kit"
概述
服务器
:尝试执行请求的基本单元
处理器
:操作特定类型的请求。提供了一个通用的处理器,用于处理典型的dyndns请求,但您也可以创建一个处理器来处理API请求。转换器
:将原始请求转换为查询
认证器
:允许我们根据多个因素对请求进行认证。包含的认证器将使用HTTP基本用户名和密码,并可以限制用户访问特定域名。处理器
:处理我们的查询并将结果存储。
如何使用它
请参阅示例项目以查看完整的示例用法。
基本用法
$server = new Server([ new GenericHandler( new DynDNSTransformer(), new HttpBasicAuthenticator([new RegexUser('testuser', 's3cret', '.+')]), new JsonProcessor(__DIR__ . '/var/dns.json') ), ]); $server->execute(Request::createFromGlobals());
在此示例中,我们仅使用单个GenericHandler
、标准DynDNSTransformer
、带有单个用户(允许任何域名)的HttpBasicAuthenticator
以及包含的JsonProcessor
。在现实世界中,JsonProcessor
可能不太有用,但它允许我们轻松测试此配置而无需其他组件。使用下面的curl示例将创建文件dns.json并将地址存储在其中。
更高级的用法
$server = new Server([ new GenericHandler( new DynDNSTransformer(), new HttpBasicAuthenticator([new RegexUser('testuser', 's3cret', '.+')]), new CacheProcessor( new DigitalOceanApiProcessor(['example.com'], new DigitalOceanV2(new GuzzleHttpAdapter('my_api_token'))), new FilesystemCachePool(new Filesystem(new Local(__DIR__ . '/../var/'))) ) ), ]); $server->execute(Request::createFromGlobals());
此示例使用与之前完全相同的设置,除了处理器。在这里,我们使用缓存处理器,因此只有新请求或更新请求才会实际发送到嵌入的处理器,在这种情况下,更新Digital Ocean上托管域的DNS条目。
试一试
curl命令示例
curl "testuser:s3cret@localhost:9001/nic/update?hostname=test.example.com&myip=127.0.0.1"
多主机示例
curl "testuser:s3cret@localhost:9001/nic/update?hostname=test1.example.com,test2.example.com&myip=127.0.0.1"
不包含IP的示例(如果未提供IP,则使用客户端IP地址)
curl "testuser:s3cret@localhost:9001/nic/update?hostname=test.example.com"
其他处理器
- 缓存 - 允许嵌入的处理器仅对新或更新请求进行调用
- DigitalOcean - 允许您通过Digital Ocean API更新DNS条目
贡献
有什么想法让它变得更好?提交一个pull请求。需要集成其他后端服务?构建它。我很乐意在这里添加链接。PR使开源世界运转。🌎 🌏 🌍 开心编码!