59 lines
1.5 KiB
PHP
59 lines
1.5 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Support;
|
||
|
|
||
|
use Illuminate\Http\Client\PendingRequest;
|
||
|
use Illuminate\Support\Facades\Http;
|
||
|
|
||
|
class EmqxSupport
|
||
|
{
|
||
|
private function api(): PendingRequest
|
||
|
{
|
||
|
return Http::baseUrl(config('emqx.api_url'))->withBasicAuth(config('emqx.api_key'), config('emqx.api_secret'));
|
||
|
}
|
||
|
|
||
|
public function clients($params = [])
|
||
|
{
|
||
|
// merge params
|
||
|
$params = array_merge([
|
||
|
'limit' => 100,
|
||
|
'isTrusted' => true,
|
||
|
], $params);
|
||
|
|
||
|
$response = $this->api()->get('clients', $params);
|
||
|
|
||
|
if ($response->successful()) {
|
||
|
return $response->json();
|
||
|
} else {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function kickClient($client_id = null, $username = null): void
|
||
|
{
|
||
|
// 如果都为空,直接返回
|
||
|
if (empty($client_id) && empty($username)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ($client_id) {
|
||
|
$this->api()->delete('/clients/' . $client_id);
|
||
|
}
|
||
|
|
||
|
if ($username) {
|
||
|
$clients = $this->clients(['username' => $username]);
|
||
|
|
||
|
if ($clients) {
|
||
|
// 循环翻页
|
||
|
for ($i = 1; $i <= $clients['meta']['count']; $i++) {
|
||
|
$clients = $this->clients(['username' => $username, 'page' => $i]);
|
||
|
|
||
|
foreach ($clients['data'] as $client) {
|
||
|
$this->api()->delete('/clients/' . $client['clientid']);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|