mstilkerich/davshell

简单的Shell脚本,用于与(Card)DAV服务器交互

dev-master 2023-05-23 07:39 UTC

This package is auto-updated.

Last update: 2024-09-23 10:31:48 UTC


README

CI Build Type Coverage

这是一个简单的Shell程序,用于与CardDAV服务器交互。它的主要目的是作为carddavclient库的一个简单演示客户端和开发过程中的测试工具。

它目前提供的功能对最终用户来说很少。唯一值得注意的是,它支持将CardDAV地址簿克隆到同一服务器或不同的服务器。

安装

要安装davshell及其依赖项到本地目录,您可以直接使用composer

composer.phar create-project -s dev --no-dev mstilkerich/davshell davshell

这将安装当前主分支(-s dev)到子目录davshell,不包含开发依赖项(--no-dev)。要在安装目录中运行Shell,请运行src/davshell

cd davshell
php src/davshell

第一次运行时,您可能会收到以下警告:找不到文件.davshellrc,直到在Shell中添加账户之前,所有后续运行都会收到此警告,账户信息随后将自动存储在此文件中。

PHP Warning:  file_get_contents(.davshellrc): failed to open stream: No such file or directory in davshell/src/Shell.php on line 406

用法

注意事项: davshell会将您添加的账户和自动发现的地址簿存储在当前工作目录中的文件.davshellrc中,包括凭证。这意味着您不必在每次再次启动Shell时输入数据,但您应该意识到您的密码存储在该文件中。此外,davshell将成功命令的历史记录存储在当前工作目录中的文件.davshell_history中,这可能也包含命令中的敏感信息,如密码。您应该在安装目录中调用davshell,以便配置和历史文件存储在该目录中。

输入help以获取可用命令的列表,help <command>以获取特定命令的详细帮助。

示例

  1. 在与CardDAV服务器交互之前,我们需要指定一个账户。
> add_account ExampleAccount example.com johndoe s3cretw0rd

这将为由example.com提供的CardDAV服务创建一个名为ExampleAccount的账户。账户名称可以自由选择,仅用于在davshell中引用账户。仅提供域名假设目标域已正确设置,可以通过DNS SRV记录或已知URI发现CardDAV服务。如果这不是这种情况,您还可以在此处提供CardDAV服务的完整URL。

  1. 接下来,我们在此账户上发现地址簿
> discover ExampleAccount

输出应指示已发现哪些地址簿。

  1. 使用addressbooks命令获取所有发现地址簿的列表。输出可能如下所示
> addressbooks
ExampleAccount@0 - MyContacts (https://carddav.example.com:443/carddavhome/addressbook1/)
ExampleAccount@1 - MyContacts (https://carddav.example.com:443/carddavhome/addressbook2/)

第一列显示标识符,用于在davshell中引用地址簿,由账户名称和账户中地址簿的索引组成,用@分隔(例如,ExampleAccount@0表示为ExampleAccount账户发现的第一地址簿。

  1. 您可以重复上述步骤以添加其他账户并发现它们的地址簿。所有输入的账户和发现的地址簿都存储在.davshellrc中,因此在再次启动Shell时不需要重复这些步骤。

  2. 现在您可以与地址簿交互了。您可以

    • 使用show_addressbook命令显示地址簿的详细属性,包括服务器支持的报告
    > show_addressbook ExampleAccount@0
    
    • 使用synchronize命令在地址簿上运行同步过程
    > synchronize ExampleAccount@0
    

    请注意,目前此功能实际上并未同步任何内容,它只是模拟了一个与本地空缓存的同步过程。但这是为了测试同步机制对该服务器是否有效,并且会打印出所有找到的卡片的所有FN属性列表。

    • 将一个地址簿克隆到另一个地址簿(通过添加参数-n仅向目标地址簿添加非现有地址对象)
    > clone ExampleAccount@0 AnotherAccount@0
    
    • 使用sweep命令删除地址簿中的所有地址对象
    > sweep AnotherAccount@0