michaelesmith/dyndns-kit

创建Dyn DNS兼容服务器的框架

0.1.1 2018-11-02 22:21 UTC

This package is auto-updated.

Last update: 2024-08-29 04:42:34 UTC


README

Build Status

这是什么?

这是一个框架,允许您在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使开源世界运转。🌎 🌏 🌍 :octocat: 开心编码!