diff --git a/app/Models/Plugin.php b/app/Models/Plugin.php index fc49f3c..d377956 100644 --- a/app/Models/Plugin.php +++ b/app/Models/Plugin.php @@ -192,12 +192,8 @@ class Plugin extends Model $httpRequest = Http::withHeaders($headers); if ($this->polling_verb === 'post' && $this->polling_body) { - $contentType = (array_key_exists('Content-Type', $headers)) - ? $headers['Content-Type'] - : 'application/json'; - $resolvedBody = $this->resolveLiquidVariables($this->polling_body); - $httpRequest = $httpRequest->withBody($resolvedBody, $contentType); + $httpRequest = $httpRequest->withBody($resolvedBody); } try { diff --git a/public/mirror/index.html b/public/mirror/index.html index ef60a19..64746fe 100644 --- a/public/mirror/index.html +++ b/public/mirror/index.html @@ -39,6 +39,7 @@ var data = trmnl.getSettings(); trmnl.ui.apiKeyInput.value = data.api_key || ""; trmnl.ui.baseURLInput.value = data.base_url || ""; + trmnl.ui.macAddressInput.value = data.mac_address || ""; trmnl.ui.displayModeSelect.value = data.display_mode || ""; trmnl.ui.setup.style.display = "flex"; @@ -49,6 +50,7 @@ var apiKey = trmnl.ui.apiKeyInput.value; var baseURL = trmnl.ui.baseURLInput.value; + var macAddress = trmnl.ui.macAddressInput.value; var displayMode = trmnl.ui.displayModeSelect.value; if (!apiKey) { @@ -58,6 +60,7 @@ trmnl.saveSettings({ api_key: apiKey, base_url: baseURL, + mac_address: macAddress, display_mode: displayMode }); @@ -81,6 +84,7 @@ var apiKey = setup.api_key; var displayMode = setup.display_mode; var baseURL = setup.base_url || "https://your-byos-trmnl.com"; + var macAddress = setup.mac_address || "00:00:00:00:00:01"; document.body.classList.remove("dark", "night") if (displayMode) { @@ -88,7 +92,8 @@ } var headers = { - "Access-Token": apiKey + "Access-Token": apiKey, + "id": macAddress }; var url = baseURL + "/api/display"; @@ -205,6 +210,10 @@ hasOverrides = true; } + if (key === "mac_address" && value) { + newSettings.mac_address = value; + hasOverrides = true; + } } if (hasOverrides) { @@ -265,6 +274,7 @@ // settings trmnl.ui.apiKeyInput = document.getElementById("api_key"); trmnl.ui.baseURLInput = document.getElementById("base_url"); + trmnl.ui.macAddressInput = document.getElementById("mac_address"); trmnl.ui.displayModeSelect = document.getElementById("display_mode"); trmnl.ui.setup = document.getElementById("setup"); @@ -459,6 +469,12 @@ TRMNL Logo
+
+ + +
+
diff --git a/resources/views/livewire/devices/configure.blade.php b/resources/views/livewire/devices/configure.blade.php index f46b1d9..4c9b4c5 100644 --- a/resources/views/livewire/devices/configure.blade.php +++ b/resources/views/livewire/devices/configure.blade.php @@ -559,7 +559,7 @@ new class extends Component @php - $mirrorUrl = url('/mirror/index.html') . '?api_key=' . urlencode($device->api_key); + $mirrorUrl = url('/mirror/index.html') . '?mac_address=' . urlencode($device->mac_address) . '&api_key=' . urlencode($device->api_key); @endphp
diff --git a/tests/Unit/Models/PluginTest.php b/tests/Unit/Models/PluginTest.php index 82813d9..749fb62 100644 --- a/tests/Unit/Models/PluginTest.php +++ b/tests/Unit/Models/PluginTest.php @@ -72,27 +72,6 @@ test('updateDataPayload sends POST request with body when polling_verb is post', $request->body() === '{"query": "query { user { id name } }"}'); }); -test('updateDataPayload sends POST request with body with correct content type when not JSON content', function (): void { - Http::fake([ - 'https://example.com/api' => Http::response(['success' => true], 200), - ]); - - $plugin = Plugin::factory()->create([ - 'data_strategy' => 'polling', - 'polling_url' => 'https://example.com/api', - 'polling_verb' => 'post', - 'polling_body' => '', - 'polling_header' => 'Content-Type: text/xml' - ]); - - $plugin->updateDataPayload(); - - Http::assertSent(fn ($request): bool => $request->url() === 'https://example.com/api' && - $request->method() === 'POST' && - $request->hasHeader('Content-Type', 'text/xml') && - $request->body() === ''); -}); - test('updateDataPayload handles multiple URLs with IDX_ prefixes', function (): void { $plugin = Plugin::factory()->create([ 'data_strategy' => 'polling',