Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e8796d443e |
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "dashboard/unifi",
|
"name": "dashboard/unifi",
|
||||||
"description": "UniFi network management, WiFi stats, and captive portal authentication for the Dashboard platform",
|
"description": "UniFi network management, WiFi stats, and captive portal authentication for the Dashboard platform",
|
||||||
"version": "1.6.0",
|
"version": "1.6.1",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('unifi_device_states', function (Blueprint $table) {
|
||||||
|
if (! Schema::hasColumn('unifi_device_states', 'consecutive_count')) {
|
||||||
|
$table->unsignedSmallInteger('consecutive_count')->default(0)->after('in_alert');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('unifi_device_states', function (Blueprint $table) {
|
||||||
|
if (Schema::hasColumn('unifi_device_states', 'consecutive_count')) {
|
||||||
|
$table->dropColumn('consecutive_count');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -87,11 +87,17 @@ class WebhookController extends Controller
|
|||||||
|
|
||||||
private function fireTest(string $url, ?string $secret)
|
private function fireTest(string $url, ?string $secret)
|
||||||
{
|
{
|
||||||
$payload = [
|
$message = '✅ Test webhook from ' . config('app.name') . ' — endpoint is reachable.';
|
||||||
|
$genericPayload = [
|
||||||
'event' => 'test',
|
'event' => 'test',
|
||||||
'timestamp' => now()->toIso8601String(),
|
'timestamp' => now()->toIso8601String(),
|
||||||
'data' => ['message' => 'This is a test webhook from ' . config('app.name')],
|
'message' => $message,
|
||||||
|
'data' => ['message' => $message],
|
||||||
];
|
];
|
||||||
|
// Shape the payload to match the target platform (Google Chat,
|
||||||
|
// Slack, Discord, Teams) so the test exercises the same code
|
||||||
|
// path real events use.
|
||||||
|
$payload = \Dashboard\Unifi\Services\WebhookCheckService::buildPlatformPayload($url, $message, $genericPayload);
|
||||||
|
|
||||||
$headers = ['Content-Type' => 'application/json'];
|
$headers = ['Content-Type' => 'application/json'];
|
||||||
if ($secret) {
|
if ($secret) {
|
||||||
|
|||||||
@@ -581,10 +581,19 @@ class WebhookCheckService
|
|||||||
|
|
||||||
private function formatPayloadForPlatform(string $url, string $message, array $fullPayload): array
|
private function formatPayloadForPlatform(string $url, string $message, array $fullPayload): array
|
||||||
{
|
{
|
||||||
if (str_contains($url, 'chat.googleapis.com')) return ['text' => $message];
|
return self::buildPlatformPayload($url, $message, $fullPayload);
|
||||||
if (str_contains($url, 'hooks.slack.com')) return ['text' => $message];
|
}
|
||||||
if (str_contains($url, 'discord.com/api/webhooks')) return ['content' => $message];
|
|
||||||
if (str_contains($url, 'webhook.office.com') || str_contains($url, 'workflows.office.com')) return ['text' => $message];
|
/**
|
||||||
|
* Public/static helper so the test-webhook endpoint produces the
|
||||||
|
* same per-platform payload shape that real events do.
|
||||||
|
*/
|
||||||
|
public static function buildPlatformPayload(string $url, string $message, array $fullPayload): array
|
||||||
|
{
|
||||||
|
if (str_contains($url, 'chat.googleapis.com')) return ['text' => $message];
|
||||||
|
if (str_contains($url, 'hooks.slack.com')) return ['text' => $message];
|
||||||
|
if (str_contains($url, 'discord.com/api/webhooks')) return ['content' => $message];
|
||||||
|
if (str_contains($url, 'webhook.office.com') || str_contains($url, 'workflows.office.com')) return ['text' => $message];
|
||||||
return $fullPayload;
|
return $fullPayload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user