usox/hypersonic

创建与亚音速协议兼容的API后端

维护者

详细信息

codeberg.org/usox/hypersonic

0.10.0 2024-07-10 19:28 UTC

This package is auto-updated.

Last update: 2024-09-10 18:28:32 UTC


README

Unittests Code Coverage Scrutinizer Code Quality

一个构建遵循subsonic API定义的API的库。

处于开发阶段;目前只支持一组方法

使用方法

先决条件

  • PHP 8.1
  • 遵守PSR规范的请求流(例如,使用Slim等框架)
  • 应用程序中免费的/rest/路由(遗憾的是目前无法更改)

安装

composer require usox/hypersonic

初始化

初始化的一部分是定义所有可用的API方法。每个方法都需要一个实现了DataProviderInterface的类。这些接口声明了数据需要以何种格式构建才能通过API提供。

还需要一个AuthenticationProvider来为API提供认证机制。有关详细信息,请参阅认证。

use Usox\HyperSonic\FeatureSet\V1161\FeatureSetFactory;

$hyperSonic = HyperSonic::init(
    new FeatureSetFactory(),
    new MyAuthenticationProvider(), // implements AuthenticationProviderInterface
    [
        'ping.view' => fn () => new MyPingClass(), // implements PingDataProviderInterface
        'getLicense.view' => fn () => new MyLicenseClass(), // implements LicenseDataProviderInterface
        'getArtists.view' => fn () => new MyArtistListClass(), // implements ArtistListDataProviderInterface
        ...
    ],
);


API路由

简单地将创建的Hypersonic用作/rest/*路由的路由处理程序 - 例如,当使用Slim时

$app = AppFactory::create();
$app->get('/rest/{methodName}', $hyperSonic);

认证

警告

在安全性方面,subsonic协议有些马虎。在版本1.13.0之前,协议期望用户名和密码作为查询字符串的一部分发送 - 密码本身以明文或十六进制编码的形式传输。

1.13.0开始,协议增加了对访问令牌的支持 - 由密码和盐(也添加到查询参数中)组成的md5散列。尽管md5被认为是不安全的散列算法,但它比之前要好得多。遗憾的是,一些支持该协议的应用程序仍然使用旧的认证机制(或两者都使用)。

因此,Hypersonic也支持两种方式,我强烈建议不要在您的服务器应用程序中存储用于API认证的用户密码。请考虑仅使用用于API的用户密码的单独API密钥/令牌。这样,在发生安全漏洞的情况下,您可以降低与安全相关的任何影响。

还要考虑不要实现可能访问敏感数据或修改服务器数据的方法(例如,开始音乐文件夹扫描)。

认证提供程序

AuthenticationProviderInterface期望实现两个方法,一个是令牌认证,另一个是用户名+密码认证。

要检查令牌,请使用用户的API密钥(或者,为了上帝的爱,使用明文用户密码),添加盐并对其进行md5散列。

协议版本

有关详细信息,请参阅官方的subsonic API文档

1.16.1 - 当前支持的方法

  • getAlbum.view
  • getAlbumList2.view
  • getArtists.view
  • getArtist.view
  • getCoverArt.view
  • getGenres.view
  • getLicense.view
  • getMusicFolders.view
  • getRandomSongs.view
  • getStarred2.view
  • ping.view
  • stream.view